Enhancements

1. Now in the TpFIBScripter component there is a new UseExecBlockForDML: boolean property, responsible for syntax of commands, changing data. If this property is set to True, all Insert, Modify and Delete queries will be executed (if possible) with EXECUTE BLOCK, which significantly speeds up the script execution. For instance, the block

INSERT INTO TABLE1 (ID, NAME) VALUES (1, 'John');

INSERT INTO TABLE1 (ID, NAME) VALUES (2, 'Steve');

INSERT INTO TABLE1 (ID, NAME) VALUES (3, 'Piter');

will become:

EXECUTE BLOCK AS

BEGIN

INSERT INTO TABLE1 (ID, NAME) VALUES (1, 'John');

INSERT INTO TABLE1 (ID, NAME) VALUES (2, 'Steve');

INSERT INTO TABLE1 (ID, NAME) VALUES (3, 'Piter');

END

2. For compatibility with IBExpert TpFIBScripter now also supports the command REINSERT:

REINSERT (value1 [, value2, value3 ... ])

This command executes the previous INSERT command, substituting into it only new field values. For instance:

INSERT INTO TABLE1 (ID, NAME) VALUES (1, 'John');

REINSERT (2, 'Steve');

REINSERT (3, 'Piter');

3. Into the TpFIBScripter component we've added a mechanism of controlling conditional directives, which enables you to change SQL script logic depending on additional conditions. For example, the IS_FIREBIRD directive is defined automatically if the script is being executed for Firebird server.

Syntax:

{$DEFINE name} - Is sets a conditional directive with defined name

{$UNDEF name} - It cancels the preset directive with the name

{$IFDEF name} – It executes the proceeding commands if the directive with the name is defined.

{$IFNDEF name} - It executes the proceeding commands if the directive with the name is NOT defined.

{$ELSE} It executes an alternative block of proceeding commands, depending on the previous condition {$IFDEF} or {$IFNDEF}. The block of executable commands should finish with {$ENDIF} or {$IFEND}.

{$ENDIF} finishes the block of commands, open with {$IFDEF} or {$IFNDEF}.

{$IFEXISTS DOMAIN|TABLE|VIEW|TRIGGER|PROCEDURE| EXCEPTION|GENERATOR|UDF|ROLE object_name}

the script checks if there exists a defined database object and starts executing the proceeding commands, if the object_name exists.

{$IFEXISTS select_statement}

the script executes the database query select_statement and starts executing the proceeding commands if the query does not result a null value.

{$IFNOTEXISTS} or {$IFNEXISTS} see above, acts as {$IFEXISTS}, but the proceeding commands are being executed if the database object is not found or an empty select_statement result is returned.

{$IF expression} it executes the proceeding commands if the defined expression is true. Only a comparison of a variable and a value can be used as an expression. There are four automatically predefined variables.

1) SERVER_MAJOR_VER - a major server version

2) SERVER_MINOR_VER - a minor server version

3) ODS_MAJOR_VER - a major ODS version

4) ODS_MINOR_VER - a minor server version

Besides using these predefined variables you can also create additional variables in the script, using the construction {$SET}

{$SET myVar=varValue} - enables you to set a variable value which can be then tested by the construction {$IF}

An example:

{IF SERVER_MAJOR_VER=2}

{IF SERVER_MINOR_VER=5}

{$SET SERVER_VER=2.5}

{$ENDIF}

{$ENDIF}

{$IF SERVER_VER>=2.5}

--- here we do something specific for 2.5

{$ENDIF}

Important: conditional directives and constructions which are connected with their processing will not be processed inside the bodies of stored procedures or triggers as well as inside the queries. Here are the examples:

Incorrect use

CREATE PROCEDURE P1 (X INTEGER = 123)

RETURNS (Y INTEGER)

AS

BEGIN

{$IFDEF}

Y = X;

SUSPEND;

{ENDIF}

END;

Correct use

{$IFDEF}

CREATE PROCEDURE P1 (X INTEGER = 123)

RETURNS (Y INTEGER)

AS

BEGIN

Y = X;

SUSPEND;

END;

{ENDIF}

2. Now the TpFIBStoredProc has new methods of getting default values of stored procedures:

function GetParamDefValue (ParamNo: integer): string;

function GetParamDefValue (const ParamName: string): string;

You can set the parameter by its number (ParamNo) or by its name (ParamName). This functionality works only with Firebird versions starting with 1.5.3.

Bugs fixed

1. An error of setting the BLOB-field to Unicode using the Field.Value property has beed fixed.

2. If the string parameter was used in the query more than once, it was incorrectly handled. Fixed.

3. Errors in filtering were fixed.

4. An error occurred in XE3 when the text cursor was lost in SQLEditor. Fixed.

5. Array- did not work in XE3. Fixed.

6. An error of setting Field.asCurrency in XE3 has been fixed.

7. BookMarks worked incorrectly under some conditions, now they operate well.

8. Access Violation on calling the TpFIBDataset.OpenAsClone method has been fixed.

9. Sometimes in XE3 the Locate method did not work in the CacheModel mode set to cmkLimitedBufferSize. Fixed.

10. Calculated-fields worked incorrectly, and now they are fixed.

11. For Unicode fields the poEmptyStrToNull option did not work in the TpFIBDataSet component. Fixed.

12. There were some problems in Unicode BLOB-fields in XE3, now they are fixed.

13. An error in the poKeepSorting option of the TpFIBDataSet component is fixed now.

14. The handler of the Field.OnValidate event incorrectly defined the value of the Field.IsNull property. Fixed.

15. Errors were processed incorrectly in three-tiered applications (MIDAS). Fixed.

16. The TFIBBCDField.Value property in Delphi XE showed an error after consequent arithmetic operations. Fixed.

17. BLOB-fiels were cached incorretly under certain circumstances, now they operate correctly.

18. If any properties of server connection were changed (for instance, the password or the path to the database), and your application used the form (dfm-file resources) with the TpFIBDatabase component with properties of automatic connection preset in design-time, this form did not load (the component could not connect to the database). Fixed.


Preview text: Whats new in version 7.4.5: useful enhancements in TpFIBScripter component and 18 bug-fixes.
Prices in Euro:

235 (1 copy)
1250 (unlimited)

Volume discounts are available...

Navigation



Waaaaw, what a difference in support with IBO, most of the time when I asked something there, I got a arrogant answer. This is really great and I must say, there is a significant difference in speed that FIBPlus is faster! >>

Nico Callewaert
FOR CUSTOMERS
Download full versions and updates in your Personal Area