ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/branches/journaling/changelog
Revision: 340
Committed: Wed Jul 7 11:53:54 2021 UTC (3 years, 4 months ago) by tony
Original Path: ibx/trunk/changelog
File size: 74283 byte(s)
Log Message:
Fixes Merged

File Contents

# User Rev Content
1 tony 340 IBX Change Log version (2.4-1 Build 12550) Wed, 23 Jun 2021 13:59:14 +0100
2    
3     1. -c command line option added to fbsql example program. Used to set connection
4     character set.
5    
6 tony 338 IBX Change Log version (2.4-0 Build 12543) Mon, 22 Feb 2021 11:00:08 +0000
7 tony 315
8     1. Firebird 4 support added.
9    
10     2. New FB4 data types TIME WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, DECFLOAT and
11     extended precision NUMERIC fields are supported.
12    
13     3. TFmtBCDField is used to support access to DECFLOAT and extended precision NUMERIC fields.
14    
15     4. TIBDateTimeField and TIBTimeField are introduced in support of TIMESTAMP WITH TIME ZONE
16     and TIME WITH TIME ZONE fields. These inherit from TDateTimeField.
17    
18     5. IBExtract now supports FB4 enhancements:
19     - new data types as above
20     - Identity column extensions
21     - Default user role
22     - SQL Security clause for Database, Tables, Procedures, Functions and Triggers
23     - Internal Functions
24    
25     6. IBExtract: new event: OnExtractLines.
26    
27     7. IBExtract: revert create trigger to legacy syntax see Firebird CORE-6243, CORE-5545 and DOC-145
28    
29     8. IBXServices: Server version no. parsing now allows any letter before major version number
30     and is no longer restricted to 'V' e.g. "LI-T4.0.0.1436 Firebird 4.0 Beta 1"
31    
32     9. TIBDataSet and TIBQuery: new property TZTextOption. Used to determine the default
33     format for rendering a time zone.
34    
35     10. TIBDataSet and TIBQuery: new property DefaultTZDate. Used to provide the default date
36     to convert TIME WITH TIME ZONE data type values to and from GMT.
37    
38     11. Unit name IBTypes changed to IBInternals. Internal interfaces TIBGUIInterface and TIBTimerInf renamed to
39     IIBGUIInterface and IIBTimerInf respectively.
40    
41     12. Constants: DPBPrefix and TPBPrefix moved to IB unit. DPBConstantNames and TPBConstantNames
42     now accessible as properties of TIBDatabase and TIBTransaction respectively.
43    
44     13. String Fields: when a fixed character with (CHAR) field is returned, it is now
45     truncated to its fixed character width rather than being right padded with
46     white space to the maximum data size.
47    
48     14. TIBTable.Empty table. In additional to deleting all records in the underlying
49     table, the internal buffers are now also flushed ensuring that the TIBTable is
50     also empty.
51    
52     15. TBatchSQLStatementReader: Line buffer is now cleared on call to reset.
53    
54     16. TIBXControlService descendents: DatabaseName may now be set using a database
55     connect string. The database name is extracted from the connect string.
56    
57     17. DBControlGrid: Minor bug fixes. avoid AV on form closure, avoid black panel
58    
59     18. TIBExtract: Data type of COMPUTED By columns is no longer included in SQL.
60    
61     19. Local database on Linux and with legacy API and FB 2.5 embedded server: fixed problem with password
62     not being present as required.
63    
64     20. IBTreeView split into DBTreeView and IBTreeView. This former is an IBX indepedent
65     version that can be customised to work with other database drivers.
66    
67 tony 319 21. ISQLMonitor: use platform specific LineEnding to delimit messages. Avoids
68     unnecessary CR at end of line on Unix platforms.
69    
70     22. ISQLMonitor: Unix: Default semaphore timeout increased from 1 second to 10
71     seconds in order to reduce risk of message loss.
72    
73     23. ISQLMonitor: read and write count statistics now available via:
74     property TIBSQLMonitor.ReadCount;
75     IIBSQLMonitorHook.GetWriteCount: integer;
76    
77     24. ISQLMonitor tidy up and unit split. IPC functions moved to new unit IBIPC.
78    
79 tony 312 IBX Change Log version (2.3-5 Build 12350) Tue, 25 Aug 2020 16:11:02 +0100
80 tony 308
81     1. TIBStringField: when a string value is read from a dataset buffer, if the
82     number of UTF8 characters exceeds the string size then string is truncated
83     to the maximum string size. This is usually a problem with fixed width columns
84     right padded with white space.
85    
86     2. SQLFiltered and SQLFilterParams added to TIBQuery, TIBTable and TIBDataset.
87     If SQLFiltered is set then when a dataset is opened, each line in the
88     SQLFilterParams property is assumed to be a SQL condition clause and
89     ANDed into the Where clause of the SQL Select statement provided as a
90     dataset property. Each such SQL condition thus acts as an additional filter
91 tony 315 on the dataset.
92 tony 308
93     3. The Filtered property inherited from TDataset is no longer used for SQL (server
94     side filters).
95    
96 tony 311 4. IBLookupComboEditBox: Selection should no longer reset to start of text when
97     text matches complete entry.
98    
99     5. TIBDataLink: Detail Dataset params not refreshed unless both master and detail
100     dataset are active (avoids risk of access violation if master is inactive)
101    
102     6. TIBEvents: Registered property can now be set at design time even if database not open
103    
104     7. TIBEvents: component now correctly re-initialised after call to UnregisterEvents.
105     This should prevent "spillover" of events between sessions.
106    
107     8. TIBCustomDataset: GetNextRecord now called when reseting to first record of a unidirectional dataset.
108     This should ensure that the internal buffer is set up correctly and avoids
109     a duplicate initial row.
110    
111     9. TIBStringField: DataSize now given as byte size of string less trailing any zero character.
112     That is, the DataSize should be the field size * character set width. The
113     value returned by DataSize is now the same as the Dataset buffer size reserved
114     for the field.
115    
116 tony 312 10. IBExtract: Tidyup of SQL generation. Avoid unnecessary double quotes.
117 tony 311
118     11. TIBCustomDataset: Add checks on buffer sizes when copying data from row to field buffer
119     and vice-versa. This may result in an exception being raised (correctly) for
120     older programs when using dataset fields added to a form and the database has been
121     upgraded. For example, computed fields can change from 32-bit to 64-bit integers.
122     In such cases, the field needs to be deleted in the IDE fields editor and then
123     added back in.
124    
125 tony 312 12. IBCustomDataSet: CanInsert, CanEdit, CanDelete and CanRefresh updated to return
126 tony 315 false if query contains only white space and not just empty.
127 tony 312
128 tony 311 12. IBCustomDataset: Blob data is now cleared when TDataSet.Cancel is called. This
129     should ensure that (e.g.) a TDBMemo is correctly refreshed after a dataset edit
130     is cancelled.
131    
132 tony 315 13. IBCustomDataset: SetArrayIntf should no longer cause an access violation if
133     called on a null field.
134    
135     14. IBCustomDataSet: An access violation should no longer occur when calling CancelUpdates
136     results in an empty dataTC86 Client side Filtered Dataset 1 X
137     set.
138    
139     15. IBCustomDataSet: OnUpdateError should now be called in all circumstances when
140     a cached update is applied and an exception is raised.
141    
142     16. IBCustomDataSet: Avoid access violation when SetBookmarkData called with nil pointer.
143    
144     17. Console Mode Local Database support: backup/restore should now work correctly.
145    
146     18. Local Database Support: if an upgrade fails, a downgrade is now performed if
147     possible and an exception raised.
148    
149     19. MinimumVersionNo added to Local Database Support. Database will not open if
150     below this version no. and upgrade not possible.
151    
152 tony 307 IBX Change Log version (2.3-4 Build 12041) Fri, 17 Apr 2020 14:00:32 +0100
153 tony 306
154 tony 307 1. TIBXDataSet and Generators: Generator Names that are not all upper case or
155     not SQL Identifiers are now supported.
156 tony 306
157 tony 307 2. TIBXScript: Set Generator is no longer rejected as unrecognised SQL and is
158     passed to the Firebird engine for execution.
159 tony 306
160 tony 307 3. TIBDataSet: Unidirectional datasets now give an error message if an attempt
161     is made to scroll back.
162 tony 306
163 tony 307 4. New unit: IBMessages.pas. Contains only messages used by IBX and not FBIntf
164 tony 306
165 tony 307 5. TIBLookupComboEditBox: When generating auto-complete SQL, the ListField is now
166     only enclosed in double quotes in SQL dialect 3 and when it needs to be.
167 tony 306
168 tony 307 6. TIBLookupComboEditBox: when the list source opens, the ListField name is now
169     validated. If no match is found in the list of field names and the database has
170     been opened in SQL Dialect 3, then the ListField Name is converted to upper case
171     if it then matches a field name. Otherwise, a Listfield not valid exception occurs.
172 tony 306
173 tony 307 7. IBGeneratoreditor.pas: Add missing parenthesis around "IS" statement for compliance
174     with fpc 3.2.
175 tony 306
176 tony 307 IBX Change Log version (2.3-3 Build 11512) Fri, 28 Dec 2018 10:04:17 +0000
177 tony 287
178    
179 tony 307 1. New property for TIBDatabase and TIBXServicesConnection. This is "ConfigOverrides"
180     and is used to override the default settings in the client side "firebird.conf" This
181     includes "WireCompression" and "WireCrypt". The value of this property is a "TStrings".
182     Each line of the string list should be a setting in the same format as "firebird.conf".
183     For example "WireCompression = true" in order to request wire compression on the client side.
184 tony 287
185 tony 307 Note: explicit settings in the client side "firebird.conf" appear to take precedence
186     over settings given in TIBDatabase and TIBXServicesConnection. Many client side settings
187     also require a compatible setting in the server side "firebird.conf". For example
188     "WireCompression = true" must also be set in the server's "firebird.conf" for wire
189     compression to be used.
190 tony 291
191 tony 307 Whether or not WireCompression or WireCrypt are in use can be checked using the information
192     returned with the Client/Server protocol version. See ibx/examples/dbadmin and
193     ibx/examples/dbinfo for examples of how to display this information.
194 tony 291
195 tony 307 2. New property for TIBDatabase and TIBXServicesConnection: "WireCompression". This
196     is a "convenience" property. If set the "WireCompression=true" is added to the
197     ConfigOverrides. If unchecked then this setting is removed.
198 tony 291
199 tony 307 3. TIBExtract: 64-bit integer types are now correctly extracted as "BIGINT" and
200     not "INT64".
201 tony 291
202 tony 307 4. New published properties for TIBCSVDataOut, TIBInsertStmtsOut and TIBBlockFormatOut
203     These are:
204     property TimestampFormat: string;
205     property DateFormat: string;
206     property TimeFormat: string;
207 tony 291
208 tony 307 Respectively, these provide the date time format templates for SQL types: TIMESTAMP,
209     DATETIME and TIME. The format strings use the standard FPC date/time format
210     characters (see https://www.freepascal.org/docs-html/rtl/sysutils/formatchars.html).
211 tony 266
212 tony 307 If any of the above properties are set to an empty string, then the locale default
213     is used. This uses the ShortDateFormat and the LongTimeFormat. In timestamp, the
214     locale default is extended by appending '.zzz' to include milliseconds.
215 tony 272
216 tony 307 TIBCSVDataOut by default sets these properties to the empty string, while the other
217     two use: 'yyyy.mm.dd hh:nn:ss.zzz', 'yyyy.mm.dd' and 'hh:nn:ss.zzz' respectively.
218 tony 266
219 tony 307 5. New published property for TIBCSVDataOut:
220     property QuoteStrings: boolean (default true)
221 tony 266
222 tony 307 If false then strings are unquoted, otherwise, the QuoteChar property value is
223     used to delimit each and every string in the output.
224 tony 263
225 tony 307 6. New published properties for TIBCSVDataOut:
226     property FieldSeparator: string;
227     property HeaderSeparator: string;
228 tony 267
229 tony 307 Respectively, these provide the separator character(s) used to separate fields
230     in data and header rows. Both default to ','.
231 tony 270
232 tony 307 7. New published properties for TIBCSVDataOut and TIBBlockFormatOut:
233     TOnFormatTextString = procedure(sender: TObject; var TextString: string) of object;
234     property OnFormatTextString;
235 tony 270
236 tony 307 This event handler can be used to process text strings before they are included
237     in the output e.g. to replace unprintable characters with alternative strings.
238     This only applies to columns with an SQL Type of SQL_VARYING and SQL_TEXT.
239 tony 270
240 tony 307 8. TIBDataSet now raises an exception when ParamByName called with an invalid parameter name.
241     Uses "FindParam" if in order to find out if a parameter with a given name exists
242     and without raising and exception if it does not.
243 tony 270
244 tony 307 9. TIBQuery now uses IBX SQL Parser instead of the TParams SQL parser in order to ensure
245     consistency with SQL queries.
246 tony 270
247 tony 307 10. CaseSensitiveParameterNames property added to TIBSQL, TIBDataSet and TIBQuery.
248     When true, SQL statement parameter names are parsed case sensitive. Note for
249     TIBDataSet only applies to Select query.
250 tony 270
251 tony 307 11. IBEvents: removing a TIBEvent component from a form should no longer result in
252     an IDE exception.
253 tony 270
254 tony 307 12. LocalDBSupport: initial database creation should now work correctly
255     when the schema source is an sql file.
256 tony 270
257 tony 307 13. TIBCMLocalDBSupport: new event handler "property OnProgressEvent: TOnProgressEvent"
258     when defined, this handler will be called by the internal TIBXScript during
259     initial database creation when the schema source is an sql file and may be used
260     to provide a visual indication of progress in console mode.
261 tony 270
262 tony 307 14. TCustomIBLocalDBSupport: new public property "InOnCreateDB: boolean". This is set
263     to true while a new local database is being created and its schema populated.
264     Useful in (e.g.) TIBDatabase.OnAfterConnect handler to suppress actions
265     when the database is disconnected/connected during the create DB procedure.
266 tony 270
267 tony 307 15. TIBXScript: any User/password parameters found in a CREATE DATABASE statement
268     are now always ignored and replaced by the user name and password provided as
269     the login parameters for the TIBDatabase referenced from the TIBXScript. The
270     IgnoreCreateDatabase property still applies and the CREATE DATABASE statement is
271     completely ignored if this property is true.
272 tony 270
273 tony 307 16. Code tidyup in IBTreeView: Node properties initialisation moved from TIBTreeView.AddNodes
274     to TIBTreeView.Added. An OnAddition event handler is no longer needed to initialise
275     ImageIndex and SelectImageIndex values on AddNode.
276 tony 270
277 tony 307 17. TIBDatabase.Attachment and TIBXServicesConnection.ServicesIntf properties are now
278     read/write. This should enabled (e.g.) multiple instances of TIBDatabase to share
279     the same database connection.
280 tony 270
281 tony 307 18. TIBDataSet and TIBQuery now support the TDataSet "Filter" property.
282     if provided, this should be an conditional SQL expression suitable for
283     including in an SQL Select statement "where" clause. If non-empty and the
284     "Filtered" property is true then the SQL expression provided as the value of
285     the "Filter" property is "ANDed" with any existing condition statement
286     in the SQL statement's "Where" clause.
287 tony 270
288 tony 307 If the "Filter" property is set at run time, the "Filtered" property is true
289     and the dataset is already open, then the dataset is closed and re-opened automatically.
290 tony 271
291 tony 307 The "Filter" condition may include IBX style parameters. In which case, their
292     value must be set by the dataset's "OnBeforeOpen" event handler.
293 tony 272
294 tony 307 This is a public property for TIBDataSet and TIBQuery query and intended for
295     use at run time.
296 tony 272
297 tony 307 Note: The property is a published property of TIBTable. The TIBTable functionality
298     is unaffected by this change.
299 tony 272
300 tony 307 IBX Change Log version (2.3-2) Wed, 05 Dec 2018 12:19:23 +0000
301 tony 272
302 tony 307 1. Remove need to check for IsMultiThread by providing access to GUI timers via
303     IBGUIInterface. Note: master/detail delay timer does not apply to console
304     mode apps.
305 tony 272
306 tony 307 2. TIBCustomDataSet: SQLParser ignored if it does not contain a valid select
307     statement. This avoids problems if "Execute Block" is used as the Query.
308 tony 272
309 tony 307 3. IBSQLParser now uses the common SQL tokeniser from fbintf. This replaces the
310     internal SQL tokeniser routines.
311 tony 272
312 tony 307 4. IBSQLParser: new property NotaSelectStmt. Set to true if SQL fails to parse
313     as a select statement, with or without CTEs.
314 tony 272
315 tony 307 5. IBSQLParser: parser now recognises the "ROWS" clause.
316 tony 272
317 tony 307 6. TIBXScript now uses the common SQL tokeniser from fbintf. This replaces the
318     internal SQL tokeniser routines.
319 tony 272
320 tony 307 7. Fix error in TIBXScript processing of "set" statements. This avoids exceptions
321     being raised for valid set statements processed by a data formatter.
322 tony 272
323 tony 307 8. New published property for TIBDatabase and TIBXServicesConnection. This is
324     FirebirdLibraryPathName: string. If not empty it is used to explicitly specify
325     the path of the Firebird Library used by the database/services connection.
326 tony 267
327 tony 307 9. New read only public property for TIBDatabase and TIBXServicesConnection. This
328     is FirebirdAPI and returns the IFirebirdAPI interface used by the database/
329     services connection.
330 tony 263
331 tony 307 10.SQL Property editors now quote parameter names if "Quote identifier" is selected
332     or param name is not a valid SQL identifier.
333 tony 263
334 tony 307 11. IBLookupComboEditBox: In Lazarus 2.0, TDBLookupComboBox takes a more restrictive
335     view of whether the text box should be editable when no DataSource is specified.
336     TIBLookupComboEditBox has been updated to workaround this problem. As long as
337     ReadOnly is false, the text box is editable when no DataSource is specified.
338 tony 263
339 tony 307 12. AllowUseOfFBLIB is now set to "true" at design time. This is to allow use of
340     the FBLIB environment variable. If you do not want to permit this then you
341     must modify the Register procedure in the design/IBDBReg.pas unit to remove
342     this setting.
343 tony 263
344 tony 307 IBX Change Log version (2.3-1) Thu, 25 Oct 2018 14:39:45 +0100
345 tony 263
346 tony 307 1. IBCustomDataset: replace deprecated function ValidUTF8String with call to
347     Utf8EscapeControlChars
348 tony 263
349 tony 307 IBX Change Log version (2.3-0) Mon, 16 Apr 2018 09:48:06 +0100
350 tony 263
351 tony 307 IMPORTANT: the source code tree has been re-organised for IBX 2.3. Please remove
352     all previous copies of the IBX source code tree before installing this release.
353 tony 263
354 tony 307 The IBX packages used by most users have not changed, with one exception. The
355     IBServices unit has been moved to the package iblegacyServices.lpk. To continue
356     to use the IBServices unit in your applications, please add the iblegacyServices
357     to the list of dependencies. To do this, open the Project Inspector and select
358     Add->New Requirement and select "ibLegacyServices" from the list of available
359     packages.
360 tony 263
361 tony 307 1. New unit IBXServices. The IBXServices unit is a re-architectured update of
362     the IBServices unit providing what is intended to be a clearer and easier to
363     use set of IB Services components. See Chapter 10 of the IBX User Guide for
364     more information and the guide to "Firebird Service Management Using IBX".
365     As indicated above, the legacy services components are still available and
366     provided in a separate package. There is no need to update working applications
367     using the older versions except for an additional package dependency.
368 tony 263
369 tony 307 2. The IBX packages and source code tree have been re-organised in an attempt to
370     finally get rid of the "duplicate ppu" warnings. This re-organisation should
371     not affect existing users. Section 2.3 of the IBX User Guide describes the
372     new set of IBX packages.
373 tony 263
374 tony 307 3. The ibx/examples/DBAdmin and the ibx/examples/services example have been
375     updated to use the new Services API components.
376 tony 263
377 tony 307 4. The iblocal package has been updated to use the new Services API components.
378 tony 241
379 tony 307 5. procedure SetAutoAdmin; in the new IBX Services this method is now a member of
380     TIBXSecurityService. It had been wrongly classified in the previous version
381     as a per database configuration item. It is global to a server and hence
382     correctly positioned as part of the Security Package. In the DBAdmin example,
383     the setting has moved to the mappings page.
384 tony 241
385 tony 307 6. TIBXScript: IgnoreCreateDatabase added. If true then CREATE DATABASE statements
386     are ignored.
387 tony 101
388 tony 307 7. TIBDatabase: DropDatabase now ensures that all transactions have been properly
389     closed before the database is dropped. Before and After Disconnect event handlers
390     are also fired.
391 tony 209
392 tony 307 8. TIBTransaction: OnStartTransaction event now fires every time the transaction
393     is started and not just the first time.
394 tony 209
395 tony 307 9. IBDataOutput: Use FormatFloat for all performance statistics to avoid platform
396     depenendency with comp type.
397 tony 209
398 tony 307 10. IBDataOutput: select query data output is now sent to stdout instead of stderr.
399 tony 209
400 tony 307 11. TIBDatabase: Remove regression. If a user login dialog changes the DatabaseName
401     then this is recognised and not ignored.
402 tony 209
403 tony 307 12. TIBDataSet, TIBQuery, TIBTable: additions:
404     function GetRowsAffected(var SelectCount, InsertCount, UpdateCount, DeleteCount: integer): boolean;
405     function GetPerfStatistics(var stats: TPerfCounters): boolean;
406     property EnableStatistics: boolean read FEnableStatistics write SetEnableStatistics;
407 tony 209
408 tony 307 GetRowsAffected returns the affected row counts from the last insert/update/delete
409     if EnableStatistics = true then GetPerfStatistics returns the current stats
410     counters for the select query. Note: stats accumulate after each fetch from
411     the database. To get total query cost after open, call the "Last" method
412     and then GetPerfStatistics.
413 tony 209
414 tony 307 See ibx/examples/consolemode for an example of the use of GetPerfStatistics
415 tony 209
416 tony 307 13. TIBExtract: Identity columns DDL. "Start with clause" now correctly encapsulated
417     in parenthesises.
418 tony 209
419 tony 307 14. TIBExtract: new published property "AlwaysQuoteIdentifiers". If true then in dialect 3
420     SQL identifiers are always delimited by double quotes. If false, then they are
421     only delimited if the identifier is a reserved word, contains lower case or special
422     characters. Set this property to true to retain previous behaviour.
423 tony 209
424 tony 307 15. Insert SQL Property Editor. In Insert Returning Clause, Identity column names
425     are now inserted in double quotes if not Reserved Words or valid SQL Identifiers.
426 tony 209
427 tony 307 16. TIBDataSet, TIBQuery, TIBTable: addition:
428     property MasterDetailDelay: integer {defaults to zero}
429 tony 209
430 tony 307 When non-zero and the dataset is a detail table referencing a master table
431     through either a MasterSource (TIBTable) or a DataSource (TIBDataSet, TIBQuery)
432     then a synchronisation delay is added (in milliseconds) between the master
433     row changing and the detail dataset being re-opened. If the master dataset
434     is scrolled before the delay expires then the delay is reset. This can be used
435     to avoid performance overheads when scrolling through a large master dataset.
436 tony 209
437 tony 307 Note: uses fptimer and hence requires a thread manager. Under Linux the
438     chreads unit must be included in your project. TTimer is not used in order
439     to avoid an LCL dependency. Requires FPC 3.0.2 or later.
440 tony 209
441 tony 307 17. TIBExtract: User role grants now excluded when etGrantsToUser not specified
442     with Extract Option eoDatabase.
443 tony 209
444 tony 307 18. TIBLookupComboEditBox: Workaround added for https://bugs.freepascal.org/view.php?id=33428
445     When a deLayoutChanged event is reported on the ListSource dataset, the
446     combobox text is updated. This allows a listsource (detail) to be in a Master/Detail
447     relationship with the control's datasource (master).
448 tony 209
449 tony 307 19. TIBExtract: Full BigInt value range now supported for Generators/Sequences.
450 tony 209
451 tony 307 20. TIBExtract: Select Procedures (Procedure type 1) now include "SUSPEND;" clause in their
452     stubs. Pedantic fix really, as procedures output in dependency order anyway.
453 tony 209
454 tony 307 21. TIBExtract: Package Headers and Package Bodies are now included in the extracted
455     DDL (Firebird 3 and later only).
456 tony 209
457 tony 307 22. TIBLookupComboBox Autocomplete Fixes:
458     i. Only appended text is now selected after autocomplete.
459     ii. Uppercase keys no longer ignored for autocomplete.
460     iii. Retain Prefix case is now honoured correctly.
461     iv. When a DataSource is assigned, typing after autocomplete now extends prefix
462     before autocomplete performed. i.e. behaviour now the same as when
463     no DataSource assigned.
464 tony 209
465 tony 307 23. TIBXScript: Single Line Comments starting with '--' are now ignored when occurring
466     between SQL statements.
467 tony 209
468 tony 307 24. TIBExtract: New published property CaseSensitiveObjectNames. If false (default) then
469     ObjectNames are converted to upper case before matching against metadata object
470     names, unless the objectname is delimited by double quotes, in which case, the
471     double quotes are removed and the remaining string is used (unmodified) to match
472     against the metadata object name.
473 tony 209
474 tony 307 If true then the ObjectName is used as is without modification and matched
475     against the metadata object name. No attempt is made to remove double quotes.
476 tony 209
477 tony 307 25. TIBExtract: New Extract Types: etDatabaseTriggers and etDDLTriggers. When used
478     with eoTrigger, these extract types can be used to select only Database Triggers,
479     or DDL Triggers or both. Ignored when etTable or etTrigger included in Extract Types.
480 tony 209
481 tony 307 26. TIBXScript: If an exception occurs during the processing of a statement, the
482     statement separate character is now reset to the default (';').
483 tony 221
484 tony 307 27. TIBDatabase: Reconnect method added and used by TIBXScript for reconnect.
485 tony 221
486 tony 307 28. TIBXScript: Transaction is no longer automatically reactivated immediately processing
487     a commit or reconnect statement and instead activated only when next SQL statement
488     is executed.
489 tony 221
490 tony 307 29. TIBSQL.HasField should no longer generate and exception when the field does not exist.
491 tony 225
492 tony 307 30. TIBXScript: case insensitive regex now used when matching statements instead of
493     converting statement to upper case.
494 tony 225
495 tony 307 31. TIBExtract: metadata comments now supported. New published property
496     IncludeMetaDataComments (default true). If true then metadata comments included
497     in extracted DDL. New Extract Object member eoComments. This may be used with
498     ExtractObject method to list all metadata comments.
499 tony 225
500 tony 307 32. TIBExtract: ListObjectNames method added.
501 tony 225
502 tony 307 33. Updated Database component editor to support additional connection string
503     types.
504 tony 226
505 tony 307 IBX Change Log version (2.2-0) Wed, 28 Feb 2018 10:57:45 +0000
506 tony 227
507 tony 307 NOTE: THE LOCATIONS OF SOME OF THE UNIT DIRECTORIES HAS CHANGED FROM IBX 2.1. THIS IS TO
508     AVOID DUPLICATE PPU WARNINGS. PLEASE REMOVE EARLIER VERSIONS OF IBX BEFORE INSTALLING THIS
509     RELEASE.
510 tony 229
511 tony 307 NOTE: THE DBADMIN DEMO REQUIRES THAT THE MemDSLaz PACKAGE IS INSTALLED IN THE LAZARUS IDE.
512 tony 229
513 tony 307 1. IBExtract: Identity columns - add additional check for null column for generator name.
514 tony 229
515 tony 307 2. IBCustomDataSet: Insert and Modify (Update) queries now recognise and process SQL RETURNING clauses.
516     The main use for this is for Firebird 3 Identity columns (see IBXDocumentation 6.6.8 for further
517     information). However, this is also a very useful mechanism for returning updated computed by
518     column values. Values returned as a result of executing an Insert or Update statement
519     replace existing values in the current row for each corresponding column.
520 tony 229
521 tony 307 Previously, if a dataset's select query included read only (computed by) fields then
522     an automatic row refresh was performed after an insert or update query had been processed,
523     irrespective of the setting of the "ForcedUpdates" property. This has changed such
524     that an automatic refresh is no longer performed if an insert or update query contains
525     a returning clause that updates one or more fields on the current row. A full row
526     refresh is only performed if (a) ForcedRefresh is true or (b) the query does not return any
527     field values and the select query contains read only fields. Use of Insert/update
528     returning should be significantly more efficient than executing a refresh query.
529 tony 229
530 tony 307 This behaviour change is intended to be backwards compatible and there should be no need to change
531     existing programs, other than to improve performance by using the new capability.
532 tony 229
533 tony 307 3. IBCustomDataSet: DELETE...RETURNING queries are now also recognised. However, as
534     they are called when the dataset row is being deleted, there is no value in
535     updating the current record from the query result. Instead, a new event handler
536     "OnDeleteReturning" is provided. If a DELETE...RETURNING query is execute and
537     an OnDeleteReturning event handler is provided then it is called with the IResults returned
538     by the query. The event handler can then interrogate the query results and
539     perform whatever action is necessary. For example to confirm, to the user,
540     the deletion of a row with the returned values.
541 tony 231
542 tony 307 4. TIBTable: generated Insert and Update SQL now include a RETURNING clause for
543     any Computed By or Identity Columns. The IBTables example has been updated to
544     illustrate the computation of the employee Full Name on update.
545 tony 209
546 tony 307 5. TIBTable: The GeneratorField property is now published.
547 tony 151
548 tony 307 6. The InsertSQL property editor now shows Firebird 3 Identity columns separate from the Field List.
549     When InsertSQL is generated, the Identity columns are not included in the list of values to
550     be inserted. A RETURNING clause is added to the insert statement to return the value of
551     each Identity column after the insert is executed.
552 tony 151
553 tony 307 7. The Modify Property Editor now generates Update SQL with Computed By fields in Update..Returning clause.
554     Similarly Insert Property Editor now generates Insert SQL with Computed By fields in
555     Insert..Returning clause.
556 tony 101
557 tony 307 8. TIBGenerator: small performance improvement by not preparing query each time
558     a new value is generated.
559 tony 101
560 tony 307 9. TIBSQL: Free resources when transaction changed - ensures new transaction is used.
561    
562     10. Property editors will now sync table name to a System Table when "Include System
563     Tables" is selected and the query is for a System Table.
564    
565     11. Minor Performance improvement to handling of Date/Time types in IBX datasets. Field
566     values are no longer converted to milliseconds from TDateTime and then back again
567     to TDateTime (the conversion to milliseconds is the default TDataset approach).
568    
569     12. Property Editors handling of Stored Procedures.
570     * Select and Refresh: only show a list of stored procedures that return multiple rows (proc type 1) and
571     which have a non-empty list of output parameters (i.e. stored procedures that may be used in a select
572     query).
573     * Modify and Insert: only show a list of stored procedures that return at most a singleton row (proc type 2).
574    
575     13. IBStoredProc: Now supports Firebird 3 Package Names. A new published property PackageName
576     can be used to select a package. If non-empty, the stored procedure name is
577     expected to be a stored procedure defined in the specified package and the
578     generated SQL will be as required for a stored procedure located in a package.
579    
580     14. Select, Refresh, Insert, Modify, Delete and TIBSQL SQL Property Editors now include
581     a "Package Name" drop down box to allow selection of a Firebird 3 Package from
582     which a stored procedure can be selected. With no package name selected, non-package
583     stored procedures are listed.
584    
585     15. TIBXScript: turn off database login prompt when reconnecting - this avoids prompting
586     for password on reconnect.
587    
588     16. TIBDatabase: use IAttachment for connection default character set id, code page
589     and character set name.
590    
591     17. TIBDatabaseInfo: cache ODS Version information on first request in order to minimise
592     DB info lookups"
593    
594     18. IBExtract: now supports DDL Triggers and Grants to DDL objects.
595    
596     19. Add a property Editor for TIBUpdate.RefreshSQL.
597    
598     20. IBUpdate: Ignore non-data (e.g. calculated) fields when assembling list of input
599     parameters. This stops an exception being raised when the field cannot be
600     located in the record buffer.
601    
602     21. Property Editors now automatically include System Tables when opened and when the query table
603     is a System Table.
604    
605     22. IBServices: SQRB and SRB buffers are now reset when service query throws an exception.
606     This avoids errors due to a stale SQRB or SRB being used for the next query.
607    
608     23. IBServices: Service attach parameters now include "expected_db". This is used to
609     add the SPB item isc_spb_expected_db. This names a database using
610     an alternative Security Database (FB3 onwards) and allows (e.g. backup/restore) using such a
611     database. examples/services re-written to illustrate use of "expected_db".
612    
613     24. IBServices: TIBControlAndQueryService.WriteNextChunk no longer ignores isc_info_svc_timeout.
614     This avoids truncated backups when the server returns a timeout (busy) response.
615    
616     25. TIBDatabase: isc_dpb_page_size now supported as a database parameter when using TIBDatabase.CreateDatabase.
617    
618     26. TIBDatabase: DatabaseName property may now be prefixed by $TEMP$ or $DATADIR$ for local
619     databasenames. These are respectively expanded to the local system's temp directory
620     (including trailing delimiter) or to a prescribed data directory (including
621     trailing delimiter). Under Unix systems the data directory is a hidden directory
622     in the user's home directory. The hidden directory name is either the string returned
623     from the SysUtils "Vendor Name" or "IBX" if empty. In either case prefixed by a '.'.
624     Under Windows, the directory is the same as the Data Directory as decribed
625     above but instead prefixed by the User's application data path. These may be
626     used to improve application portability for Personal Databases.
627    
628     27. TIBTable: FieldDefs property is no longer published. Due to the use of TIBFieldDef
629     this has not worked for a long time and is not useful either. FieldDefs should be
630     managed using the Fields Editor as with any other dataset. To access the fields
631     editor for a TIBTable component, double click on the component. The fields editor
632     is then displayed.
633    
634     28. TIBDatabaseInfo: new properties/function
635     * DateDBCreated (returns date/time database created)
636     * TransactionCount (returns no. of active transactions)
637     * GetDatabasePage(PageNo: integer) (returns contents of specified database page - SYSDBA only).
638     * PagesFree (Firebird 3 or later)
639     * PagesUsed (Firebird 3 or later)
640     * Encrypted (returns true if database encrypted. (Firebird 3.0.3 or later only)
641     * EncryptionKeyName (returns the name of the encryption key if any (Firebird 3.0.3 or later only)
642    
643     29. IBServices classes now provided the decoded release number in the (array) property ServerVersionNo.
644    
645     30. TIBSecurityService now supports display/modification of the User Admin Role (Firebird 2.5 and later).
646    
647     31. TIBConfigService now has a procedure SetAutoAdmin(Value: boolean) to enable/disable
648     the automtic mapping of privileged OS users to the RDB$ADMIN role (Firebird 2.5 and later).
649    
650     32. TIBBackupService: New Option - NoDBTriggers equivalent to -nodbtriggers switch introduced
651     in the gbak utility at V.2.1 to prevent database-level and transaction-level triggers from
652     firing during backup and restore.
653    
654     33. Both TIBBackupService and TIBRestoreService now support backup/restore statistics options
655     for verbose output using the new property "StatisticsRequested".
656     see https://firebirdsql.org/file/documentation/release_notes/html/en/2_5/rnfb25-util-gbak.html#rnfb25-util-gbakstats
657    
658     34. TIBRestoreService: now supports new options RestoreMetaDataOnly (Firebird 2.5 and later).
659    
660     35. TIBOnlineValidationService component added to the IBServices and the "Firebird Admin"
661     palette. This uses the online validation feature added in Firebird 2.5. The
662     services's properties enable inclusion/exclusion of tables and indexes using
663     regular expressions. See.
664     https://firebirdsql.org/file/documentation/release_notes/html/en/2_5/rnfb25-apiods-api.html#rnfb25-apiods-api-onlinevalidation
665    
666     36. IBServices: procedure TIBConfigService.SetNoLinger added to set no linger
667     option on a database.
668    
669     37. TIBCustomService: Assign method implemented to allow copying of service login
670     context between service API components. "Detach" method now only detaches
671     service when last reference to the service interface detaches. Tidy up of
672     code for SetActive and Attach methods including password hiding.
673    
674     38. TIBDatabase: new properties: AuthenticationMethod and RemoteProtocol. Read only
675     and used to determine the auth method and protocol used for the connection.
676    
677     39. TIBDatabase: ensure that SQLDialect setting is used when creating a database using
678     a Create Database Statement generated by IBX.
679    
680     40. All IBServices now have an additional published property "PortNo". This may
681     be set to a non-standard port number when necessary. If zero then the default
682     port number is used.
683    
684     41: TIBLookupComboeditBox: Ensure dataset updated when change selected with the keyboard
685     and not just the mouse.
686    
687     42. TIBCustomDataset: reopen query if already active when a TIBControlLink is added.
688    
689     43. TIBTreeview: new ImageIndexField and SelectedIndexField Property allows the
690     image index and selected image index for each node to be set from a database field.
691    
692     44. TIBExtract: new extract type (etGrantsToUser) for use with eoDatabase. If included
693     then database schema includes grants to all users. If not present then the
694     only user grants included are those to User PUBLIC.
695    
696     45. TIBTreeView: performance improvement. When expanding include both expanded node
697     and child nodes in dataset.
698    
699    
700     IBX Change Log version (2.1-0) Fri, 15 Dec 2017 12:20:11 +0000
701    
702     1. IBCustomDataset: Minor change of PChar to PByte for compatibility with fbintf
703     changes.
704    
705     2. IBCustomDataset: Fixed use of incorrect datasize in TIBStringField.SetAsString.
706     Bug could result in truncated multi-byte character set values.
707    
708     3. Changes consequential on moving fbintf character set utility functions from
709     IFirebirdAPI to IAttachment.
710    
711     4. Avoid "Object is nil" error when opening a database with DefaultSystemCodePage = true
712    
713     5. IBLookupComboEditBox: avoid race condition when autocompleting text that occasionally
714     results in autocomplete ignoring prefix text.
715    
716     6. IBLookupComboEditBox: Ensure that cursor is not reset to start of text when
717     entering a new name into the text box.
718    
719     7. IBCustomDataset: ensure that TIBStringField uses the field size reported by
720     Firebird rather than recomputing it.
721    
722     8. Property Editor positioning tidy up: All IBX Property editors should now be
723     screen centre. Previously some were "poDesigned" which may be inappropriate
724     for multi monitor desktops.
725    
726     10. TIBTreeView.FindNode: protect against error if zero length path or empty tree node.
727    
728     11. TIBTransaction: On Force Disconnect do not raise an exception when problem ending
729     a transaction and always reset the object.
730    
731     12. TIBQuery tidyup: remove unnecessary call to GetAffectedRows.
732    
733     13. TIBXScript: Allow for override of database filename in Create Database statements.
734    
735     14. IBLocaldb: Support initialisation of the database from an SQL script in addition
736     to a gbak format archive.
737    
738     15. IBLocaldb: fix problem that stopped the OnSharedDataDir event from being recognised.
739    
740     16. IBLocaldb: Drop database if error creating an empty database.
741    
742     17. TIBTreeView: improve performance when selecting node - avoid refreshing dataset
743     unless selected node not in current dataset.
744    
745     18. IBServices: SetDBParams method moved from TCustomIBLocalDBSupport (in IBLocalDB package)
746     to TIBCustomService, and IBlocalDB code tidy up.
747    
748     19. IBTreeView: Initialise TIBTreeNode KeyValue to null to avoid unpredictable
749     behaviour due to uninitialised variable.
750    
751     20. IBServices: Correct encoding of isc_spb_prp_write_mode in TIBConfigService from
752     integer to byte. Ditto isc_spb_prp_reserve_space and isc_spb_prp_access_mode.
753    
754     21. IBSQL: When Database changed ensure that all resources are freed.
755    
756     22. IBCustomDataset: When database changed ensure that queries an unprepared.
757    
758     23. SQL Property Editors now use SynEdit with SQL Highlighter. New features include:
759     * Line Wrap on SQL Token boundaries (on user command)
760     * auto-complete table names in drop down list of table names
761     * Double click on tablename or field name adds to SQL text
762    
763     24. IBDataOutput: print statistics using float (%f) format instead of decimal (%d).
764    
765     25. IBTreeView: Call to FindNode: param type change from "array of Variant" to
766     TVariantArray. Seems to avoid memory corruption in Windows (probably a
767     workaround for a problem in fpc 3.0.4 win64).
768    
769     26. IBDatabaseInfo: Code tidy up. Add check for database not assigned or not open.
770    
771     27. IBDatabaseInfo: Remove memory leak when accessing database operation counts.
772    
773     IBX Change Log version (2.0-2) Fri, 24 Feb 2017 12:17:53 +0000
774    
775     1. TIBDatabase.CreateDatabase: extract full DB Name from SQL using reg ex in order to
776     include remote system name.
777    
778     2. TIBExtract: No longer include comment header and COMMIT statement for empty
779     tables when data included in output.
780    
781     3. Profiling: IBSQL now has conditional compilation flags to enable query performance
782     and timing information to be written to stdout. This may be used to locate
783     performance bottlenecks.
784    
785     4. SQLParser: only call "OnChanging" event handler when value is different.
786    
787     5. IBDynamicGrid: Update handling of navigation keys for a TDateEdit
788    
789     6. IBCustomDataset: Set internalunprepared flag when transaction ends. This ensures
790     that BindFields is called when the query is next activated. Avoids FieldName
791     not found error.
792    
793     7. IBUpdate: This is a new IBX component similar to TIBUpdateSQL. It is more general
794     purpose and allows the programmer to define any action they want for Update, Insert
795     or Delete. This may be complex SQL (similar to a Trigger), application specific
796     filtering of updates, or use of statements such as Grant or Revoke instead of
797     normal DML. See User Manual for more information.
798    
799     IBX Change Log version (2.0-1) Mon, 09 Jan 2017 15:31:49 +0000
800    
801     1. TIBEvents: Fix uninitialised variable that could result in lost events.
802    
803     2. TIBExtract: Added support for FB3 "USAGE" privilege.
804    
805     3. TIBExtract: data formatted as Charset set "octets" is now output using
806     hexadecimal notation.
807    
808     4. TIBExtract: Binary Blobs and array data can now be embedded in INSERT statements
809     using a simple XML format.
810    
811     5. TIBExtract: extract of individual Triggers and Stored Procedures can now include
812     grants to these objects.
813    
814     6. TIBExtract: Stored Procedures and Views output in dependency order to avoid
815     dependency problems restoring complex databases.
816    
817     7. TIBXScript: This component has been restructured to allow for the processing of
818     embedded XML in INSERT statements and to support interactive sources in addition
819     to non-interactive data sources such as files.
820    
821     8. TIBXScript: CREATE DATABASE, DROP DATABASE, CONNECT statements are now supported.
822    
823     9. TIBXScript: ISQL compatiable Set statements are now supported:
824     SET SQL DIALECT
825     SET TERM
826     SET AUTODDL
827     SET BAIL
828     SET ECHO
829     SET COUNT
830     SET STATS
831     SET NAMES <character set>
832    
833     10. IBVersion unit added to hold current IBX Version Number information.
834    
835     11. TIBExtract: Use character rather than byte length for VarChar procedure arguments.,
836     and domain definitions.
837    
838     12. TIBExtract: Triggers now use SQL2003 syntax and database and transaction triggers
839     fully supported.
840    
841     13. TIBExtract: when a database dump includes data, the generator values are now also set.
842    
843     14: IBSQLEdit: Unit LCLPlatformDef added to uses clauses for lazarus 1.7 and later.
844    
845     IBX Change Log version (2.0-0) Tue, 06 Dec 2016 10:33:44 +0000
846    
847     See also doc/IBX4LazarusGuide.pdf for important information on
848     upgrading to IBX2.
849    
850     1. Size property of TIBStringField is now the width in characters of the field
851     and not the byte length. This applies only to multi-byte character sets such
852     as UTF8. The original approach aligned with TStringField. However, the TStringField
853     code is not recognised as a bug and hence this change to align the behaviour.
854     The TStringField change is expected in fpc 3.2.0.
855    
856     2. A new property AutoFieldSize: boolean has been added to TIBStringField. When
857     true (default) then Size property value saved in the lfm is ignored. Size is
858     always set from the dynamic information read from the database. It is unclear
859     why anyone would want to override this and set Size to false.
860    
861     3. ibxscript: should now handle correctly a Case..End statement within a procedure
862     block.
863    
864     4. IBDatabase: new property - CreateIfNotExists. If true and database does not
865     exist when an attempt is made to connect to it (run time only) then an attempt
866     is made to create the database.
867    
868     5. IBDatabase: new event - OnCreateDatabase. This event is called after a database
869     has been successfully created as a result of a call to CreateDatabase or when
870     creating a database after it was found not to exist.
871    
872     6. DBControlGrid: a race condition could result in the wrong row image being
873     written to the cache. This has been avoided by a trip round the message
874     loop before rendering the row image.
875    
876     7. DBControlGrid: It is strongly recommended not to open the source DataSet for
877     a DBControlGrid during a Form's "OnShow" event handler. Under GTK2 this is
878     known to risk corrupt rendering of row images when the control is first
879     displayed. If necessary use "Application.QueueAsyncCall" to delay opening
880     of the dataset (see DBControlGrid examples) until the Form's Window has been created.
881    
882     8. DBControlGrid & IBDynamicGrid: Navigation keys should now work correctly with
883     a TDateEdit control located on an editor panel.
884    
885     9. TIBExtract: brought up-to-date plus many bug fixes.
886    
887     10. DBControlGrid: Removed memory leak when updating rows.
888    
889     11. TIBCMLocalDBSupport: fixed invalid free on upgrade.
890    
891     IBX Change Log version (1.4-3) Thu, 22 Sep 2016 18:10:15 +0100
892    
893     1. IBCustomDataset: When calling SetCodePage, no longer request transliteration
894     when target codepage is CP_NONE. This is a workaround for
895     http://bugs.freepascal.org/view.php?id=30622.
896    
897     2. DBLog option removed from TIBStatisticalService - not supported by server
898     since Firebird 1.5.
899    
900     3. ibxscript: An error is no longer generated for "on commit preserve rows" or
901     similar.
902    
903     4. IBCodePage: updated mapping between codepages and character id.
904    
905     5. ftWideString and ftWideMemo withdrawn. There is no UTF16 character set in
906     Firebird. Character sets with a char width of two are not UTF16.
907    
908     6. Strings received from the database are now always transliterated into UTF8
909     regardless of the database character set or connection character set. This
910     is for compatibility with the LCL.
911    
912     IBX Change Log version (1.4-2) Thu, 22 Sep 2016 15:25:27 +0100
913    
914     1. IBBlob: Defer reading of blob until read method called. This avoids having to
915     read in an entire blob just to get the size of the blob. General performance
916     improvement when opening datasets containing blobs.
917    
918     2. Clearing a Blob now sets the corresponding field's modified flag.
919    
920     3. IBLookupCombo: When not performing auto-complete, original query sort order
921     is now used.
922    
923     4. IBDynamicGrid: Add OnSelectEditor event. Allows editor panel to be dynamically
924     determined.
925    
926     5. IBDynamicGrid: Recompute column widths after dataset closed and re-opened.
927    
928     6. IBLookupCombo: LazUTF8 added to uses clause to avoid compilation problems post
929     lazarus 1.6.0
930    
931     7. IBControls. Removed "runtime" from list of paths to avoid "multiple packages"
932     compilation error.
933    
934     IBX Change Log version (1.4-1) Tue, 17 May 2016 09:14:51 +0100
935    
936     1. No character set specified for connection: when a text blob is retrieved, the
937     character set is determined by looking up the native character set using then
938     Firebird API. Otherwise a text mode blob is assumed to have the same character
939     set as the connection.
940    
941     2. TIBGUIInterface: this is an internal interface. Minor type changes to allow
942     for Login Dialog returing a change to the database path.
943    
944     3. Design Time Database and Server login Dialogs now allow the Database Name/Server Name
945     to be changed from that given in the TIBDatabase/TIBServer component and for the
946     entered value to be saved on a project specific basis (design time only).
947    
948     4. IBDynamicGrid: TDBLookupCellEditor now compares its DataFieldName with the
949     column fieldname. If they are the same then it is acts as a look up for the KeyValue
950     Otherwise, it sets the column text to the selected ListField Value.
951    
952     5. IBDynamicGrid: Only visible columns are now taken into account When recalculating
953     column width.
954    
955     6. IBLookupComboEditBox: Fix error with autocomplete query when a RelationName is given
956     and a case insensitive search is requested.
957    
958     7. IBDynamicGrid: No longer ignores notifications removing Column Totals controls
959     or column ListSource.
960    
961     8. IBQuery: no longer performs unnecessary refresh of SQL Text (and hence avoids an
962     unprepare) when closing and the text has not changed.
963    
964     9. IBSQL: Base the cursor name on a GUID instead of a hexstr version of the class pointer.
965     Less likely to cause a cursor re-use error on Windows.
966    
967     10.SV5IPC: include workaround for OSX. FPC 3.0.0 has broken ipc module for darwin.
968     Expected to be fixed in 3.0.2. Hence workaround only applies to 3.0.0.
969    
970     11. TIBTreeView: Guard against nil destination on record changed
971    
972     12. AnsiString Code page support: TIBStringField.AsString and TIBMemoField.AsString now return a
973     string type with the code page set to reflect the returned field encoding after
974     Firebird driver transliteration, if any. FPC 3.0.0 onwards only. Behaviour unchanged for
975     earlier versions.
976    
977     13. AnsiString Code page support: Assigning to TIBStringField.AsString and TIBMemoField.AsString
978     will now result in transliteration to the code page specified for the Firebird driver
979     if the assigned string has a different code page. FPC 3.0.0 onwards only.
980    
981     14. TIBDatabase: new property UseDefaultSystemCodePage. When set any lc_ctype parameter
982     is ignored and the lc_ctype value, when the database is opened, is set to align with
983     the DefaultSystemCodePage (FPC 3.0.0 onwards). Normally, this is what you want and should ensure
984     platform independence. Note: this applies to FPC 3.0.0 and earlier versions. Pre FPC
985     3.0.0, when this property is true, the lc_ctype is UTF8 except under windows when
986     the GETACP is used to determine the Windows code page.
987    
988     15. TIBDatabase: new property DefaultCharSetName. This is the Firebird character set
989     name used as the lc_ctype when the database was opened. Only valid while the
990     Database is connected.
991    
992     16. TIBDatabase: new property DefaultCodePage (FPC >=3.0.0 only). This is the codepage
993     id that corresponds to the DefaultCharSetName.
994    
995     IBX Change Log version (1.4-0) Mon, 15 Feb 2016 14:44:24 +0000
996    
997     1. Unix: If Firebird Embedded Server shared object is loaded and a local database
998     path is given and database attach fails due to access permission issues on the
999     temp directory or security database, then the attach is retried with "localhost:"
1000     prefixing the databasename. This should avoid problems when the database has to
1001     be accessed by a local (e.g. classic) server and libfbembed is used.
1002    
1003     2. Windows: revised search order for Firebird DLL:
1004     i. The Firebird Embedded Server in the application Directory.
1005     ii. If the FIREBIRD environment variable is set then the directory this
1006     points to is searched for the FB Client DLL and then then underlying
1007     "bin" directory.
1008     iii. Registry Key HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances
1009     is used to locate the Firebird installation directory and the underlying
1010     "bin" directory is searched for the FB Client DLL.
1011     iv. The Default installation directories C:\Program Files\Firebird\Firebird_2_x
1012     are searched for the FB Client DLL.
1013     v. The PATH Environment variable is used to search for the FB Client DLL.
1014     vi. Finally the PATH Environment variable is used to search for IBASE.DLL.
1015    
1016     3. New Component: TIBXScript. This is an ISQL compatible SQL script execution engine.
1017     See doc/readme.scriptengine and example applications.
1018    
1019     4. New Component: TIBlocalDBSupport. This is a TIBDatabase support component intended to
1020     simplify the use of the embedded firebird server on both Linux and Windows platforms.
1021     See dpc/readme.localdatabase and example applications.
1022    
1023     5. IBDynamicGrid: Reordering on column header click should now also work for
1024     dynamic columns.
1025    
1026     6. ISQLMonitor: (Windows only). Mutex added to TMultilockGate to avoid race condition
1027     between incrementing/decrementing the lock count and signalling the event.
1028    
1029     IBX Change Log version (1.3-2) Tue, 26 Jan 2016 14:39:54 +0000
1030    
1031     1.3.2 was never formally released and only made available as beta copies.
1032    
1033     1. DBControlGrid,IBDynamicGrid: Ignore down arrow and up arrow in TCustomMemo
1034    
1035     2. IBDynamicGrid: Now deals correctly with a single column grid which has no indicator and autosize column
1036    
1037     3. IBLookupComboEditBox: reset timer on each key press - avoids timer going off too early
1038    
1039     4. IBDynamicGrid: Call event OnUpdateSortOrder even when aliasname not found in dataset
1040     i.e. when it is a calculated field
1041    
1042     5. IBDynamicGrid: Fix problem selecting a different row when expanded row at end of grid.
1043     This problem was due to a race condition between recalculating row heights and
1044     determining which row was selected by the mouse click. The row height calculation
1045     is now deferred by an extra trip round the message loop allowing the row to
1046     be always calculated on the current grid layout rather than risking it being
1047     calculated on the grid layout after the expanded row has been shrunk.
1048    
1049     6. IBLookupComboEditBox: avoid race condition between cm_killfocus and cm_exit on
1050     Windows.
1051    
1052     7. TIBStringField: Now has two new public properties: CharacterSetName: string and CharacterSetSize: integer;
1053     These properties allow the (Firebird) character set name for the field and the max number of bytes per character
1054     to be determined at runtime. See doc/readme.charactersets.html.
1055    
1056     8. TIBWideStringField: This is a new field type with the same additional public properties as above and subclassed from
1057     TWideStringField. This field type is used with the character size reported by Firebird is two. See doc/readme.charactersets.html.
1058    
1059     9. TIBMemoField and TIBWideMemoField: new field types with the same additional public properties as above and subclassed from
1060     TMemoField and TWideMemoField respectively. These field types are used with Blob subtype 1 and a characterset size of
1061     1, 3 or 4 (TIBMemoField) or 2 (TIBWideMemoField). See doc/readme.charactersets.html.
1062    
1063     Both also have a new published property "DisplayTextAsClassName". If false (default) the displaytext is generated
1064     from the blob text by truncating the string to the displaywidth (in characters not bytes). A displaywidth of zero
1065     implies no truncation.
1066    
1067     10. IBLookupComboEditBox: Force autocomplete when EditingDone called and timer active.
1068    
1069     11. IBDynamicGrid: Call DataSet.Append when entering edit mode and dataset empty and not in insert state
1070     (avoids "Not in Edit Mode" error).
1071    
1072     12. IBDynamicGrid: Correctly resize grid when one column width plus indicator.
1073    
1074     13. IBDynamicGrid: Ensure Editor Panel has focus when shown - avoids Windows API calling
1075     DBGrid.DoExit on subsequent mouse click (e.g. on child control such as a tabbed page control.
1076    
1077     14. IBDynamicGrid: ignore up, down tab and return when editorpanel open and focus in a TCustomGrid descendent.
1078    
1079     15. DBControlGrid: Stop flashing grid when dataset closed and then re-opened while DisabledControls
1080    
1081     16. IBQuery: Bug fixed that prevented SQL being set programmatically once the Parser had been invoked.
1082    
1083     17. IBCustomDataSet: On close, parser is now freed and Select SQL reverts to value before DataSet Opened.
1084    
1085     IBX Change Log version (1.3-1) Sat, 18 Jul 2015 13:30:50 +0100
1086    
1087     1. OnCloseUp Event Handler added to TDBLookupProperties
1088    
1089     2. IBDynamicGrid: Call to OnEditorPanelHide is now last editor hide action - avoids
1090     problem with row size when exception is called.
1091    
1092     3. IBLookupComboEditBox: Force pending autocomplete on combobox exit.
1093    
1094     4. IBDynamicGrid and DBControlGrid: Keyhandler now ignores up, down, escape and return keys if
1095     in a TCustomComboBox and ignores return key if in a TCustomMemo
1096    
1097     5. IBLookupComboEditBox: Ensure that KeyValue is set correctly when full text
1098     keyed in i.e. when autocomplete not performed
1099    
1100     6. Cleanup of "Uses" clauses and add console mode support. IBX should now support
1101     console mode applications with all LCL required functions (builtin dialogs and
1102     cursor management) centralised in the IBDialogs unit. As long as "IBDialogs" is
1103     not included in your project, IBX should compile and link with a console mode program.
1104     See consolemode example and its "readme"for further guidence. DO NOT add the ibexpress package to a
1105     console mode application or the IDE will automatically assume that your
1106     application is GUI based. Instead, you should include the ibexpressconsolemode package.
1107    
1108     IMPORTANT NOTE: IBDialogs must be included in GUI applications in order
1109     to use the built in dialogs and cursor management. IBDialogs is
1110     included by default if "ibexpress" is in your project source's "uses" clause.
1111     This should be the case for all projects created through the IDE. This is why
1112     you do not want to add the ibexpress package to console mode applications. The
1113     ibexpressconsolemode package has been created to allow console mode programs
1114     to avoid adding LCL dependencies when using IBX, while still having the
1115     unit search paths set up correctly.
1116    
1117     Existing users should check to ensure that the "ibexpress" unit is included in
1118     each project's source file (*.lpr).
1119    
1120     You may find that in order for the IDE to recognise that ibexpressconsolemode
1121     exists, you have to first open the package in the IDE and then close it. This
1122     adds it to the most recently accessed packages list. To make it permanently
1123     available, add the package name to lazarus' staticpackages.inc file.
1124    
1125     Thanks to Julio Jiménez for suggesting support of console mode.
1126    
1127     7. SQL Parser can now accept quoted strings that include new lines
1128    
1129     8. IBDynamicGrid: Lookup Cell Editor - the cursor is now positioned at end
1130     of text on start of edit. This is particularly useful when tabbing to a
1131     column and then inserting text.
1132    
1133     9. New Examples provided for IB Services and ISQLMonitor.
1134    
1135     10. Fix error when writing to blob streams that recorded only the last buffer
1136     write in the blob stream. In most cases, this did not cause a problem as the
1137     IB Blob Stream is written in a single write. However, with the TDBImage, write
1138     of a graphic type prefix was lost which caused a problem when the image could
1139     not be automatically recognised.
1140    
1141     11. Improve generation of random cursor names in TIBSQL - avoid risk of "cursor
1142     already open" errors due to random numbers used for the cursor name being identical.
1143    
1144     12. IBTable: corrected error that could result in an "Index out of bounds" error
1145     when opening the table and the Primary Key is the last or only column in the
1146     table. Thanks to Rick Hoover for the fix.
1147    
1148     13. Fix TIBDatabase initialisation of lc_ctype under unix. Set to "UTF8" instead
1149     of "UTF-8", and update list of available database character sets. Existing
1150     users should check the current lc_ctype setting in their applications.
1151    
1152     IBX Change Log version (1.2-4) Sat, 09 May 2015 12:38:29 +0100
1153    
1154     1. Firebird Services: avoid List Index error when opening a service with an
1155     empty Params property.
1156    
1157     2. IBControls: Fix problem with new link mechanism introduced in 1.2.3.
1158     Link now set up in Loaded method - avoids occasional failure to apply
1159     SQL markup on initial open.
1160    
1161     3. "Employees" example performance improvements when scrolling.
1162    
1163     4. DBControlGrid: Correctly handle edit panel removal when panel is child control of a
1164     TFrame. Force recaching of selected frame to avoid GTK race (results in a
1165     random image cached).
1166    
1167     5. DBControlGrid: Should now react to changes in panel height at run time.
1168    
1169     6. IBDynamicGrid: Redraws rows below on panel editor hide - avoids blank space at end of grid
1170     even when further rows exist.
1171    
1172     7. DBControlGrid: DefaultRowHeight is no longer a published property as it should
1173     always be derived from panel height and setting this property can cause confusion.
1174     Note for existing projects: to avoid a missing property error at run time,
1175     each form using the DBControlGrid must be opened, updated and saved in the IDE
1176     in order to remove the property value from the lfm.
1177    
1178    
1179     IBX Change Log version (1.2-3) Tue, 14 Apr 2015 14:11:17 +0100
1180    
1181     1. TIBStoredProc. Prepare now called by ParamByName to avoid need to always
1182     call Prepare before setting parameter values.
1183    
1184     2. Error message on ParamByName (all cases) not found now includes name of missing parameter.
1185    
1186     3. Code tidyup and more robust handling of dsql information result vector.
1187    
1188     4. Support for centralised handling of transaction status changes. TIBTransaction
1189     has been given additional events "AfterEdit", "AfterInsert", "AfterDelete", "AfterPost"
1190     and "AfterExecQuery". The first three are called after the same event is called
1191     for an IBCustomDataSet descendent using the Transaction. The fourth is called
1192     after a call to TIBSQL.ExecQuery, again using this transaction. These new events
1193     enable monitoring of transaction status changes for a given transaction to be
1194     handled in a single place. For example, when a change to the dataset occurs
1195     an indicator can be set that shows the user that in order to save changes,
1196     the transaction should be committed. Rather than doing this per dataset, this
1197     can now be done per transaction.
1198    
1199     5. TDataSet.CheckBrowseMode automatically posts changes to the current row when
1200     the dataset is scrolled. However, any changes to the current row are, by default,
1201     discarded when the dataset is closed. TIBDataSet, TIBQuery and TIBTable now
1202     have a new property "DataSetCloseAction" that adds automatic posting of changes
1203     on dataset close. If this property is set to dcDiscardChanges (default) then the
1204     behaviour is unchanged from previous versions. if the value is set to dcSaveChanges
1205     then IBX will attempt to post any unsaved changes before the dataset is closed
1206     (and after the BeforeClose event handler is called). The exception is when the
1207     dataset is being closed as a result of a transaction rollback. In this case,
1208     no action is taken and any unsaved changes are discarded. This avoids both
1209     unnecessary overhead and the risk that a validation error may occur in the Post
1210     raising an exception and thereby preventing a rollback.
1211    
1212     6. String Field sizes and Display Widths should now be correct for multi-byte character sets.
1213     In earlier versions, the Display Width was set to the maximum byte width rather than the character
1214     width. Display Widths are now corrected by dividing by the max byte width per character.
1215     For UTF8 character sets, the byte width is four and hence the Display Width will be
1216     the byte width divided by 4. The byte width of each character set is determined
1217     dynamically when the database connection is estabished from the RDB$CHARACTER_SETS
1218     system table. (see also http://bugs.freepascal.org/view.php?id=27766).
1219    
1220     7. SQLParser will now correctly parse SQL Text which contains ':' within quoted string.
1221    
1222     8. IBLookupComboEditBox: List should now always be restored to full list when the
1223     control loses focus. Default Key press default interval reduced to 200ms.
1224    
1225     9. DBControlGrid: Ensure that selection is changed to newly appended row, even
1226     when dataset rows are less than visible rows.
1227    
1228     10. IBDynamicGrid: Editor Panel is not shown on indicator click if Datasource
1229     does not exist or DataSet is empty. More responsive on dataset open. New event
1230     OnRestorePosition. Column sort disabled if no header row.
1231    
1232     11. IBTreeView: improved handling of response to "Add Node". Avoid scrolling dataset
1233     while dataset state is dsInsert. Avoids posting errors.
1234    
1235     12. IBControls: New mechanism for distributing UpdateSQL and UpdateParams events. This is to
1236     avoid conflict with DisableControls/EnableControls with Master/Detail linked tables.
1237    
1238     13. IBLookupComboEditBox: Now avoids SQL Errors when combo box text contains single quotes.
1239    
1240     14. TIBDataSet and TIBQuery: new Event - OnValidatePost. This event has been introduced
1241     to solve a specific problem. That is when the dataset cursor is moved (e.g. by
1242     a grid mouse click and the current row is being edited or inserted. In this case, TDataset
1243     always "posts" the current record regardless or whether or not it may be more appropriate
1244     to cancel any changes; the post occurs before the "BeforeScroll" event fires due to the way the
1245     "MoveBy" function is implemented by TDataSet. The OnValidatePost event is called
1246     as the first action of the "Post" method and allows the handler to convert the Post
1247     into a Cancel if that is the appropriate action on moving to a different row. This is
1248     achieved by returning with "CancelPost" argument set to true. Note that an exception could be
1249     raised here, but it may still be more appropriate to validate a post and signal
1250     a problem in the "BeforePost" event handler. See readme.automaticposts.xhtml)
1251    
1252     15. On Unix derived systems, the Firebird library name can now be given as a colon
1253     separated list. Each library name on the list is tried in turn, in left to right
1254     order with the first found being used as the firebird library. By default, on Linux,
1255     the library name list is 'libfbembed.so.2.5:libfbembed.so.2.1:libfbclient.so.2'. This can be
1256     overidden by the FBLIB environment variable or the OnGetLibraryName function.
1257    
1258     Note: when using the libfbembed.so, if you prefix the database name with "localhost:"
1259     then it will still attempt to access the database via the Firebird Server and will
1260     require a username and password. If only the pathname is given, then the username
1261     and password should be omitted and the unix file permissions are used to grant
1262     access.
1263    
1264     IBX Change Log version (1.2-2) Sat, 14 Mar 2015 11:35:04 +0000
1265    
1266     1. A new IBControl - TDBControlGrid has been added. TDBControlGrid a lookalike
1267     rather than a clone for the Delphi TDBCrtlGrid. TDBControlGrid is a single column grid
1268     that replicates a TWinControl - typically a TPanel or a TFrame in each row. Each row
1269     corresponds to a row of the linked DataSource. Any data aware control on the
1270     replicated (e.g.) TPanel will then appear to have the appropriate value for the row.
1271    
1272     2. As suggested by Julio Jiménez, a new property "SQLHourGlass" has been added to TIBDatabase.
1273     When set to false (default true), the Hour Glass cursor is supcpressed and no cursor change
1274     takes place during database access. This may be useful when there are performance issues with
1275     the change of cursor. Setting the property to false suppresses the change of cursor.
1276    
1277     3. As suggested by Julio Jiménez, a new property "AutoCommit" has been added to TIBDataSet, TIBQuery
1278     and TIBTable. When set to acCommitRetaining (Default: acDisabled), a call is made to
1279     Transaction.CommitRetaining immediately after every Post or Delete. This has the effect of
1280     making all changes permanent immediately rather than when the transaction is explicitly
1281     committed.
1282    
1283     4. Experimental support for the Firebird 3 SQL_BOOLEAN type has been added while still
1284     using the legacy Firebird API. Thanks to Gabor Boros for helping to test this feature.
1285    
1286     IBX Change Log version (1.2-1) Fri, 13 Mar 2015 11:14:15 +0000
1287    
1288     Development version only.
1289    
1290     IBX Change Log version (1.2-0) Thu, 26 Feb 2015 10:34:04 +0000
1291    
1292     1. An internal select SQL Parser is now available for TIBCustomDataset descendents.
1293     This is typically used during an "OnBeforeOpen" event handler to manipulate the
1294     "Where" and "Having" clauses to implement user specified filters of arbitrary
1295     complexity.
1296    
1297     2. A new Component Palette entry "Firebird Data Controls" is now available. This has
1298     three new data aware controls dependent on IBX and which make use of the SQL Parser.
1299     These are:
1300    
1301     - TIBLookupComboEditBox
1302     - TIBDynamicGrid
1303     - TIBTreeview
1304    
1305     TIBLookupComboEditBox is a TDBLookupComboBox descendent that implements "autocomplete"
1306     of typed in text and "autoinsert" of new entries. Autocomplete uses SQL manipulation
1307     to revise the available list and restrict it to items that are prefixed by the
1308     typed text (either case sensitive or case insensitive). Autoinsert allows a
1309     newly typed entry to be added to the list dataset and included in the available
1310     list items.
1311    
1312     TIBDynamicGrid is a TDBGrid descendent that provides for:
1313     - automatic resizing of selected columns to fill the available row length
1314     - automatic positioning and sizing of a "totals" control, typically at the
1315     column footer, on a per column basis.
1316     - DataSet resorting on header row click, sorting the dataset by the selected column.
1317     A second click on the same header cell reversed the sort order.
1318     - Support for a "Panel Editor". That is on clicking the indicator column, the row
1319     is automatically expanded and a panel superimposed on it. The panel can have any
1320     number of child controls, typically data aware controls with the same datasource
1321     as the grid allowing for editing of additional fields and more complex editors.
1322     - Reselection of the same row following resorting.
1323     - A new cell editor that provides the same functionality as TIBLookupComboEditBox.
1324     Its properties are specified on a per column basis and allows for one or more
1325     columns to have their values selected from a list provided by a dataset.
1326     Autocomplete and autoinsert are also available. The existing picklist editor
1327     is unaffected by the extension.
1328    
1329     TIBTreeView is a data aware TCustomTreeView.
1330    
1331     3. When getting a field value using FieldByName.AsVariant, an SQL_INT64 with a
1332     zero scale will no longer return an error. An Int64 will be returned instead.
1333    
1334     4. TIBTransaction now has events for Before and After Transaction End and a new function
1335     "GetEndAction" allowing the EndAction to be accessed by these event handlers.
1336    
1337     5. TIBQuery can now handle correctly queries which contain the same keyword parameter
1338     repeated multiple times.
1339    
1340     6. TIBUpdateSQL will no longer return an error when "RowsAffected" is <> 1. This error
1341     check used to get in the way of using Stored Procedures, and "Update or Insert"
1342     statements.
1343    
1344     7. Insert, Modify and Delete property Editors now support Query Generation from
1345     Stored Procedures.
1346    
1347     8. Three new examples illustrate the use of the new IB Controls
1348    
1349    
1350     IBX Change Log version (1.1-0) Mon, 07 Jul 2014 14:01:07 +0100
1351    
1352     1. TIBXSQLVAR code clean up and optimisation to improve client side "prepare" and parameter
1353     setting performance. See "readme.field+param.names in the doc folder.(Thanks to
1354     Gabor Boros for reporting this problem and for testing the improvements).
1355    
1356     2. IBX can now support dialect 3 quoted column names that contain spaces and which differ only in their case.
1357     See readme.field+param.names in the doc folder.
1358    
1359     3. IBX SQL Editors will now automatically add double quotes around column names when the database
1360     dialect is "3" and the column name contains spaces or is a Firebird 2.5 SQL Reserved Word.
1361    
1362     4. Param Type LargeInt now supported in TIBQuery and TIBStoredProc
1363    
1364     5. TIBSQL.ExecQuery retry on failure removed to avoid problems with "at most once"
1365     actions.
1366    
1367     6. TIBTransaction.SetDefaultDatabase uses SetObjectProp instead of mis-using SetOrdProp (with
1368     thanks to Yuriy Kopnin for pointing this out).
1369    
1370     7. GenerateParamName is now a published property of TIBSQL, TIBQuery and TIBDataSet.
1371    
1372     8. varWord, varShortInt and varInt64 added to TIBXSQLVAR.SetAsVariant and hence now available as variant types
1373     for both fields and parameter setting.
1374    
1375     9. Changes to the Select SQL in an IBCustomDataset descendent should now be
1376     visible in the Fields Editor immediately afterwards - rather than only after cycling the "active" property.
1377    
1378     10. TIBSQL SQL editor will operate correctly and not report an SQL syntax error on SQL test,
1379     when DSQL ('?') parameter placeholders are used and the TIBSQL.GenerateParamNames property is set to true.
1380    
1381     11. TIBTable now has a property editor for "MasterFields"
1382    
1383     12. SQL Property Editors now include a checkbox "Allow DSQL Placeholder". This corresponds to the
1384     GenerateParamNames property and should be set when using DSQL (i.e. '?') style parameters.
1385    
1386     13. The IBTransaction editor now has a radio button ("Unspecified") which is set when the combination
1387     of settings is unrecognised. Selecting this radio button has no effect on the settings.
1388    
1389    
1390     IBX Change Log version (1.0-5) Sat, 28 Dec 2013 19:22:23 +0000
1391    
1392     1. TBookmark change conditional compile changed to >= 2.7.0 to match revised availability of change.
1393    
1394     IBX Change Log version (1.0-4) Thu, 28 Feb 2013 16:56:13 +0000
1395    
1396     1. In a TIBCustomDataset descendent, a generator now only sets the value when
1397     it is null. This allows for alternative user defined setting of the generator
1398    
1399     Many thanks to Julio Jiménez for this fix
1400    
1401     2. An Error Dialog is now displayed in the Lazarus IDE if IBX cannot find the Firebird Library
1402     and suggests that the user may have forgotten to install it.
1403    
1404     IBX Change Log version (1.0-3) Thu, 22 Nov 2012 22:53:39 +0000
1405    
1406     1. Conditional compilation used to limit registration of TIntegerField to
1407     Lazarus versions less than 1.1
1408    
1409     2. When a database connection is created, character set is now by default set
1410     to UTF8 (Unix) or to the current Windows code page (Windows) if in the range
1411     1250 to 1254.
1412    
1413    
1414     IBX Change Log version (1.0-2) Tue, 09 Oct 2012 09:10:30 +0100
1415    
1416     1. TBookmark change conditional compile changed to > 2.6.2 to match expected availability of change.
1417    
1418    
1419     IBX Change Log version (1.0-1) Sun, 05 Aug 2012 20:00:04 +0100
1420    
1421     1. In IBCustomDataset. Changed CurBookmark from string to TBookmark for compiler versions > 2.6.0
1422     Necessary because of TBookmark type and TDataSet.Bookmark property change in fpc 2.7.1
1423    
1424     2. IBX now registers TIntegerField as a "No Icon" component. This may be removed if the fpc DB
1425     package is changed to do this (which it should do).
1426    
1427     IBX Change Log version (1.0-0) Sat, 28 Apr 2012 16:43:00 +0100
1428    
1429     1. Add "if active then active := false" to TIBCustomDataset destructor. (Avoid error on database close).
1430    
1431     2. Make use of $STATIC conditional in IBSQLMonitor (Needed for FPC 2.6.0 compliance)
1432    
1433     3. Database Property Editor: Character Set drop down box now uses "OnChange" rather than "OnCloseUp" to react to changes
1434    
1435     4. Property editors should now correctly resize.
1436    
1437     5. In IBDatabaseEdit.TestClick, the LoginPrompt is now set to the state of the LoginPrompt Checkbox
1438     (restored original functionality)
1439    
1440     6. Under OSX, if IBX fails to load libfbclient.dylib, it will now try and load the firebird
1441     library using the absolute path /Library/Frameworks/Firebird.framework/Firebird.