All new FIBPlus features, enhancements and bug fixes in versions 4.8-6.7

Version 4.8

Features and enhancements:

  1. FIBPlus 4.8 is compatible with Borland InterBase 7. Uncomment {$DEFINE LONG_METADATA_NAMES} in (only for registered users)
  2. FIBPlus 4.8 is compatible with Kylix 3. It includes compiled modules for Kylix 3.
  3. A FIBQuery.OnBatchError event has been added. TOnBatchError = procedure(E: EFIBError; var BatchErrorAction: TBatchErrorAction) of object; TBatchErrorAction = (beFail, beAbort, beRetry, beIgnore);
  4. Setting of editor font has been added to SQLEditor.
  5. New qoNoForceIsNull options have been added to TpFIBQuery and poNoForceIsNull in TpFIBDataSet. They deactivate replacing "Param=:Param" by "Param IS NULL" if the corresponding parameter gets a Null value.
  6. A new eloInFetchedRecords option in TExtLocateOption has been added. When it is added, the ExtLocate method does not fetch records if there are no records satisfying the search conditions.
  7. If you set the Transaction properAll new FIBPlus features, enhancements and bug fixes in versions 5.0-6.5. ty of a dataset, this will cause setting of the Database property if it has not been set.
  8. Now VisibleRecno is a Read/write property.
  9. A new VisibleRecordCount method has appeared. A function VisibleRecno: Integer function has been added. It is done especially to show numbered records.
    In OnCalcFields you write FBN('NumField').AsInteger := VisibleRecno and get numbered records. This works on deleting, filtering, etc. Though in OnFilterRecord it is not recommended to use VisibleRecno in filtering conditions.
  10. Due to issue 9 and 10 in Options there has appeared an poVisibleRecno option. On activating Recno, RecordCount works through VisibleRecordCount and VisibleRecno. As a result the TDBGrid scrollbar shows a correct position on the filtered dataset if all resords have been fetched.
  11. New nethods of TpFIBDatabase have been added:
    ClientVersion - version of gds32 as a string
    ClientMajorVersion - major version of gds32
    ClientMinorVersion - minor version of gds32 (Only for InterBase 7.0)
  12. Fixed bugs:

  13. An error of AddWhereClause in the query with plan has been fixed.
  14. An error of work with array fields has been fixed.
  15. Design editor for AutoUpdateOptions.keyFields has been improved.
  16. An error od setting Database.DefaultTransaction := nil has been fixed.
  17. An error of using TFIBBCDField as a calc-field has been fixed.
  18. Errors of joint use of dataset repositary and Conditions have been fixed.
  19. A bug with filtering through the Filter property on TIMESTAMP fields has been fixed.
  20. A bug in FormatExtended has been fixed.
  21. A bug with TransactionID after CommitRetaining has been fixed.
  22. Realization of the 'Filter' property has been corrected. It did not react on changing the filter text if this was done when the dataset was closed.
  23. Work with a field designer has been corrected.
  24. An error of invalid BLOB ID appeared in case of exception in Insert.
  25. Some internal fixes in FIBQuery making work more optimal in some crucial situations.
  26. A bug with CacheEdit has been fixed.
  27. Minor bugs of editing field repositary in design-time have been fixed.
  28. A minor bug of the Filter property. Under certain conditions there appeared an error of convertion.

    Version 4.8.1

    Fixed bugs:

  29. The error "no databases are listed in transaction component" appeared on opening the form has been fixed.
  30. The error of addressing to the blob-parameter as to the string one has been fixed.
  31. The error "conversion error from string" with use of parameters of the Variant type has been fixed.
  32. The error of work of RecordCount on joint when using psAskRecordCount and deleting records has been fixed.
  33. The error of insert of new records has been fixed.
  34. The error of the parameter order set in macroses has been fixed.
  35. The error of alignment of TDBGrid columns by centre has been fixed.
  36. The error appeared on editing a cloned Dataset has been fixed.
  37. The error in CloneCurRecord, appeared on cloning the last record has been fixed.
  38. The error which prevented the buffer from clearing at the place of the deleted record has been fixed.
  39. The error of work with blob-parameters has been fixed.
  40. pFIBQuery returned 0 instead of null when the result set was empty. Now this error has been fixed.
  41. The error in the FullRefresh method has been fixed.

    Version 5.0

    Features and enhancements:

  42. The editor of FIBPlus DataSet Repository has been changed.
  43. Now TpFIBDatabase has the UseRepositories property. Setting it equal False you can deactivate by force use of any kind of repository support in the whole application.
  44. The useRepositaries property has been renamed to useRepositories.
  45. The TFIBXSQLDA.AssignValues method has been added.
  46. New fields
    have been added in FIBPlus DataSet Repository.
  47. Dataset timers are created now not by default, but only when they are necessary.
  48. The property ValidateAfterLoad: boolean has been added to TpFIBDatabase.CacheSchemaOptions. If you set it equal False, FIBPlus will not try to check the saved metadata scheme after loading.
  49. TpFIBQuery has now the public read-write PlanClause property.
  50. The button SaveSQL does not check the SQL syntax in SQLEditor if this check is not activated.
  51. The SqlTxtRtns module has been entirely rewritten.
  52. The UpdateTransaction behaviour has been changed. Now it starts only at the moment of execution of a modifying query. The query preparation is executed in open transactions.
  53. TpFIBDatabase.Gen_Id is called now in the first available open transaction and does not create its own one.
  54. Work with new InterBase keywords has been improved.
  55. The AsIn64 property has been added to TFIBBCDField (for all Delphi versions starting from Delphi 4).
  56. A property responsible for the generator step has been added to AutoUpdateOptions of TpFIBDataSet.
  57. Some events have been renamed:
    • TpFIBDatabase.Onlogin is changed to BeforeConnect,
    • TpFIBDatabase.OnConnect is changed to AfterConnect.
  58. Support of server exceptions during work with Foreign Keys, Check Constraints and Unique Constraints has been added to TpFibErrorHandler.
    To activate this feature you need to activate the corresponding option in the Options property in TpFIBErrorHandler and create the following table in the database:
    Creation of and work with this table is implemented in the TpFIBDataBase component editor now.
  59. Two new properties have been added to AutoUpdateOptions:

    1. ParamsToFieldsLinks: TStrings
      Enables to set accordance between dataset fields and parameters in the form FieldName=ParamName. Then this accordance is used in the internalhandler before calling OnNewRecord. The parameter value is automatically set to the defined field;
    2. AutoParamsToFields: boolean
      If you set this property equal True, TpFIBDataSet tries to set the ParamsToFieldsLinks property itself analyzing the SelectSQL text. (run-time only)
  60. The DefaultUpdateTransaction property has been added to TpFIBDatabase. Being added to the form after setting DefaultUpdateTransaction, all the TpFIBDataSet sets will use this property value in order to set the UpdateTransaction property.
  61. Now TpFIBTransaction has methods:

    1. SetSavePoint(const Name: string) and
    2. RollBackToSavePoint(const Name: string)
    (only for FB 1.5)

  62. Now TpFIBDatabase has the property ServerActiveTransactions: TStringList, which returns a list of active transaction identifiers of the current database at the server. This list returns an ID list of transactions active at the moment (only for FB 1.5)
  63. Minor changes in TFIBSQLMonitor, enabling it to monitor new operations with SavePoint.
  64. Version 5.0.8

    Features and enhancements:

  65. An ability to address to calculated fields from OnFilterRecord has been added.
  66. Version 5.1

    Features and enhancements:

  67. An ability to set a path to the client library for a separate TpFIBDatabase (different gds32.dll, fbclient.dll) has been added.
  68. A new TpFIBDataSet property RefreshTransactionKind: TTransactionKind has been added where TTransactionKind = (tkReadTransaction, tkUpdateTransaction); It determines the transaction context of RefreshSQL execution. If the dataset has no separate UpdateTransaction, this property value is ignored.
  69. The CompareBookmarks function has been changed.
  70. The TTransactionAction type in unit IB_Services; has been renamed to TServiceTransactionAction in order to avoid conflicts with the TTransactionAction type in FIBDatabase.
  71. Version 5.2

    Features and enhancements:

  72. FIBDataSet handlers added:

    1. property BeforeStartTransaction: TNotifyEvent;
    2. property AfterStartTransaction: TNotifyEvent;
    3. property BeforeEndTransaction: TEndTrEvent;
    4. property AfterEndTransaction: TEndTrEvent;
    5. property BeforeStartUpdateTransaction: TNotifyEvent;
    6. property AfterStartUpdateTransaction: TNotifyEvent;
    7. property BeforeEndUpdateTransaction: TEndTrEvent;
    8. property AfterEndUpdateTransaction: TEndTrEvent;

  73. An ability to generate a single chosen modifying query instead of all has been added to SQL Generator.
  74. A component editor for pFIBQuery has been added.
  75. SQL Generator component editor and Dataset Repository editing dialog have been rewritten.
  76. The poFetchAll option has been added to TpFIBDataSet.Options. If it is true, after opening TpFIBDataSet all the records will be automatically fetched from the server.
  77. A new event OnApplyDefaultValue: TOnApplyDefaultValue has been added to TpFIBDataSet, where

  78. TOnApplyDefaultValue = procedure (DataSet: TDataSet; Field: TField; var Applied: boolean) of object;

    The event handler is called for each field with a not null DefaultExpression during insertion of a new record. In this handler you can handle DefaultExpression for some fields yourself if a standard handling procedure doesn’t suit for these needs. You should set Applied to True in order to handle it manually and deactivate standard handling.

  79. Now FIBPlus behaves differently on changing the saved metadata cache. The check is done not after connection, but at times, when necessary. So is some cache parts are not required in the meanwhile, it won’t be checked.
  80. DataSet Repository cache saving has been implemented. To make this possible we have added another field with a number of a repository record version to the DataSet Repository table. To automatically change the repository table structure call the repository editor using the pop-up menu in TpFIBDatabase.
  81. A new variable FIBHideGrantError: boolean = False has been added. When the variable is True, and TpFIBDataSet has no data modification rights, it deactivates data editing or deleting ability without error messages.
  82. In TpFIBDataSet the OnCompareFieldValues: TCompareFieldValues event has been added, where TCompareFieldValues = function (Field: TField; const S1,S2: variant): integer of object. The event handler is called during local sorting. Using it you can control sorting order and compare values transferred in pairs.
  83. Support of comments with the marker '--' has been activated.
  84. An ability to set defaults for TpFIBDataSet.DefaultFormats has been added to FIBPlusTools.
  85. Version 5.3

    Features and enhancements:

  86. Now the TpFIBTableInfo.GetPrimaryKeyFields method closes the transaction if it has been opened before.
  87. FIBDataSet has new methods:

    procedure BatchRecordToQuery(ToQuery: TFIBQuery);
    procedure BatchAllRecordsToQuery(ToQuery: TFIBQuery);

    BatchRecordToQuery - adds parameter values, taken from the fileds of the current record, to the indicated query (ToQuery), and then executes the query.
    BatchAllRecordsToQuery - executes BatchRecordToQuery for all dataset records.
  88. A new field type TFIBGuidField has beed added.
  89. A new option psUseGuidField has been added to FIBDataSet.PrepareOptions. Its work is similar to that of psUseBooleanField. That is, if a field has a domain with the string 'GUID'in its name, it will be represented as a TFIBGuidField set at the client.
  90. TFIBGuidField field values are automatically generated in the OnNewRecord event handler, if the AutoGenerateValue field value is equal to arAutoInc.
  91. Now TpFIBDatabase has the CreateGUIDDomain method. It creates a special domain for the GUID fields in the database.
  92. TFIBXSQLVAR has new methods supporting GUID fields:
    function GetAsGUID: TGUID;
    procedure SetAsGuid(aValue: TGUID);
  93. TpFIBDataSet has new methods DisableCalcFields and EnableCalcFields. They activate/deactivate automatic calling of the OnCalcFields handler.
  94. The Locate methods deactivate recalculation of calculated fields for the period of their work, if KeyFields have neither calc nor lookup fields.
  95. A new option psUseGuidField has been added to FIBDataSet.PrepareOptions (works similar to psUseBooleanField: if the field has a domain with the string 'GUID' in its name, it will be shown in TFIBGuidField at the client)
  96. Now SQL Editor can represent the current cursor position in the SQL text.
  97. Such TpFIBDatabase methods, as
    function QueryValues(const aSQL: string): Variant; overload;
    function QueryValues(const aSQL: string; ParamValues: array of variant): Variant; overload;
    return all values of the indicated query as an array of variants
  98. Now Before/AfterScroll calls:
    1. in case of unsuccessfull Locate are not performed.
    2. in case of successfull Locate BeforeScroll is called for the old record and AfterScroll for a new one.

    Version 6.0

    Features and enhancements:

  99. The method function FindField(const FieldName: string): TFIBXSQLVAR has been implemented in TpFIBQuery. If the required field is not found, the function returns nil instead of the exception.
  100. The property GroupByClause: string has been added to TpFIBQuery. It returns the text of GROUP BY from the current SQL text.
  101. Now TpFIBQuery and TpFIBDataSet enable to work with macros in DDL queries.
  102. The directive {$DEFINE NO_GUI} has been added to If it is enabled, the library files are generated without VCL-modules and visual components.
  103. Now the TpFIBDataSet.GenerateSQLs method works even when the field collection is empty. This feature may help to generate SQL before opening a dataset, if the fields are not created in design-time.
  104. TpFIBDataSet includes a new function LocatePrior (const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean. It enables to search a record in the local buffer (from the current record to the buffer beginning).
  105. The TpFIBDataSet.Options property now has a psSetEmptyStrToNull option. If it is active, new string fields of this dataset have the EmptyStrToNull property activated.
  106. The TpFIBDataSet.Options property has a poFreeHandlesAfterClose option. If this option is active and when Eof is True (i.e. after getting all records of the query result) Handle releases in TpFIBDataSet. This feature helps to avoid the server report «Object in use» on altering database objects. Note: Handle release causes the query close.
  107. An analogous option (poFreeHandlesAfterClose) has been added to TpFIBQuery. If it is
    used, Handle is released immediately after calling of the Execute method.
  108. An ability to set the transaction parameter isc_tpb_no_auto_undo has been added to TpFIBTransaction.
  109. A new property TAutoUpdateOptions.SeparateBlobUpdate: Boolean has been implemented. If it is active, BLOB-fields are saved in the following way:

    1. Texts of modifying queries are generated without BLOB-fields.
    2. Modifying queries are generated separately together with the BLOB-fields.
    3. On executing Post the query is started without the BLOB-fields, and then an empty BLOB is being created. After it is saved in the database, UPDATE is started in order to save a real BLOB-field value. As a rule, BLOB-fields are saved by an ordinary modifying query.

    In case this query was rejected by the server and an exception arose, the BLOB-fields must be queried to the server anew. Due to a new approach, this situation is avoided. The BLOB-field is not queried to the server unless the main query INSERT/UPDATE is a success, and unless the developer encounters no problem during this step (i.e. if the server does not reject the operation in general).
  110. A new mode of TpFIBDataSet internal buffer organization has been implemented. For more details see the paragraph «TpFIBDataSet mode "Confined local buffer"».
  111. An ability of automatic caching of BLOB-fields at the client has been implemented. For more details see the paragraph «Caching BLOB-fields at the client side».
  112. Now one may write a table name with an alias, for instance, as «TABLE1 AAA» in the AutoUpdateOptions.UpdateTableName property. This feature may be useful for correct generation of modifying queries by the SelectSQL text, with the modified table mentioned two times or more.
  113. Supplement to the FIBPlus features and erhancements Version 6.0
  114. Version 6.1

    Fixed bugs:

  115. A report "Can''t read Buffer.Incorrect RecordNo" appeared on adding a new record to the database. An exception arose on trying to refresh an empty dataset. Fixed.
  116. Incorrect FullRefresh occurred with CacheModelKind=cmkLimitedBufferSize Fixed.
  117. Local sorting and the CloneCurRecord method did not work. Fixed.
  118. On saving a dataset to the repository the query dialog always opened with an empty string. Fixed.
  119. FIBPlus 6 invoked an error in the Refresh SQL Query when creating the SQL statements at design time. Fixed.
  120. If Select used macro, refresh did not work. Fixed.
  121. On trying to connect to the database in design-time FIBPlus used the client library gds32.dll, though the LibraryName property was fbclient.dll. Fixed.
  122. AV on trying to cancel changes in Blob. Fixed.
  123. An error with poKeepSorting on working with a huge dataset sorted by ORDER BY. Fixed.
  124. An error on calling Append. Appeared occasionally. Fixed.
  125. DoSortEx did not work. Fixed.
  126. FullRefresh worked incorrectly in the confined local buffer mode. Fixed.
  127. SQL generation for queries which used double quoted names of objects.
  128. RefreshSQL could not be set through SQLNavigator in FIBPlusTools. Fixed.
  129. An option "Close design connect after run application" has been added in Preferences of FIBPlusTools on the TpFIBDatabase page. If the option is true, after starting a program compiled in Delphi it disconnects all databases open in design time in the database. This option is necessary for the application which uses fbembedded.dll as a client library.
  130. Version 6.2

    Features and enhancements:

  131. TFIBGUIDField values are automatically generated on inserting a new record.
  132. Now evident use of string values is possible in the WHERE clause with Unicode-connection to the database (SELECT * FROM T1 WHERE MyField = 'string'). Note: Versions 6.1 downwards can use only parameter values in Unicode connection.
  133. FIBPlusTools have been adapted for Delphi 2005.
  134. The BatchOutputRawFile method of the TpFIBQuery component has been changed:procedure BatchOutputRawFile (const FileName: string; Version: integer = 1);
    The second argument defines the way of writing to the file.

    If Version = 1, the old principle works: data are shown in the external file in the order, determined by SQL query fields. It is implied that the parameters will have the same order on reading the written data by the BatchInputRawFile method in a reading SQL. A number of TpFIBQuery fields (field data were written) and a number of TpFIBQuery parameters (the parameters will read the data) must coincide. String fields require conformity of the length of reading fields and the reading parameter; name conformity is not required.

    If Version = 2, a new writing principle is used. Besides the data, secondary information on fields (their name, type and length) is also written into the file. When being read, the data will be taken according to the name conformity. The number of fields and their order in the writing TpFIBQuery may not conform to those in the reading TpFIBQuery. No field type and length conformity is required. Field names must conform.
  135. The TpFIBDatabase component has new properties:

    property ServerMajorVersion: integer;
    property ServerMinorVersion: integer;
    property ServerRelease: integer;
    property ServerBuild: integer;

    their names explain their meaning.
  136. TpFIBQuery has new methods:

    function TableAliasForField(FieldIndex:integer):string; overload;
    function TableAliasForField(const aFieldName:string):string; overload;

    These functions return the table alias by a field number or by a field name.
  137. ISQLObject interface has a new method:

    function FieldName (FieldIndex: integer): string;
  138. Now maximum event length in TSIBfibEventAlerter is 128 symbols instead of 64.
  139. Now it's possible to use calculated Blob fields in your applications. To enable this, the TFIBBlobField class has obtained a new property IsClientField: Boolean, and TpFIBDataSet has obtained a new OnFillClientBlob:TOnFillClientBlob event, where

    TOnFillClientBlob = procedure (DataSet: TFIBCustomDataSet; Field: TFIBBlobField; Stream: TFIBBlobStream) of object;

    Now if IsClientField of the blob field is True, the field value is not taken from the database or not written into it. (though the blob field must be sill present in Select query). To fill in field values you should set the OnFillClientBlob event handler of a corresponding TpFIBDataSet. For example:

    procedure TForm1.NoLookupFIBDataSetFillClientBlob(DataSet: TFIBCustomDataSet; Field: TFIBBlobField; Stream: TFIBBlobStream);
  140. A new poCacheCalcFields option has been added to the TpFIBDataSet component. If it is True, the results of calculated and lookup fields are stored in cache. This enables to recalculate the fields only after the record modification. This mode is recommended if the calculated fields are used for complex calculation, or if there are used local sorting, filtering and searching by calculated fields.
  141. The TpFIBDataSet component has new methods:

    function CreateCalcField (FieldClass: TFieldClass; const aName, aFieldName: string; aSize: integer): TField;

    function CreateLookUpField (FieldClass: TFieldClass; const aName, aFieldName: string; aSize: integer; aLookupDataSet: TDataSet; const aKeyFields, aLookupKeyFields, aLookupResultField: string): TField;

    They enable to create calculated and lookup fields in run-time.
  142. Performance of Locate and DoSort methods has been considerably increased (thanks to Gary Haywood for his performance tests).
  143. Now if Required fields are empty, the CacheInsert and CacheEdit methods do not call an exception.
  144. Now a field of the TFIBWideStringField class may be Calculated (as a standard TWideStringField class cannot be used because of the VCL error).
  145. TpFIBDataSet has a new property FieldOriginRule: TFieldOriginRule, where

    TFieldOriginRule = (forNoRule, forTableAndFieldName, forClientFieldName, forTableAliasAndFieldName);

    It determines the rule of setting TField.Origin.

    forNoRule: Origin is not set (developers should set it themselves).
    forTableAndFieldName: Origin is set as a string: "physical table name "+"."+"physical field name".
    forClientFieldName: Origin conforms with Field.FieldName.
    forTableAliasAndFieldName: Origin is set as a string: "table alias in query"+"."+"physical field name".

    The forNoRule and forClientFieldName rules are useful for the developers who use FIBPlus together with DevExpress. The forTableAliasAndFieldName rule is important in Firebird 2.
  146. Now in the AutoUpdateOptions.UpdateTableName property it is possible to set not simply a table name, but a table name + " " + a table alias. If the table name is not upper-case (dialect 3), it must be written in double quotes (" ").

    This enables to correctly generate modifying queries for Firebird 2, as FIBPlus effectively works with such constructions as:

    Select a.*, b.Description DescripB
    from Tasks a
    left join Tasks b on ( =

    In other words, it works well with the constructions, in which one table is used more than once. The Description field must not be edited. Previous versions of FIBPlus (6.1 downwards) and IB/FB do not work correctly with such queries. Now in FIBPlus 6.2 it's enough to set AutoUpdateOptions.UpdateTableName := 'Tasks a' instead of AutoUpdateOptions.UpdateTableName := 'Tasks'.
  147. Fixed bugs:

  148. A bug with the TFIBGUIDField class (the class was not registered). Fixed.
  149. The Locate method worked incorrectly with Unicode fields. Fixed.
  150. An error in the SQL editor in Delphi 2005. Switch to Code Editor worked incorrectly. Fixed.
  151. An error in the SQL parser, which appeared on uncommon queries. Fixed.
  152. An error in GUID fields in the master-detail mode. Fixed.
  153. The SetAsBCD and GetAsBCD methods of the FIBBCDField class worked incorrectly with calculated fields. Fixed.
  154. An error in the AsString property of the TpFIBQuery component on working with Unicode. Fixed.
  155. Fields of the NUMERIC(xxx, yyy) type were not shown correctly on using the DisplayFormat property for values which were not precised well by the Double type. Fixed.
  156. An error of inserting in an empty TpFIBDataSet, if poKeepSorting is True. Fixed.
  157. An error in ApplyUpdates on deleting all records. Fixed.
  158. ExtLocate into a sorted query in TpFIBDataSet worked incorrectly, if KeyFields order differed from real sorting field order. Fixed.
  159. Now, Search is a simple running over, on calling ExtLocate with the eloInSortedDS option into an unsorted query in TpFIBDataSet. Previous versions showed incorrect results of such Search. Fixed.}
  160. Version 6.25

    Features and enhancements:

  161. Two TFIBDatabase methods supporting new commands RDB$GET_CONTEXT and RDB$SET_CONTEXT implemented in Firebird 2 have been added.

    function GetContextVariable (ContextSpace: TFBContextSpace; const VarName: string): Variant;
    procedure SetContextVariable (ContextSpace: TFBContextSpace; const VarName, VarValue: string);

    Fixed bugs:

  162. An error in the TpFIBQuery.SetAsExtended method. Fixed.
  163. A minor memory leak in RegUtils. Fixed.
  164. An error occurring on writing into a Blob field with TDataSetProvider. Fixed.
  165. An error "Can't read buffer. Invalid RecordNo”, occurred under certain conditions. Fixed.
  166. Wrong results of calling the Refresh method in TpFIBDataSet occurred under certain conditions. Fixed.
  167. An error on reading a Blob field in the OnCalcFields handler. Fixed.
  168. An error in the Locate method of the TpFIBDataSet component occurred in case when not all records were fetched from the server. Fixed.
  169. Wrong results of the Origin property with FieldOriginRule = forNoRule Fixed.
  170. An error of generating SQL statements with UpdateOnlyModifiedFields=True in the TpFIBDataSet component (appeared in NUMERIC(18,x) fields on trying to replace the NULL value by 0 and vice versa. FIBPlus wrongly considered these fields non changeable).
  171. Wrong work of DisplayFormat for NUMERIC(18,x) fields. It occurred on using non mask symbols, i.e. "$ #,000 and 00 cents". Fixed.
  172. An error in client calculated fields. (The buffer was not cleared before the field calculation. The error occurred in case when a field was calculated for the previous record, not for the current one in OnCalcFields. Then, instead of an empty value, the previous record value was shown in the current record). Fixed.
  173. Wrong search of the True Boolean value in TpFIBBooleanField. Fixed.
  174. An AV in TFIBStringField occurred under certain conditions when using the psSetEmptyStrToNull property. Fixed.
  175. Useless quotes in the automatic GeneratorName value. Fixed.
  176. An error of defining key fields in SQLEditor Fixed.
  177. Nested parameters were not set in RefreshSQL on using macros. Fixed.
  178. Version 6.3

    Features and enhancements:

  179. A new method function FIBDataSet.IsComputedField(Field:Variant): boolean; has been added. It returns true even for server-calculated fields. Its argument is either a field name in the dataset or a field number in the filed list.
  180. A new method procedure FIBDataSet.AssignProperties(Source: TFIBCustomDataSet); has been added. It sets values from the Source dataset properties to all properties. This method is similar to FIBQuery.AssignProperties.
  181. Two dataset properties have been added. They enable access to SELECTSQL clauses:

    property GroupByClause:string;
    property MainWhereClause:string;
    property PlanClause:string;

  182. A new define {$DEFINE}has been added to It activates defines for particular SynEdit builds. This build available at the SynEdit site is called
  183. FIBDataBase has a new SQLLogger property. The FIBAppStatistics component has beed removed. Now its functionality is realized in the FIBSQLLogger component.
    FIBSQLLogger is a component enabling to log SQL queries and gather query statistics.
    property ActiveStatistics:boolean - Shows whether statistics gathering is active.
    property ActiveLogging:boolean - Shows whether logging is active
    property LogFileName:string - Shows the log file name
    property StatisticsParams :TFIBStatisticsParams - Shows what parameters are used for statistics gathering

    property LogFlags: TLogFlags - Shows what operations are logged
    property ForceSaveLog:boolean - Forces log writing. I.e. every query is written to the file.

    function ExistStatisticsTable:boolean; - Shows whether a table for statistics keeping exists
    procedure CreateStatisticsTable; - Creates a table for keeping statistics in the database

    procedure SaveStatisticsToDB(ForMaxExecTime:integer=0); - Saves the statistics to a database table. The parameter shows statistics for long-running queries. Set the ForMaxExecTime value equal to the shortest query execution time, and you will get statistics on all longer queries.
    procedure SaveLog; - Saves the log into the file (necessary if ForceSaveLog is set to True)
    (Special thanks to Jonathan Neve).
  184. A feature enabling to deactivate the component name causing an error, has been added. For this use the code:
    use FIB; Exclude(IBErrorMessages, ShowRaiserName).
  185. isc_tpb_no_savepoint transaction parameter is handled now for better InterBase 7.5 support.
  186. A new variant of the FIBQuery.ExecWPS; method has been implemented:

    procedure ExecWPS(ParamSource:ISQLObject; AllRecords:boolean=True); overload;

    It works almost the same as ExecWPS. I.e. it runs ExecQuery, using the ParamSource parameter as a parameter source. The second argument tells the method to execute ExecQuery either for each ParamSource record or only for the current.

  187. Now pFIBClientDataSet supports ISQLObject interface. Along with Feature 2 this enhancement enables easy data transfer from the client dataset to the InterBase/Firebird database. An example: FIBQuery1.ExecWPS(FibClienDataSet1,True)
  188. Minor enhancements in FIBQuery parameter handling (Thanks to Andry Ogorodnik)
  189. New feature of Firebird 2 is supported now. Firebird syntax is:

    Insert Into Table1 ...

    If you write such InsertSQL in the dataset, then all the fields returned in the RETURNING clause after execution of the Post method will be updated in the dataset. This feature helps to get field values formed by triggers without additional Refresh. I.e. you may also get primary key values without calling the generator at client.

  190. Minor enhancements for better C++ Builder and Kylix support.
  191. gen_id() handling has been added to SQLEditor (in SynEdit in Code Proposal). Pressing Ctrl+space you may see a list of generators (thanks to Jonathan Neve)
  192. SQLEditor shows field types. (thanks to Jonathan Neve)
  193. Fixed bugs:

  194. Wrong query generation in confined cache mode, if the order by clause had comments. Fixed
  195. Incorrect work of the poKeepSorting option on adding the First record to the dataset. Fixed
  196. An error of primary key generation in Midas applications if the provider had ResolveToDataset = False. Fixed
  197. An error in Numeric fields on using different section formats, such as '#,##0.00;#,##0.000;Zero'. Fixed
  198. Some errors in ÑloneCurrRecord, macros and queries; DoSortEx in OpenAsClone. Fixed.
  199. An error in the SQL parser. It appeared if the parameter followed after "-", i.e. SET IS_DELETE = -?OLD_RING_IDENT. Fixed
  200. An error in the OpenAsClone method. It appeared on sorting and modifying the data in the clone dataset. Fixed
  201. An error of handling the poTrimCharFields option. It appeared when a user inserted too many spaces at the end of the string while working with Varchar. After Post these end spaces were kept in memory whereas the data was shown without them. Fixed
  202. Incorrect work of ExtLocateNext with the eloInSortedDS option. Fixed
  203. An error of Refresh with poVisibleRecno set to True in the master-detail link. On adding a record to the Detail dataset and after Refresh, the Master dataset changed the current position to some optional record. Fixed
  204. Incorrect generation of modifying queries on changing SelectSQL together with the alias of the modifying table. Fixed
  205. Incorrect work of TpFIBTableInfoCollect.ClearForTable for tables with Names written in "". Fixed
  206. The Eof flag remained if the cursor stood at the last dataset record after Locate. Fixed
  207. In some cases an exception appeared in RefreshSQL. EFIBInterbaseError with the SQL code -804 "Incorrect values within SQLDA structure". Fixed
  208. Incorrect dataset work with macros of the same name and query text changes after setting the macro values.. Fixed
  209. Incorrect behaviour of the LocateNext method. It returned incorrect results if the last current dataset record met the searching condition. Fixed
  210. Incorrect C++ Builder package compilation. Fixed
  211. An error appeared in poProtectedEdit on closing the transaction by CommitRetaining. Fixed
  212. An error Invalid Blob_id appeared on inserting a blob from the dataset by the stored procedure without Refresh after Post. Fixed
  213. An error in the TFIBXSQLVAR.SetAsXSQLVAR method. Sometimes it caused errors in BatchXXX methods.
  214. An error in poKeepSorting, values of sorted fields were not inserted after Insert. Fixed.
  215. Changes in IB_Services (defines for Kylix).
  216. Version 6.4

    Features and enhancements:

  217. A new TpFIBDataSet event has been added:

    property AfterUpdateRecord: TFIBAfterUpdateRecordEvent read FAfterUpdateRecord
    write FAfterUpdateRecord
    TFIBAfterUpdateRecordEvent = procedure(DataSet: TDataSet; UpdateKind: TUpdateKind;
    var Resume:boolean) of object;

    The event happens during ApplyUpdates and ApplyUpdToBase methods for every record modification sent to the server. The event handler is called AFTER the query execution.
  218. TpFIBDataSet has a new option - poRefreshAfterDelete. If it is set to True, Refresh for the modified record is called after calling of the Delete method. If the Refresh attempt has been a success (i.e. the record has not been physically deleted), this record won't be deleted from cache and will remain visible.
  219. In FIBPlusTools the Preferences tab has a new option poUseLargeIntField in PrepareOptions and DateTimeDisplay setting in DefaultFormats
  220. Now FIBPlus components and FIBPlusTools are compatible with Delphi 2006.
  221. Fixed bugs:

  222. Minor fixes in SQLNavigator in FIBPlusTools: on opening SQL Navigator window in a new application project (File->New->Application; FIBPlus -> SQL Navigator) the default module (Unit1.pas) disappeared. Fixed.
  223. Minor fixes in the SQL text search in SQLEditor.
  224. An error in the Locate method (Locate on deleted row returned True). Fixed.
  225. An error of handling Field.DisplayFormat, type "#,##0.00;-#,##0.00; ;" Fixed.
  226. Incorrect work of SQL Editor with the flag "Use Selected Fiedls Only". Fixed.
  227. An error of RefreshSQL in SQL Editor occurred because of the commented text at the beginning of SelectSQL. Fixed.
  228. Incorrect work of the dcForceMasterRefresh option. Fixed.
  229. An error in poKeepSorting on trying to change the first TpFIBDataSet record. Fixed.
  230. An error in poProtectedEdit. The current record position was incorrect. Fixed.
  231. Workaround for the internal Delphi compiler error E5912, appeared on recompiling the code of the following type: FIBBCDField.Value:=1;.
  232. An error which appeared on working with memory in TFIBStringField, when fields were created at design time and SQL text was changed at run time to increment the field length. Fixed.
  233. Version 6.4.1

    Features and enhancements:

  234. In BDS 2006 build TFIBDataSet is a descendant of the TWideDataSet class, not TDataSet.
  235. Bugs fixed:

  236. Lost TpFIBClientDataSet parameter values, which are defined in the OnBeforeOpen event handler. Fixed.
  237. Memory leak on using DataSet.UniDirectional. Fixed.
  238. An error of using macros with quotes. Fixed.
  239. Incorrect Locate in rare cases. Fixed.
  240. An error in Borland code. For more details see Bug Tracker.
  241. An error in Borland code. For more details see Bug Tracker.
  242. The Filter property did not work for LargeInt fields. Fixed.
  243. AV on working with DoTrim if an empty string was used as an argument. Fixed.
  244. Incorrect work of LocateNext, if not all the records have been selected to cache. Fixed.
  245. Sometimes ExtLocate showed the last found record instead of the first one. This happened after searching records in sorted dataset if there were several records with similar fields. Fixed.
  246. Version 6.4.5

    Features and enhancements:

  247. Support of C++ Builder 2006 has been added.
  248. Support of charset UTF8 fields for Firebird 2 has been added.
  249. TpFIBDatabase has a new property UseBlrToTextFilter :Boolean. It activates/deactivates handling of BLOB fields with Blr (2) and Acl(3) subtypes.
  250. Now the FIBDatabase.QueryValueAsStr method returns an empty string, if the query returns nothing or the Null field.
  251. TpFIBDatabase has a new event handler: TOnApplyFieldRepository=procedure(DataSet:TDataSet;Field:TField;FieldInfo:TpFIBFieldInfo) of object;
  252. DSContainer has a new event handler: TOnApplyFieldRepository=procedure(DataSet:TDataSet;Field:TField;FieldInfo:TpFIBFieldInfo) of object;
  253. DSContainer has a new property: IsGlobal:boolean. If this property is set to True, DSContainer works for ALL datasets of the application.
  254. SQL queries "COMMIT" and "ROLLBACK" are handled differently now. Instead of the queries the server gets corresponding transactions. Such behaviour enables to correctly close the queries, executed in the closed transaction.

    Note: New features 4-6 enable developers to easily use their own settings in the field repository.


    If you need to set the EditMask property, add the EDIT_MASK field to the repository table; create a container; make it global by setting the IsGlobal property to True; and write the following code in the OnApplyFieldRepository event handler:

    procedure TForm1.DataSetsContainer1ApplyFieldRepository(DataSet: TDataSet; Field: TField; FieldInfo: TpFIBFieldInfo); 
  255. Bugs fixed:

  256. The error repository editor incorrectly worked on selecting "Unique Indices". Fixed .
  257. An error in the method FIBDataSet.RecordFieldValue(Field:TField;aBookmark:TBookmark):Variant; has been fixed.
  258. If the PLAN clause in TpFIBDataSet.SelectSQL used implicit JOIN which began with “(”, and a new value was set to TpFIBDataSet.PlanClause, the query resulted with a wrong PLAN clause (with unnecessary “(” symbol after the word PLAN). Fixed.
  259. Incorrect error message handling of user exceptions in TpFibErrorHandler for Firebird 2 (because of a new feature PSQL Stack Trace in FB2). Fixed.
  260. Incorrect handling of lost connection on restoring attempts. Fixed.
  261. There was no BOOLEAN field handling in TFIBCustomDataSet.RecordFieldValue for InterBase 7. Fixed.
  262. An error CloneCurRecord: error with boolean field in record (IB7). Fixed.
  263. An error in LocateNext. LocateNext returned True if the last dataset record satisfied the Search conditions and Search started with this record. Fixed.
  264. Incorrect work of LocateXXX methods with calculated field filtering. It appeared if Locate was done in not calculated fields, whereas filtering (Filtered) was done in calculated fields. Fixed.
  265. EAccessViolation after handling OnUpdateError if CachedUpdates=True and OnUpdateError "UpdateAction:=uaAbort;". Fixed.
  266. An error of working with stored procedures in SQLEditor. Fixed.
  267. An error on generating RefreshSQL, if the table alias began with "AS". Fixed.
  268. An error of executing several execute blocks. Fixed .
  269. An error of lost connection handling in case of multiple connections to different databases. Fixed .
  270. A minor error in FIBQuery.PrepareArraySqlVar. Fixed.
  271. An error of setting a string value '000...' to the BCD field. An example: FIBBCDField1.asString:='0000'; Fixed.
  272. Version 6.5

    Features and enhancements:

  273. Now the SQLMonitor shows the SQL text after applying macros and conditions.
  274. Now the OnFillClientBlob event is called after the record is first read as well as after it’s modified.
  275. TpFIBDataSet.Options has a new option poUseSelectForLock. It can be used if poProtectedEdit = True. In case poProtectedEdit = True, the record will not be locked by “dummy update”, and the following statement will be used instead:
    Select * from TABLE1 WHERE ... for update with lock
    Note: This feature works ONLY for Firebird)
  276. The FIBQuery.ExecuteImmediate method has been added. It executes the query immediately, without Prepare (see the isc_dsql_execute_immediate function in the IB API manual)
  277. Now ExecuteImmediate executes DDL queries.
  278. The CopyFieldsProperties procedure has new properties:
    AutoGenerateValue, ConstraintErrorMessage, CustomConstraint, Tag and Index.
  279. The pFIBDataSet.ReceiveEvents property and the pFIBDataSet.OnUserEvent event are being deprecated and will be removed from the main code in future versions. People, who are still using this property should compile the library with the define USE_DEPRECATE_METHODS2 in
  280. Bugs fixed:

  281. Occasionally an incorrect record was added to a sorted dataset. Fixed.
  282. An error in TpFIBCustomService.GenerateSPB occurred if the Params property was empty. Fixed.
  283. On changing the Filter property previous filter results were not refreshed. Fixed.
  284. An error in the Locate method on searching numerical values in string fields. Fixed.
  285. The SQLMonitor worked incorrectly on exception monitoring (sometimes caused suspension). Fixed.
  286. Incorrect behaviour of the SQL dataset editor with queries containing the same table in several places. Fixed (guaranteed for Firebird 2 only).
  287. Cached calculated fields in TFIBCustomDataSet.RecordFieldValue did not have the ftSmallInt type. Fixed.
  288. Incorrect handling of fields with charset UTF8 and collate, different from the default value. Fixed.
  289. If the database was in the shutdown mode, the connection automatically closed. Then the lost connection was handled (with pFibErrorHandler). Fixed.
  290. An error in the query generator has been fixed: the field type was not shown for DOUBLE PRECISION fields. Fixed.
  291. A small memory leak on working with the BLOB parameters. Fixed.
  292. An error on locating a Unicode-string in the field varchar(unicode_fss) if poTrimCharFields was set to True. Fixed.
  293. Function InvertOrderClause(const OrderText:string):string; incorrectly functioned:
    it did not handle Order By using NULLS FIRST, and thus caused incorrect work of the confined local buffer for such queries). Fixed.
  294. TpFIBDataSet.PSInTransaction, PSStartTransaction,PSEndTransaction methods functioned incorrectly. Fixed.
  295. An error on executing DDL queries in the Unicode Connect (comments in languages other than English were corrupted). Fixed.

    Version 6.7

    Features and enhancements:

  296. Now FIBPlus supports Delphi 2007
  297. Now FIBPlus supports InterBase 2007
    • A new define has been added to {$DEFINE SUPPORT_IB2007}. If it is set, some InterBase 2007 features are added to FIBPlus
    • A new method TpFIBDatabase.IsIB2007Connect:boolean; has been added
    • A news InstanceName property has been added to ConnectParams
  298. Now FIBPlus supports charset SUPPORT_KOI8_CHARSET and define in {$DEFINE SUPPORT_KOI8_CHARSET}
  299. The procedure TFIBXSQLVAR.SetAsVariant(Value: Variant); method has been changed to support the OleVariant data type (thanks to Danny Van den Wouwer)
  300. Now you can select a generator from the generator list in the dataset repository editor.
  301. A new subproperty IB2007: TIBConnectParams has been added to the TConnectParams property in TpFIBDatabase, where TIBConnectParams has a new field InstanceName: string. (Works only with the define $DEFINE SUPPORT_IB2007})
  302. Now you can separately set the connection port in the TpFIBDatabase editor (only for Firebird).
  303. Bugs fixed:

  304. Such values as e.g {00000000-0000-0000-0000-000000000000} were incorrectly shown in TFIBGuidField. Fixed.
  305. An error occurred on calling the IsEmpty method if the DataSet.CacheModelOptions .CacheModelKind= cmkLimitedBufferSize property was defined. Fixed.
  306. An error occurred in the Sort procedure (unit fibDataset) with defined DisableScrollEvents if the dataset contained 0 or 1 record. Fixed.
  307. An error in the function TpFIBDataSet.PSGetParams: TParams method has been fixed (thanks to Danny Van den Wouwer).
  308. pFIBClientDataSet has been improved in order to operate correctly with Unicode fields in BDS2006.
  309. An error in the TFIBQuery.DoAfterExecute method caused incorrect order of operations in SQLMonitor. Fixed (thanks to Danny Van den Wouwer).
  310. An error occurred on changing the client library at runtime. Fixed.
  311. In the TFIBXSQLVAR.GetAsDateTime method an error occurred if the data value was less than the initial InterBase date value. Fixed.
  312. Such comments as Firebird (--) were incorrectly parsed in the WhereClause method. Fixed.
  313. An error occurred on processing queries with the "with" command for Firebird 2.1. Fixed.
  314. TGUID fields did not work for TClientDataSet. Fixed (thanks to Anton Tril).
  315. TGUID fields did not work with QuantumGrid. Fixed (thanks to Anton Tril).
  316. The lost connection with the server was processed incorrectly when TFIBSQLLogger was connected to TpFIBDatabase. The program loop occurred and OnLostConnect was called repeatedly. If you disconnected TFIBSQLLogger from TpFIBDatabase everything worked well. Fixed.
  317. Now the TBeforeLoadBlobFromSwap and TBeforeLoadBlobFromSwap event handlers are declared differently. The old declaration operated incorrectly for Delphi 5.

