ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/changelog
Revision: 312
Committed: Tue Aug 25 15:40:58 2020 UTC (3 years, 7 months ago) by tony
File size: 70021 byte(s)
Log Message:
Fixes Merged

File Contents

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