Preview text: That is new in versions 5.0-6.7: 135 enhancements, 161 bug fixes. Supports InterBase 2007 and Delphi 2007
Prices in Euro:

235 (1 copy)
1250 (unlimited)

Volume discounts are available...


We are a small software company with thousands of customers delivering comany wide systems including accounting, logistics, e-commerce, POS, sales etc etc. Several years ago, when we were still a very small company, we used Delphi 3 and Paradox combined with BDE. As our system (and customer base) grew I decided to switch to Delphi 5 and Interbase. Being a huge improvement over Delphi 3 and Paradox, I encountered numerous problems with IBX: memory leaks, performance issues and other problems. Borland was not to be bothered: IBX was provided "as is" and no support was avaliable. 
Not being very eager to use third party components with Delphi at first, I decided to give FIBPlus a try. At once all problems where gone: no more memory leaks and  performance was very consistent. 
But the real advantage of switching to FIBPlus came with the upgrade to D2005: after upgrading there were some problems with the new FIBPlus version. After emailing the problem I received an update within an hour! And this was at 11 pm! A few other (smaller) errors where handled in the same way. 
Our motto is: software is as good as its support. And support of Devrace is just great!
Just a little indication of our FIBPlus use: all our software runs 100% on FIBPlus. Our customers have a total of aprox. 4.800 Firebird databases in production, with a combined size of over 130TB and over 80 million transactions a day. Every
day. And FIBPlus has not failed a single transaction. Not once. There is, however, one (minor) drawback in using FIBPlus: while debugging an application which uses and invalid SQL instruction, de Delphi Debugger returns to the FIBPlus code instead of to our calling code (where the actual error comes from), thereby complicating de debug proces a little. But that is a very small price to pay for a otherwise brilliant third party solution! >>

Bas Jordans JorSoft Ltd
Download full versions and updates in your Personal Area