IBExpert new features archive

<< What's New? | IBExpert | Online documentation >>

IBExpert new features archive

IBExpert 2021.09.04

Minor bugfixes and improvements

back to top of page


IBExpert 2021.08.01

Minor bugfixes and improvements

back to top of page


IBExpert 2021.07.09

Minor bugfixes and improvements

back to top of page


IBExpert 2021.06.17

Minor bugfixes and improvements

back to top of page


IBExpert 2021.02.09

and bugfix version 2021.02.16

 

Note: some of the following features were introduced in earlier versions, but not documented.

1. Database Explorer

  • Package nodes now contain child nodes with package routines (procedures and functions).
  • Dragging package routine nodes into code editors has been implemented, with a choice of autogenerated statements.
  • SQL Assistant for packages has been implemented.

2. Table Editor

  • Log tab: added the possibility to disable automatic refresh of log data.

To disable automatic refresh put the following function call into "After IBExpert starts" event block:

    ibec_SetGlobalVar('IBE$TDL_DISABLE_AUTO_REFRESH', TRUE);

To disable the automatic refresh for a specified database:

    ibec_SetGlobalVar('IBE$TDL_DISABLE_AUTO_REFRESH.123', TRUE);

where 123 is a unique identifier of the registered database.

3. Package Editor

  • Commenting and uncommenting package procedures and functions implemented.
  • [Ctrl] + [C] shortcut in the list of package routines displays "Copy to clipboard" dialog with a choice of autogenerated statements.

4. Data Form View

  • Support of mouse wheel implemented.

5. Stored procedure/Function Editor

  • Emulation of procedure/function plan for Firebird 3, 4 databases.

6. Procedure/Function/Trigger Editors

  • Fixed the problem with missing body for external procedures/functions/triggers which have a non-empty source.
  • Parameters grid, Lazy mode: for domain-based parameters it is now possible to copy the domain comment to parameter comment. To enable this put following the function call into the "After IBExpert starts" event block:
 
ibec_SetGlobalVar('IBE$PRMFM_COPY_DOMAIN_COMMENT', TRUE);

To enable for a specified database only:

    ibec_SetGlobalVar('IBE$PRMFM_COPY_DOMAIN_COMMENT.123', TRUE);

where 123 is an unique identifier of the registered database.

7. Export data into script

  • The possibility to put statements into Firebird blocks (EXECUTE BLOCK) has been implemented.

8. Extract metadata

  • The possibility to put DML statements into Firebird blocks (EXECUTE BLOCK) has been implemented.
  • "Use REINSERT" option is ignored when the "Put statements in blocks" option is selected.

9. Table Data Comparer

  • The possibility to compare system (RDB$*) tables has been implemented.
  • "Use UNIQUE constraint in case of missing PRIMARY KEY constraint" option has been implemented.

For system (RDB$*) tables UNIQUE constraints will be used automatically, for user tables this option should be enabled manually if it is really necessary.

  • If two or more UNIQUE constraints are defined for a table, a random constraint will be used to identify records.
  • Online synchronization ignores DML statements generated for system tables.

10. IBEBlock

  • ibec_CompareTables: UseUniques option has been implemented to allow the comparison of tables which have a UNIQUE constraint instead of a PRIMARY KEY.
  • ibec_ExtractMetadata: UseBlocks and CommitBlocks options have been implemented.
  • ibec_CastEx function implemented.

In comparison with the ibec_Cast function, ibec_CastEx doesn't raise an exception if casting is impossible, instead it returns a specified DefaultValue.

Syntax:

    function ibec_CastEx(Value : variant; CastToType : integer; DefaultValue : variant) : variant;  

11. Other minor bugfixes and improvements

back to top of page


IBExpert 2021.01.07

 

1. Bugfixes, for example the grid view in Trace and Audit.

2. Help / Download IBExpert

This new menu item allows you to enter and store your IBExpert Download Center data once, so that in future, you can download all new IBExpert setup files onto the registered computer without any additional steps, as long as your subscription is still valid.

back to top of page


IBExpert 2020.12.06

 

1. Stored procedures now also display a plan in Firebird 3.0

2. Minor bug fixes and small improvements

back to top of page


IBExpert 2020.09.21

and bugfix version 2020.11.26

 

New IBEScript.dll interface

There are new interface functions implemented to allow a user application to communicate with IBEBlocks:

  1. Set IBEBlock parameters from the user application.
  2. Get IBEBlock output values.
  3. Perform user callback in any place of IBEBlock code passing data from within a block and returning user data back to a block,
 

1.New interface functions

1. ibesScriptInit - creates and initializes a scripter instance.

Syntax

 function ibesScriptInit : THandle; 

This function has no arguments and returns the handle of a script object.

2. ibesScriptFinalize - destroys a script object.

Syntax

 function ibesScriptFinalize(AScript : THandle) : integer; 

AScript is a valid handle to a scripter object created with the ibesScriptInit function. This function always returns 0 (zero).

3. ibesScriptSetConnection - sets an external connection for a script object.

Syntax

 function ibesScriptSetConnection(AScript : THandle; AConnection : THandle) : integer; 

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AConnection is a valid handle to a connection object created with the ibesConnectionInit function.

You don't need to set a connection if your script establishes it by itself or doesn't need any connection at all.

4. ibesScriptSetCallback - sets a specified callback function for a script object.

Syntax

 function ibesScriptSetCallback(AScript : THandle; AFunctionID : integer; AFunc : pointer) : integer;

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AFunctionID is an identifier of a callback function, see IBEScriptIntf.pas and the demo application (found in the program sub-directory IBExpert/IBEScriptDll/DemoApp) for a list of supported callback functions and their identifiers.
AFunc is a pointer to a callback function.

This function returns 0 (zero) if it succeeds, otherwise it returns a non-zero value.

5. ibesScriptExecuteText - executes a script from a specified string.

Syntax

 function ibesScriptExecuteText(AScript : THandle; AScriptText : PAnsiChar; AOptions : PAnsiChar) : integer;

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AScriptText is a string with script source.
AOptions argument is reserved for future use.

6. ibesScriptExecuteFile - executes a script from a specified file.

Syntax

 function ibesScriptExecuteFile(AScript : THandle; AFileName : PAnsiChar; AOptions : PAnsiChar) : integer;

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AFileName is a name of an existing script file.
AOptions argument is reserved for future use.

7. ibesConnectionInit connects to a database with specified connection parameters.

Syntax

 function ibesConnectionInit(AParams : PAnsiChar; AConnectErrorCallbacFunc : TConnectErrorCallbackFunc) : THandle;

AParams is a string with connection params. Syntax of the params string is the same as to the Connect function: IBEScript.dll documentation.
AConnectErrorCallbacFunc is a pointer to a callback function which will be fired in case of a connection error.

ibesConnectionInit returns a connection object handle (if successful) which should be used as an argument with the ibesScriptSetConnection function.

8. ibesConnectionFinalize - performs a disconnect for the specified connection object and destroys the specified connection object.

Syntax

 function ibesConnectionFinalize(AConnection : THandle) : integer;

The return value is 0 (zero).

The following new callback functions have been implemented:

1. TScriptIBEBlockProgressFunc = function(ABlockName, AProgressMessage : PAnsiChar) : integer; stdcall;

Similar to the old TBlockProgressFunc but also provides the block name for named blocks.
This function is called by the ibec_ProgressMessage function.

2. TScriptIBEBlockSuspendFunc = function(ABlockName, ASuspendData : PAnsiChar) : integer; stdcall;

This callback function is fired when SUSPEND is executed within a block. ASuspendData contains values of all output parameters in JSON format. See the demo app for an example.

3. TScriptIBEBlockGetInputParamsFunc = function(ABlockName : PAnsiChar) : PAnsiChar; stdcall;

This callback function is fired before the execution of the block and allows you to set values of block input parameters.
The user application should return a string which contains JSON data as in the example below:

 {
   "input": {
     "byname": true,
     "items": [
       {
         "name": "FirstParam",
         "value": 321
       },
       {
         "name": "SecondArrayParam",
         "value": [
           123.321,
           123.321
         ]
       },
       {
         "name": "ThirdParam",
         "value": true 
       }
     ]
   }
 }

4. TScriptIBEBlockUserCallbackFunc = function(ABlockName, AUserData : PAnsiChar) : PAnsiChar; stdcall;

This function is intended for communication between IBEBlock and the user application. It is fired when the @IBEScript.DoUserCallback function is executed.
Call it to pass data from a block and get a response if necessary:

  sResponse = @IBEScript.DoUserCallback('Should I do that?');
  if (sResponse = 'YES') then
    ...
  else
    ...;

See the demo application for more details.

5. All functions described above provide ABlockName argument which contains the name of the block if execution of that block was initiated as below:

  EXECUTE IBEBLOCK MYBLOCK ...

If the block name is missing ABlockName parameter will contain an empty string.

back to top of page


IBExpert 2020.09.13

1.Stored Procedure/Function Editor

  • Recompilation of dependent functions implemented (FB 3,4).

2. SQL Editor

  • Queries with a clause like "where (field = :PARAM) or (:PARAM IS NULL)" are now processed correctly: it is possible to specify any valid parameter value, not only NULL or NOT NULL.

3. Grant Manager

  • Improved performance (updating and filtering) while working with databases which contain thousands of DB objects and hundred thousands of grant records.

4. Data grids

  • Fixed problems with selecting a master record from popup grid when PK/FK values are of CHAR(16) (UUID) type.

5. Script Executive

  • OUTPUT statement: MemoAsText option implemented.
    If this option is specified blob values of subtype 1 (TEXT) will be exported as strings.

6. Extract Metadata

  • "Explicit COMMIT after each DDL statement" option implemented.
    This will add the COMMIT statement after each DDL statement in the result script.

7. IBEBlock

  • Support of POST_EVENT function implemented.
  • Set of functions for work with JSON data implemented.
  • ibec_ExtractMetadata: ExplicitDDLCommit option implemented, see above.
  • ibec_CompareMetadata: object filtering implemented.
    To exclude some database objects from the comparison it is necessary to process them in the callback block.
    For example see the IBEBlock page in the Database Comparer form.
  • ibec_CompareTables: a lot of additional statistical/progress information is passed to a callback block.
    See the IBEBlock page in the Table Data Comparer form for a full list of available data.
  • Namespaces implemented to divide IBEBlock functions and constants into categories without giving them long names starting with 'ibec_'.
    All new future functions will be implemented as namespace members.
    IBEBlock namespace is started with the @ character followed by a namespace name.
  • @IBEScript.DoUserCallback function implemented. It allows you to pass any user data in form of a string from IBEBlock to the user application and get a response.
    See IBEScriptIntf.pas and demo application for more info.
  • Support of the new IBEScript.dll interface.

8. IBEScript.dll

  • New set of interface functions implemented to handle work with the new callback functions.
    See IBEScriptIntf.pas and demo application for more info.

9. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2020.05.10

1. Database Explorer

  • Filtering of the Project View tree implemented.

2. Database Monitor

  • Fixed the issue with queries get messed up when two or more instances of the Database Monitor were started.
  • Fixed the problem with new queries disappearing after closing the Database Monitor.

3. Code Editor

  • Output parameters tip for the EXECUTE PROCEDURE statement implemented.
  • Parameter hints for new Firebird 4 functions (HEX_ENCODE, HEX_DECODE, MAKE_DBKEY, RDB$GET_TRANSACTION_CN) added.
  • Highlighting of new Firebird 4 keywords and reserved words.

4. Database Statistics

  • Statistics parsing has been improved.
  • Support of additional statistics data (Firebird 3, 4) in the table/index grids.
  • Fixed the problem with overflow of some statistics values which causes incorrect (mostly negative) data in table/index grids.

5. Option | Environment Options | User Database

  • Support of environment variables in a database path and client library name implemented.
    To use value of an environment variable as a part of a path enclose it between the percent chars:
    %USERPROFILE%\somedata\ibedb.fdb

There is IBE_APPDIR environment variable that contains the location of the IBExpert.exe directory.

6. Script Executive

  • SET DBTRIGGERS ON/OFF directive implemented.

If DBTRIGGERS is OFF all consequent CONNECT/RECONNECT statements will be executed with the isc_dbp_no_db_triggers flag. Default value is ON.

  • Add CONNECT statement feature adds SET DBTRIGGERS OFF automatically if the Supress database triggers option is specified in a database registration record.

7. Performance Data

  • Fixed the problem with overflow of some performance data values.

8. Event Blocks

  • Process the Code completion list event block implemented.

This event happens just before the Code Completion list appears, so the user can customize what to see and what to hide in that list. See the template block for example.

9. IBEBlock

  • ibec_CompareTables, ibec_CompareMetadata functions: NoConnect option implemented.

If this option is specified in the option string the result script will not contain CONNECT statement and corresponding SET NAMES, SET SQL DIALECT and SET CLIENTLIB directives.

  • ibec_CompareMetadata: AppendMode option implemented.

If this option is specified and the file ScriptFile already exists the resulting script will be appended to the ScriptFile. Otherwise a new file will be created or an existing file will be overwritten.

  • ibec_CompareTables: Return option implemented.

By default, this function returns null, but now it is possible to force it to return the total number of different records: specify Return=DiffCount in the option string.

  • ibec_CompareMetadata: Return option implemented.

By default, ibec_CompareMetadata returns null, but it is possible to force it to return the total number of actions (CREATE/ALTER/DROP etc.) in the result script: specify Return=ActionCount in the option string. Normally ActionCount = 0 if there are no differences found.

  • ibec_ExecSQLScript: TransactionParams (or TrParams) option implemented.

This option can be used to specify the initial transaction isolation level for the SQL script. Transaction parameters should be separated with a colon or semicolon: TrParams="read_committed,rec_version,nowait"

10. New IBEBlock functions

11. Minor bug fixes and small improvements

back to top of page


IBExpert 2020.01.06

and bugfix version 2020.02.12

1. Test Data Generator

  • Initial support of DECFLOAT / NUMERIC(38) fields (Firebird 4).

2. Data Grid

  • Support of DECFLOAT and NUMERIC(38) fields (Firebird 4): sorting, filtering and aggregate functions implemented.

3. SQL Editor

  • Support of UPDATE OR INSERT into another database implemented.

Syntax is similar to INSERT into another database:

    UPDATE OR INSERT into [another_database_alias].<table_name> 
    <select>  

4. Table/View Editor

  • Columns grid: [Ctrl] + [C] / [Ctrl] + [Ins] now copies name of focused field into the clipboard.

5. Blob Viewer

  • Support of JSON data format implemented.
    If blob data is modified using "As JSON" page IBExpert will try to remove all insignificant whitespaces before post.
    There is Remove whitespaces on post checkbox to control this behaviour.
    If there is a syntax error in JSON data - it will be posted "as is", without removing whitespaces.
  • JSON syntax highlighting is available also on As text page.

6. IBEBlock

  • ibec_BackupDatabase, ibec_RestoreDatabase, ibec_CreateConnection functions now support the WireCompression option (if both client and server support them).

    To enable compression it is necessary to specify 'WireCompression=TRUE' (or just 'WireCompression') in the options string.

7. Minor bug fixes and small improvements

back to top of page


IBExpert 2019.11.13

The free IBExpert Personal Edition and the IBExpert Developer Studio full versions now include a free IBExpert Watchdog Version S in the Tools directory. The S version may also be distributed free of charge.

back to top of page


IBExpert 2019.10.9

1. PSQL Debugger

  • Support of Trace Into for package routines and stored functions.
  • Support of DECFLOAT and NUMERIC(38, x) variables and parameters (Firebird 4).

2. SQL Editor

  • Support of DECFLOAT and NUMERIC(38,x) parameters (Firebird 4).

3. Trace and Audit

  • Analysis of large trace logs is now possible. The main idea is to retrieve only necessary items from a trace log file using the Grid View mode with applied filter criteria.
    It is also possible to save filtered data as a trace log file.

4. Database Designer

  • Support of identity columns (GENERATE BY DEFAULT AS IDENTITY and GENERATE ALWAYS BY IDENTITY).

5. Trigger Editor

  • Fixed bug with missing SQL SECURITY clause in lazy mode (Firebird 4).

6. Grant Manager

  • Fixed bug with missing USAGE privileges while working with a Firebird 4 database.

7. Minor bug fixes and small improvements

back to top of page


IBExpert 2019.07.24

1. Package Editor

  • Formatting of package header/body sources implemented.

2. Table Data Comparer

  • It is now possible to limit the synchronization queue size.

It is possible to limit the queue by the number of statements in it or by the memory occupied by the queue. A positive value means limitation by number of statements. A negative value means limitation by memory size (in megabytes). Default value is 0 - no limits.

  • Detailed statistics for comparison and synchronization actions have been implemented.

3. Environment Options / PSQL Debugger

  • Toggle to the Message tab on error/warning/message while debugging option implemented.

By default the PSQL Debugger activates the Message tab on every error/warning/message which occurs while debugging. If you don't like the default behaviour turn this option off.

4. BLOB Viewer

  • Fixed the problem with the display of icon pictures (ico format).

5. Script Executive

  • Fixed the problem loading BLOB values from BLOB-files when a blob data offset exceeds 2 GB.

6. IBEBlock

  • ibec_CompareTables: the QueueLimit option has been implemented.

A positive value means limitation by number of statements. A negative value means limitation by memory size (in megabytes). Default value is 0 - no limits.

Examples:

    QueueLimit=100 - number of statements in the queue must not exceed 100.
    QueueLimit=-5 - the queue must not occupy more than 5 megabytes.

7. Minor bug fixes and small improvements

back to top of page


IBExpert 2019.04.14

1. Code editors

  • Support of Firebird 4 functions in parameters tip.

2. PSQL object editors

  • Support of Firebird 4 syntax extensions.

3. Database backup

  • Support of backup to local machine - Backup to client side option.
    If this option is ON the backup file will be created on the client side instead of the server side.

4. Database restore

  • Support of restore from a local backup to a remote server - Restore from client side option.
    If this option is ON the local backup file will be used while restoring a database.

5. PSQL debugger

  • Support of management statements (Firebird 4).

6. Database explorer

  • For inactive indices IBExpert uses the same color as for inactive triggers (customizable in Options | Environment Options | DB Explorer).

7. Script Executive

  • Support of case-sensitive user and role names (FB 3, FB 4) in CREATE DATABASE and CONNECT statements.
    Case-sensitive names should be quoted with double quotes:

    CONNECT ... USER "SYSdba" ROLE "Admin_Role" ...;

8. Export data into a script

  • Support of DECFLOAT values (Firebird 4).

9. Test Data Generator

  • Support of TIME/TIMESTAMP WITH TIME ZONE columns (Firebird 4).

10. Grant Manager

  • Support of system privileges (Firebird 4).

11. IBEBlock

  • ibec_BackupDatabase, BackupToClient option implemented.
    If specified, the backup file will be created on the client side instead of the server side.
  • ibec_RestoreDatabase, RestoreFromClient option implemented.
    If specified, the local backup file will be used while restoring a database.

12. New IBExpert Backup Restore Service Version

  • Allows all options for IBEGbak and gbak also for Firebird 3.

13. New tools subdirectory with IBEGbak, IBELog and ufw

  • IBEGbak allows service-based backup/restore tasks to run faster, especially when using multiple servers over the network. Start the command-line tool IBEGbak.exe to view all possible parameters.
  • IBELog.exe and IBELogGUI.exe allows you to convert a Backup Log into a table-based compressed format to see which tables are responsible for long run times.
  • ufw.exe is an easy command-line tool to allow opening or closing TCP/IP ports in the Windows firewall. ufw is known in the Linux world.

Examples:

    		ufw allow 3050 

		ufw deny 3050 

14. Other minor bugfixes and small improvements

back to top of page


IBExpert 2018.12.15

and bugfix version 2019.01.15

1. Initial support of time zones (Firebird 4)

https://github.com/FirebirdSQL/firebird/blob/master/doc/sql.extensions/README.time_zone.md

2. Support of alternatives for embedding quotes in string literals

https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk02ch09s06.html#rnfb30-dml-altquoting

3. Support of BINARY/VARBINARY datatypes (Firebird 4)

4. Code Insight

  • Field descriptions are displayed if they exist.

5. SQL Editor

  • Now it is possible to start the SQL Editor without an active connection to execute IBEBlocks and to search for queries.

6. Minor bugfixes and small improvements.

back to top of page


IBExpert 2018.11.15 - bug fixes

This version includes important bug fixes for:

back to top of page


IBExpert 2018.10.18 & 2018.10.28

1. Database Inside

  • The issue with the incorrect extracting of generator values has been fixed.

2. PSQL Parser, Code Editors

  • Support for LOCALTIME and LOCALTIMESTAMP context variables has been implemented (Firebird 3.0.4).

3. User Manager

  • Support for cumulative roles has been implemented (Firebird 4).
  • Support for default roles has been implemented (Firebird 4).

4. Other minor bug fixes and improvements

back to top of page


IBExpert 2018.10.02

1. PSQL Debugger

  • Debugging of FOR SELECT ... AS CURSOR statements implemented.

2. Table data comparer

  • Synchronizing of internal generators for IDENTITY columns (FB 3, 4) implemented.

3. Extract metadata

  • Use RECREATE for tables option implemented.

If this option is ON IBExpert will use the RECREATE TABLE statement instead of CREATE TABLE.

4. Database Restore

  • Buffers option has been added to set the default database cache size (in number of database pages) for the database being restored.

5. SQL Editor

6. DB Explorer

  • Events log page implemented which contains the log of executed event blocks within the IBExpert session.
    • Double click a log entry to edit the existing event block.
    • Use the context menu to create a new event block or edit an existing one.

7. Event blocks

  • Process general template event block implemented.

This event block is an extension for Options/General templates and is intended for generating new object names, new PSQL object templates etc. For compatibility IBExpert first processes the specified "general template" and then passes it to the event block (if such a block is defined), where you can modify the result or compose it from scratch.
See the block template for more details.

8. IBEBlock

  • ibec_http_xxx functions now support the HTTPS protocol.
  • ibec_ExtractMetadata: UseRecreate option implemented. If this option is specified, the RECREATE TABLE statement will be used instead of CREATE TABLE.

9. Other minor bug fixes and improvements

back to top of page


IBExpert 2018.06.03 & 2018.07.19

1. Query datasets

  • To reduce number of possible out of memory errors we have redesigned the internal mechanism of storing records fetched from the server. If the records buffer is too much to fit in the RAM it will be flushed into a temporary file and the dataset will continue to work with that file instead of RAM. In that case the records fetched label above the data grid will change its color from Windows text (usually black) to blue. Also it will display the temporary file size, i.e. Records fetched: 1000000 :: 8366 M.

2. PSQL debugger

  • Possibility to debug procedures/triggers/functions that contain subroutines has been implemented. To debug such PSQL objects IBExpert will create a temporary debug package with subroutines declared in PSQL object source. Normally that package will be deleted when the debugger window is closed.

3. Database Backup

  • Backup IBEBlock page implemented. It contains an autogenerated IBEBlock for the database backup.

4. Database Restore

  • Restore IBEBlock page implemented. It contains an autogenerated IBEBlock for the database restore.

5. Data grid

  • OCTETS option (button) implemented. If this button is down IBExpert displays CHAR/VARCHAR CHARACTER SET OCTETS strings in a hexadecimal representation. If there are no octets fields in a record set the OCTETS button is hidden.

6. Metadata Extract

  • Bugfix: database event triggers were extracted as inactive if Delayed activation of database events and DDL triggers option was deactivated.

7. Input parameters form

  • Compact view style implemented.

8. Export data

  • Bugfix: some symbols of page footer/header were not escaped (i.e. some symbols need to be replaced with combination of other symbols) when exporting data into XLSX file.
  • Bugfix: Open file after export option didn't work with XLSX files.

9. Table Data Comparer

  • Ignore syncronization errors option implemented. If this option is ON all INSERT/UPDATE/DELETE errors during online synchronization are ignored allowing an attempt to execute all statements in the synchronization queue.

10. IBEBlock

  • ibec_CompareTables: IgnoreSyncErrors option added.
  • ibec_BackupDatabase, ibec_RestoreDatabase:
    • Support of SQL role implemented. To use an SQL role specify it in the option string: Role=SOMEROLE.

11. Other minor bug fixes and improvements

back to top of page


IBExpert 2018.02.25

(and Bugfix version 2018.04.01)

1. Import data

  • Import from *.xlsx files (Microsoft Excel) implemented.

2. Export data

  • Export into *.xlsx files (Microsoft Excel) implemented.

3. Database comparer

  • "Alter views" option implemented (for Firebird 2.5 and above)
    If this option is ON, the Database Comparer will alter modified views instead of dropping and creating them again. The only advantage with this way is the possibility to alter a modified view even if somebody is still using it.

4. Extract metadata

  • "Delayed activation of database events and DDL triggers" option implemented.
    If this option is ON, DB event and DDL triggers will be first created as inactive, and activated at the end of the result script.

5. Packages editor

  • Debugging of package procedures/functions implemented.
    To debug package routines IBExpert will create a temporary debug package with a modified source. Normally that package will be deleted when the debugger window is closed.

6. Exceptions editor

  • Converting of exception message to UTF8 implemented to avoid the "malformed string" error.

7. Code formatting

  • Support of exponential representation of numbers, i.e. 1.24E-5
  • Support of comparison operators: ~= , ^= , !> , ~> , ^> , !< , ~< , ^<

8. IBEBlock

  • ibec_ImportData function now supports import from XLSX files (Microsoft Excel).
    You can specify the sheet number (zero based) which you want to process, using the Sheet option for this, i.e.: Sheet=2. If the Sheet option is not specified the first sheet will be processed.
  • ibec_ExportDataset and SELECT .. AS EXPORT INTO
    Now exports data into XLSX format if XLS or XLSX export type is specified. There is no difference between XLS and XLSX export types.
  • ibec_CompareMetadata: AlterViews option implemented.
    See description above.
  • ibec_ExtractMetadata: DelayedTriggerActivation option implemented.
    See description above.

9. Minor bug fixes and improvements

back to top of page


IBExpert 2017.12.03

1. Database object editors

  • Support of NUMERIC/DECIMAL datatypes with maximum precision of 34 digits (Firebird 4).

2. Script Executive

3. Database Registration record

  • Services Manager / Expected database option added (Firebird 3, 4).

If you wants to use the services API to access a database which is configured to use a non-default security database, the new SPB item isc_spb_expected_db should be used when attaching to the Services Manager. The value of this item is a database which is expected to be accessed. See Firebird README.services_extension.txt for more details.

4. Database Statistics

  • Parsing and displaying of blob statistics implemented (Firebird 3, 4).
  • Additional blob statistics for servers that support the CHAR_LENGTH function.
  • Support of the Expected database (isc_spb_expected_db) option implemented.

On the new Blob page you can view all tables with blobs and their blob fields listed in a tree structure. The following information is displayed for each blob field:

  • the number of records
  • total size
  • min. and max. size, as well as the average size:
 

5. Backup Database

The new Additional page allows you to check the Expected database (isc_spb_expected_db) option if wished.

The Show runtime statistics section allows you to enable additional statistical information which is displayed by gbak during execution. In the lower part you can select those tables where you wish the data to be ignored (i.e. excluded from the backup).

6. Restore Database

7. Trace and Audit

  • Trace only current connection activity option implemented.
    If this option is on IBExpert will substitute the Trace connection ID with the ID of the currently active connection to a database, as specified in Database name. In other words, only the current connection from IBExpert itself will be traced.
  • Support of the Expected database (isc_spb_expected_db) option implemented.

8. Database Validation, Database Properties, Database Online/Shutdown

  • Support of the Expected database (isc_spb_expected_db) option implemented.

9. Database Inside

  • Column and parameter descriptions were ignored while creating a new database. This has been fixed.

10. Grant Manager

  • Grant manager reads the users list from SEC$USERS table if one exists in the database.

11. IBEBlock

  • ibec_BackupDatabase, ibec_ShutdownDatabase, ibec_OnlineDatabase, ibec_GetUsers function support the ExpectedDB option.

Example of usage:

     Res = ibec_BackupDatabase('localhost:D:\FB3_DATA\SELFSECURITYDB.FB3',
                               'D:\BACKUPS\SELFSECURITYDB.FBK',
                               'ClientLib=C:\Program Files\Firebird\fbclient.dll;
                                Password=masterkey; User=SYSDBA; 
                                ExpectedDB=D:\FB3_DATA\SELFSECURITYDB.FB3',
                                null);

Example of usage:

     Res = ibec_BackupDatabase('localhost:D:\FB3_DATA\SELFSECURITYDB.FB3',
                               'D:\BACKUPS\SELFSECURITYDB.FBK',
                               'ClientLib=C:\Program Files\Firebird\fbclient.dll;
                                Password=masterkey; User=SYSDBA; 
                                SkipData=(sales|customer); Statistics=TDRW',
                                null);

12. Minor bug fixes and improvements

back to top of page


IBExpert 2017.10.01

1. Support of Firebird 4 Alpha

  • DECFLOAT, BINARY, VARBINARY datatypes.
  • DECFLOAT types are now bound to CHAR. SET DECFLOAT BIND CHAR is performed just after the connection to database is established.
  • Parameter tips for COMPARE_DECFLOAT, NORMALIZE_DECFLOAT, TOTALORDER, QUANTIZE functions in code editors.
  • Extensions to the IDENTITY type in the Table and Column editors (autoincrement fields).
  • SQL SECURITY clause is supported in the corresponding object editors (tables, views, triggers, procedures, packages).
  • Extract Metadata supports new datatypes, SQL SECURITY clause and extensions to the IDENTITY type.

2. Master/Detail View

  • Issue with primary/foreign keys defined on UUID - CHAR(16) CHARACTER SET OCTETS - columns has been fixed.

3. Code Editor

  • After load from file event block implemented. See the block template for available input parameters.

4. IBEBlock

  • ibec_SetCurrentDir function has been implemented. It sets the current directory to specified, returning TRUE if successful.

Syntax:

     function ibec_SetCurrentDir(Directory : string) : boolean;

5. IBEBlock, ibec_smtp_SendMail function

  • Support of SSL (Secure Sockets Layer) and TLS (Transport Layer Security) has been implemented.
  • TLS is used automatically if the SMTP server allows it, i.e. STARTTLS is presented in response to the EHLO command. If for some reason you don't need TLS while communicating with an SMTP server - specify 'NoTLS' in the list of options.
  • To use SSL you must specify 'SSL' or 'UseSSL' in the list of options. Ensure that the SMTP server requires an SSL connection, otherwise the connection will not be established.
  • There are some changes in the authentication procedure. In previous versions of the ibec_smtp_SendMail function, the AUTH LOGIN method was used by default. Now the preferred method of authentication is determined by the response to the HELO/EHLO command. It is also possible to specify it manually using the AUTHTYPE option. The following methods are supported: NONE, PLAIN, LOGIN, CRAM-MD5, AUTO. AUTO is a default authentication method.
  • ibec_smtp_SendMail returns NULL if the message has been sent successfully. Otherwise it returns a string containing error message(s).

Example 1: Using SSL

     Res = IBEC_SMTP_SENDMAIL('smtp.gmail.com', '445',  -- GMAIL requires SSL connection on this port 
                          'some.user@gmail.com',  'masterkey',
                          'some.user@gmail.com',
                          'another.user@gmail.com',
                          '',
                          '', 
                          'Subject of message',
                          'Text of message',
                          '',
                          '',
                          'encoding="UTF-8"; ContentType=plain; Priority=High; UseSSL', null);  

Example 2: Using TLS

     Res = IBEC_SMTP_SENDMAIL('smtp.gmail.com', '25',  -- GMAIL allows TLS on this port; it will be used automatically 
                          'some.user@gmail.com',  'masterkey',
                          'some.user@gmail.com',
                          'another.user@gmail.com',
                          '',
                          '', 
                          'Subject of message',
                          'Text of message',
                          '',
                          '',
                          'encoding="UTF-8"; ContentType=plain; Priority=High; AuthType=LOGIN', null); 

6. Minor bug fixes and improvements

back to top of page


IBExpert 2017.09.15

Mostly minor bug fixes and a number of minor improvements.

back to top of page


IBExpert 2017.08.23

1. Database Comparer

  • Fixed the problem with the incorrect update script when stored procedure/function parameter name was changed.

2. Database monitoring

  • Restoring of data sorting after refresh has been implemented.

3. SQL Editor

  • Fixed the bug with executing INSERT INTO SOME_TABLE SELECT ... statement when SOME_TABLE doesn't exist in the database.

4. Code Formatter

  • Additional options - "One expression in a line" and "CRLF before items delimiter" have been implemented for ORDER/GROUP BY clauses.

5. Table editor

  • "FK table" column added into fields grid. It displays the referenced table name if the field is a part of the foreign key.

6. Other minor bug fixes and improvements

back to top of page


IBExpert 2017.08.08

Mostly minor bug fixes and a number of minor improvements.

back to top of page


IBExpert 2017.07.12

1. Code formatting

  • Formatting of subroutines (Firebird 3) implemented.

2. Database Explorer

  • Recompiling of all/selected stored functions and packages (Firebird 3) implemented.
  • Autogrant feature for all/selected packages implemented.

3. Minor bug fixes and small improvements

back to top of page


IBExpert 2017.04.24

1. Table data comparer

  • Put BLOB values into script as hex strings option has been implemented.

If this option is enabled, the values of blob fields will be written directly into the result script in hexadecimal notation, i.e.

 UPDATE MYTABLE SET BLOB_FIELD = x'4E657276656E';

Hexadecimal notation for binary values is available in Firebird 2.5 and Firebird 3.

The length of the binary value, which may be encoded in hexadecimal notation is limited to 32765 bytes in Firebird 2.5 and to 65535 bytes in Firebird 3.

If the blob value exceeds the limit it will be written in the lob-file as is.

  • Include old values of fields option has been implemented.

If this option is enabled, the old field values (for UPDATE statements) will be included into the result script as comments:

UPDATE TDC_DATA

     SET INT_DATA = 57555,
         /* OLD.INT_DATA = 91186 */
         STR_DATA = 'some string value',
         /* OLD.STR_DATA = '' */
         STR_DATA2 = 'bla, bla',
         /* OLD.STR_DATA (trimmed) = 'comment...' */
         BLOB_DATA = :h15A73_4D
         /* OLD.BLOB_DATA = (BLOB) */
     WHERE (ID = 871); 

(trimmed) means that the old value contains a '*/' sequence which cannot be shown within a comment: IBExpert trims the rest of the string and shows '...' instead.

2. Extract metadata

  • Put BLOB values into script as hex strings option has been implemented.

See notes above.

Additionally, if you extract data into the Script Executive or clipboard you may get a warning about skipped blobs if their length exceeds the limitation of the hexadecimal notation.

3. Table/View editor

  • The Field dependencies list now includes dependencies of foreign keys and referenced tables.

4. Database Explorer

  • Search in selected objects feature has been implemented.

This is a wrapper for the Tools / Search in metadata feature that allows you to search only in the metadata of selected objects. Just select the necessary objects in the Database Explorer tree and choose the Search in selected objects item in the tree context menu. This feature is also available in the dependencies trees of object editors and the Dependencies Viewer (Tools / Dependencies Viewer).

5. Code editors

  • The Parameters’ tip didn't show stored function (Firebird 3) arguments. This has been fixed.

6. Stored functions editor

  • The Code Insight list didn't show a function's local variables. This has been fixed.

7. Database Comparer

  • The problem with the safe conversion of BIGINT and INTEGER fields to DECIMAL/NUMERIC has been fixed.

8. IBEBlock

  • ibec_CompareTables function.

BlobsAsHex and IncludeOldValues options have been implemented. See description above.

  • ibec_ExtractMetadata function.

BlobsAsHex option has been implemented. See description above.

9. IBECallFBShutdown environment variable

  • FB 2.5 have introduced new API function fb_shutdown that clients should call before unloading (FreeLibrary) fbclient.dll when they don't need it anymore.

In some cases this may cause unexpected problems such as a connection shutdown" error.

Usually this may happen when your client application and IBEScript.dll share the same client library (fbclient.dll). In this case IBEScript.dll doesn't know that your application needs fbclient.dll and calls fb_shutdown before FreeLibrary.

Also sometimes FreeLibrary cannot unload fbclient.dll as expected and it remains in the client process memory but already in the shutdown state.

To avoid such problems we implemented the IBECallFBShutdown environment variable which controls the necessity to call the fb_shutdown function.

You can set value of this variable to FALSE to avoid calling the fb_shutdown function.

Example:

      execute ibeblock
      as
      begin 
        DB = ibec_CreateConnection(...);
        ...
        ibec_SetEnvironmentVariable('IBECallFBShutdown', FALSE);
        ibec_CloseConnection(DB);
      end

In this case fb_shutdown will not be called after disconnect. This workaround is for Firebird 2.5 only, it is not necessary to use it with Firebird 3.

10. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2017.02.26

Mostly minor bug fixes and a number of minor improvements.

back to top of page


IBExpert 2017.01.15

(and Bugfix version 2017.01.25)

1. IBExpert Benchmark

  • The new category Thread Test calculates the percentage value for multi-threaded CPU tests with 5000 pages cache result to better see the advantages when using Firebird 3.

2. Table/Column Editors

  • It is now possible to specify the initial value for autoincrement fields (GENERATED BY IDENTITY, Firebird 3) and restart them with the specified value.

3. Autogrant feature

  • IBExpert didn't grant privileges for SELECT used in WHILE statement expression. It's fixed.

4. Trace/Audit feature

  • Problem with the incorrect parsing of Firebird 3 trace config has been fixed.

5. Code Editor Options

  • Custom colors for added/modified/deleted lines which are used when comparing two texts has been implemented.

6. Procedure/Trigger/Function Editors

  • Synchronization of a subroutine name has been implemented in the Code Editor and Names' list while editing subroutines in Lazy Mode.

7. Dependencies Viewer

  • References counter added for each object node.

8. Database Inside

  • Saving/restoring of target server version implemented.

9. Code Formatting

  • CRLF before/after and indent for ON keyword (JOIN clause) options implemented.

10. Compile Form

  • Multi-selection has been implemented in the list of statements.
  • It is now possible to open more than one object editor ([Enter] or using the context menu).

11. To Do List

  • Problem with invisibility of some values of To-Do items has been fixed.

12. Package and View Editors

  • AutoSave/AutoLoad features implemented.

13. Commit/Rollback Form

  • Has been redesigned to radio-group items.
  • Force close connection option has been implemented.

14. Extract Metadata

  • Performance has been improved when working with databases containing thousands of objects.

15. Dependencies trees

  • Fixed the occasional problems with objects sorting.

16. Code Editors

  • Code editor before save to file event block implemented. This block is fired directly before IBExpert saves the editor's content into a file and before the Save To File dialog appears. Within the block the user may change the target file name, file encoding (ANSI/UTF8, with or without BOM), cancel saving and supress the Save dialog. See block template for more information. Event blocks can be created/edited using the context menu in the Scripts/Blocks tree in the DB Explorer.

17. Backup/Restore Database

  • Additional information has been added regarding the time spent for operations listed in the backup/restore log (not displayed for time less than 1 second).

18. Other minor bug fixes and small improvements

back to top of page


IBExpert 2016.11.07

1. Object Editors, Operations/Index Using Tab

  • Support of subroutines (Firebird 3) has been implemented.

2. SP/Trigger/View Analyzer

  • Support of stored functions (Firebird 3) has been implemented.
  • Support of subroutines (Firebird 3) has been implemented.

3. Dependencies Viewer

  • Support of stored functions and packages (Firebird 3) has been implemented.

4. Table Data Comparer

  • Temporary tables (GTT) has been removed from the tables selection list.

5. Editor Options

  • Change font size with [Ctrl] + Mouse Wheel option added.

6. SQL Editor

  • Conversion of error messages from UTF8 has been implemented.

7. Package Editor

  • Confirmation before closing the editor (if package was changed) has been implemented.

8. IBEBlock, ibec_Exec function

  • If NoWait option is specified callback block and the OutFile option will be ignored. ibec_Exec with NoWait option just starts the process and returns immediately.
  • ShowWindow and HideWindow options have been implemented. By default the ibec_Exec function creates the process with a hidden window, if NoWait option is not specified. Use the ShowWindow option if you don't need to hide the process window.

9. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.10.09

1. Extract Metadata

  • The extraction of computed fields has been improved.

When a computed field is used in a view, the definition of that field will appear in the result script just before the view definition. This will only work if the Extract computed fields separately option is enabled.

2. Table Data Comparer

  • OCTETS character set strings (CHAR/VARCHAR) are now written into a LOB file if it is not possible to convert them into hexadecimal format.

3. Script Executive

  • Possibility to load CHAR/VARCHAR values from a LOB-file has been implemented.

4. SQL Editor

  • Editor font size is now stored for each query individually.

The font size can be increased/decreased using Ctrl + Mouse Wheel.

5. Object Editors, Dependencies

  • Fixed the problem with missing dependencies on packages (Firebird 3).

6. SP/Function Debugger

  • Support of the RETURN statement (stored functions, Firebird 3) has been implemented.

7. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.09.04

1. Database Comparer

  • Fixed the problem with the occasionally incorrect order of views while creating/deleting them.

2. Table Data Comparer

  • Fixed problem with missing values of Boolean fields in INSERT/UPDATE statements (Firebird 3).

3. Database Registration

  • Notification about the case sensitivity of user names (logins) for Firebird 3 added.

4. SQL Editor

  • Implemented the possibility to create stored scripts/blocks (which are stored in IBE$SCRIPTS table) from the SQL Editor content. There is a new button on the SQL Editor toolbar: New script/block.

5. Possibility to set IBExpert User Database connection properties from an INI-file

  • IBExpert looks for the IBExpert.ini file in the current directory. If there is no IBExpert.ini file in this directory - the user profile directory will be searched too.
  • If the IBExpert.ini file is found, IBExpert will read the UserDB section, if it exists. Four parameters are possible in this section:
    • UDBConnectString - the User Database connection string;
    • UDBUserName - user name
    • UDBPassword - password
    • UDBClientLib - path to client library file (fbclient.dll if omitted)

Only the UDBConnectString parameter is mandatory. If this parameter is found IBExpert will connect to the specified database instead of getting the User Database connection properties from the Windows Registry.

Example of IBExpert.ini file:

 [UserDB]
 UDBConnectString=USERDB.FDB
 UDBUserName=SYSDBA
 UDBPassword=masterkey
 UDBClientLib=..\Firebird\fbembed.dll

6. Blob Viewer: improved image viewer

  • Zooming in/out are possible using mouse wheel and +/- buttons on the keyboard.
  • Switching between actual size and "fit to window" mode is possible with mouse double-click or pressing the space bar.
  • Dragging image is possible when holding down the left mouse button.

7. IBEBlock

  • ibec_GetFiles: __gfSort option didn't work properly; it's fixed.

8. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.08.20

1. Database Designer

  • Fixed the problem with Boolean fields determined as UNKNOWN while reverse engineering Firebird 3 databases.
  • Zoom direction when using the mouse wheel has been reversed to correspond to other applications.
  • Drag mode when pressing and holding the middle mouse button has been implemented.

2. Database Monitoring, SQL Editor

  • Handling of lost connection errors has been improved.

3. Database Comparer

  • Fixed the problem with changing primary key properties (dependant foreign keys weren't deactivated).

4. DB Explorer

  • Jump to packages and Jump to functions (sub-items of Goto object) have been added to the context menu.

5. IBEBlock

  • ibec_RegisterFBCryptKey function implemented.

Syntax:

    function ibec_RegisterFBCryptKey(KeyName : string; KeyData : string; FBCryptDLLPath : string) : integer;

The ibec_RegisterFBCryptKey function registers a key to allow work with an encrypted Firebird database (Firebird 3).

It accepts following parameters:

  • KeyName - key name, should match one used in ALTER DATABASE ENCRYPT WITH "DbCrypt" KEY NAME operator;
  • KeyData - key bytes sequence;
  • FBCryptDLLPath - currently not used, reserved for future use;

There are three ways to specify key bytes sequence:

  1. ibec_RegisterFBCryptKey('Red', '$ec$a1$52$f6$4d$27$da$93...', '')
  2. ibec_RegisterFBCryptKey('Green', '0xab,0xd7,0x34,0x63,0xae,0x19,...', '');
  3. ibec_RegisterFBCryptKey('Raw', 'just a plain string', '');

It is possible to register more than one key (they should have different names).

The ibec_RegisterFBCryptKey function registers a key within the IBExpert/IBEScript process. Specified keys will be registered on the server if the key not set error is caused when connecting to a database.

  • ibec_RegisterFBCryptKey requires FBCrypt.dll on the client side.
  • DBCrypt.dll and KeyHolder.dll (plugins) should be installed and configured on the server side.

There are several ways to call ibec_RegisterDBCryptKey before connecting to a database:

  1. Include it into After IBExpert Starts script (Options / Environment Options).
  2. Include it into Before Connect Script of a database (Database Registration Info).
  3. Include it into After IBExpert Starts event block (DB Explorer / Blocks / Create/Edit event block in the context menu).

6. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.08.05

In dieser Version wurden die durch Windows Updates verursachten Registrierungsprobleme behoben.

back to top of page


IBExpert 2016.07.26

1. Table Data Comparer

  • The Too many contexts problem, which occurred when packing statements into Firebird blocks has been fixed.

2. Duplicate field name

  • Fixed the error which occurred when a record set contains two or more columns where the names differ in character case only.

3. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.07.17

1. Support of URL-style connection strings (Firebird 3) has been implemented in the following dialogs:

  • Database Registration Info
  • Create Database
  • Communication Diagnostics
  • Database Folder Properties

2. SQL Editor

  • Support of the RETURNING clause for UPDATE and DELETE statements. IBExpert shows the returned values in the Messages panel.

3. IBEBlock

  • ibec_CompareTables: the broken functionality of the AppendMode option has been restored.

4. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.06.19

1. Package Editor

  • Version history tab implemented.
  • Comparison tab implemented.
  • To-do tab implemented.

2. Stored (internal) Function Editor

  • Fixed the problem with incorrect object type (value of 1 was used, the same as for stored procedures) for stored functions to register a version in IBE$VERSION_HISTORY table. Since this version it is changed to 4.

To fix already existing records with an incorrect object type you can execute following UPDATE:

    update IBE$VERSION_HISTORY vh
    set vh.ibe$vh_object_type = 4
    where (vh.ibe$vh_object_type = 1) and
          (exists(select f.rdb$function_name from rdb$functions f 
                  where f.rdb$function_name = vh.ibe$vh_object_name)) 

3. Database Registration Info

  • Disconnect if no activity option implemented (Additional page). Set it to a non-zero value to close the connection after a specified number of minutes if no activity against the connected database is detected.

4. Create View from Table

  • Support of IBEBlock implemented.
  • Support of RETURNING...INTO for before insert/update triggers implemented.

5. Data Grid

  • The popup text blob editor was replaced with a new one which works correctly with UTF8 data.

6. Code Editor

  • [Ctrl] + MouseWheel temporarily increases/decreases font size of text in an active code editor.

7. Export Data, Export as INSERT

  • The speed of data export has been increased.

8. Grant Manager

  • Fixed the problem with the missing USER/ROLE keyword when granting privileges on a database (CREATE/ALTER/DROP).

9. To-do List

  • Support of stored (internal) functions and packages (Firebird 3).

10. Database Comparer

  • Fixed some issues with comparing and altering computed fields.
  • Fixed the problem with the POSITION function that causes a syntax error when comparing Firebird 3 databases/scripts.

11. IBEBlock

  • Fixed the problem with ROW_COUNT variable (always contained 0).

12. Minor bug fixes and small improvements

back to top of page


IBExpert 2016.05.02

Bug-fix IBExpert.dll.

back to top of page


IBExpert 2016.04.15

This version 2016.04.15 introduces a new simplified and automated registration procedure for all IBExpert software products. You will however need to verify each active registration once. Please follow the procedure described in our online documentation:

Should you have any questions, please mail register@ibexpert.biz.

back to top of page


IBExpert 2016.03.15

1. IBExpert Benchmark

  • IBExpert Benchmark has a new look! We're currently improving the IBExpert Benchmark feature; more improvements coming in the next IBExpert releases.

2. Package Editor

  • Package routines' explorer implemented.

3. SQL Editor

  • Fixed the problem with the empty plan for UPDATE OR INSERT and MERGE statements.

4. Table Data Comparer

  • Online synchronization feature implemented. This allows you to update the target database simultaneously with the comparison process.
Online synchronization is performed in a separate thread. If the result file name is specified, IBExpert also creates script file. If you only need online synchronization, leave the script file name editor empty.
  • Commit each block and Commit after specified number of records options added.

5. Test Data Generator

  • Added support of BOOLEAN and BLOB fields.
  • This now composes an IBEBlock which can be used to generate test data.

6. Script Executive

  • Advanced progress option implemented. If this option is enabled (default):
    • IBExpert roughly calculates and displays the remaining time using known script size and time already spent;
    • The progress bar is shown on the Script Executive toolbar;
    • Scrolls the script text editor accordingly to the part of the script currently being executed.

7. IBEScript

  • Advanced progress option added.

Syntax is "-A<seconds>" where <seconds> specifies the time interval in seconds to display progress messages. If <seconds> is not specified advanced progress information will be displayed every second.

The following information is available:

  • SC - statements count, number of executed statements;
  • POC - percentage of completion;
  • TS - time spent;
  • ETL - estimated time left.

For INPUT scripts the name of the input script file name will also be displayed.

Advanced progress information is displayed even if the -S option (silent mode) is specified.

8. Database Registration

  • Suppress database triggers checkbox added.

9. Import Data

  • Composed IBEBlock now contains fields mapping information.

10. Create Database dialog

  • You can now specify the SQL role name while creating the database.

11. IBEBlock

  • ibec_CompareTables now supports the following options:
    • CommitBlock or CommitBlocks - to perform COMMIT after each Firebird block;
    • CommitAfter=<number> - specifies the number of statements between COMMITs.
    • SyncOnline - perform online synchronization, see above.

12. Minor bug fixes and small improvements

back to top of page


IBExpert 2015.12.21

1. Database Comparer

  • Fixed all known bugs introduced in 2015.09.28.

2. Procedure, Function, Trigger Editors

  • Support of external procedures/functions/triggers (Firebird 3) implemented.

3. Create View from Table

  • Edit view after compile option added.

4. Create Procedure from Table

  • Grant necessary privileges on used tables option added.

5. Database Inside

  • Fixed problem with incorrect calculation of some ODS-dependent data which can cause errors while extracting data/metadata.

6. Extract Metadata

  • Support of external procedures/functions/triggers implemented (Firebird 3).

7. Script Executive

  • Support of external procedures/functions/triggers implemented (Firebird 3).
  • INSERTEX: support of BOOLEAN datatype implemented.

8. Minor bug fixes and small improvements

back to top of page


IBExpert 2015.09.28 & 2015.11.11

IBExpert Version 2015.11.11 is a small bugfix release, in which primarily the Database Comparer has been improved.

1. Database Comparer

  • Support of Firebird 3 databases implemented.
  • Visualization of differences implemented.

2. Trigger Editor

  • Added support for CREATE/ALTER/DROP MAPPING actions (Firebird 3).

3. Table Data Comparer

  • Now uses a single transaction when comparing data of several tables at the same time.

4. IBEBlock, ibec_CompareMetadata function

  • New OmitFunctions and OmitPackages options are intended to skip stored functions and packages accordingly while extracting and comparing metadata.
  • New Server version option - FB30 - implemented to support Firebird 3 databases. Usage: ServerVersion=FB30;...

5. Minor bug fixes and small improvements

back to top of page


IBExpert 2015.06.01

1. Database Inside

  • Support of Firebird 3 databases implemented.
  • Fixed the accidental invalid floating point operation error.

2. Database Comparer, Table Data Comparer

  • Fixed the problem that caused IBExpert to crash in some cases.

3. Support of online validation (Firebird 2.5.4) implemented

There are two ways to perform online validation:

  • In the Database Explorer select one or more tables and choose Validate selected table(s) online from the context menu.
  • In the Table Editor select Validate online from the Editor menu.

Online validation is available only in Firebird 2.5.4.

4. Data grids

  • Data tips for blob fields are shown in Unicode if it is necessary.

5. Code Editors

  • Support of statistical functions and linear regression functions (highlighting, parameter tips) implemented, Firebird 3.

6. PSQL parser

  • Support of REGR_xxx (linear regression) functions as window functions implemented (Firebird 3).

7. Blob Viewer

  • Added support of Firebird 3 format descriptors (As format page).

8. Minor bug fixes and small improvements

back to top of page


IBExpert 2015.03.14 & 2015.03.27

IBExpertLive has now officially been discontinued, as it has been fully replaced by our YouTube channel.

1. Database connection

Fixed the problem with accidental access violation error while restoring the desktop after connection to a database.

2. Create SUID procedures

  • Support of refresh procedure implemented. Refresh procedure returns a single record specified by the primary key value.

3. Data frames

  • It is now possible to change the font size used to display data. This also affects the Form View (both classic and compact), the memo/string edit dialog and Print data report. IBExpert saves and restores the altered font size value individually for each table/view/procedure.

4. Table data comparer

  • The possibility to compare blobs using the Firebird HASH function has been implemented. This option will be ignored if one of the servers of the source or comparative database doesn't support the HASH function.
  • It is now possible to pack INSERT/UPDATE/DELETE statements into Firebird blocks (EXECUTE BLOCK). This will not affect statements which contain parameters to load data from a blob file.

5. Import data

  • Trim trailing spaces and control characters option implemented. If enabled, IBExpert will remove trailing spaces and control characters from string values.
  • Fixed the problem with importing data from DBISAM tables which contain graphic/image fields.

6. Metadata extract

  • Extraction of user-defined collations has been implemented. Currently there is no way to select the collations which will be extracted into a script, all user-defined collations will be processed if they exist.
  • Extraction of DDL privileges implemented (Firebird 3).
  • Extracting data as UPDATE OR INSERT statements (without the MATCHING clause) has been implemented.
  • The problem with package headers containing TYPE OF COLUMN definitions has been fixed. Now such headers, initially created with TYPE OF COLUMN, are replaced with a raw data type definition and then, following creation of the tables, altered with user-defined header text.

7. Script Executive

  • The IBExpert-specific DESCRIBE statement will be translated to the Firebird COMMENT ON statement instead of UPDATE RDB$xxx when executing scripts against Firebird 3 databases.

8. PSQL debugger

  • Support of the CONTINUE statement (Firebird 3).

9. Grant Manager

  • DDL privileges (Firebird 3) mode implemented.

10. Export data

  • Write BOM option added for CSV and text export types.

11. IBEBlock

  • ibec_ImportData function - TrimRight option implemented. If this option is specified, trailing spaces and control characters will be removed from string values whilst importing data.
  • ibec_ExtractMetadata function - ExtractDDLPrivileges and UseUpdateOrInsert options implemented.
    • The ExtractDDLPrivileges option allows extraction of privileges on data definition language statements such as CREATE/ALTER/DROP (Firebird 3).
    • The UseUpdateOrInsert option allows extraction of data as UPDATE OR INSERT statements instead of INSERT.
  • ibec_CompareTables function - UseHashFunc[tion] and UseBlocks options implemented.
    • The UseHashFunc[tion] option allows the comparison of blobs using the HASH function. This option will be ignored if one of the servers - source or comparative - doesn't support the HASH function.
    • The UseBlocks option forces the packing of INSERT/UPDATE/DELETE statements into Firebird blocks (EXECUTE BLOCK) if possible.
  • ibec_ds_Export function and SELECT ... AS EXPORT statement: the WriteBOM option now works for CSV and text exports.

12. Minor bug fixes and small improvements

back to top of page


IBExpert 2014.12.17

1. Copy database objects

  • Support of autoincrement fields in Copy Table block (Firebird 3).
  • All blocks now execute COMMENT ON statement instead of direct update of appropriate system table when working with the Firebird 3 server.
  • Added blocks for copying packages and stored functions.

2. User Manager

  • The User Manager now uses SQL instead of the Services API when working with Firebird 3 databases.

3. Database Explorer

  • Users from the SEC$USERS table are now listed in the Database Explorer tree when working with Firebird 3 databases. Adding, editing and dropping users are now all available directly from the Database Explorer.

Adding and editing tags is not available yet, except UID and GID tags.

4. PSQL parser

  • Support of OFFSET and FETCH clauses (Firebird 3) implemented.

5. Code Formatter

  • Added support of OFFSET and FETCH clauses (Firebird 3).

6. Extract Metadata

  • Extracting definition of autoincrement fields (Firebird 3) implemented.
  • Extracting descriptions of package procedures/functions and their parameters (Firebird 3) implemented.

7. HTML documentation

  • Now includes information about packages and stored functions (Firebird 3).

8. Code Editor, Code Insight

  • Package procedures and functions are now listed in the code completion list.
  • Parameters/arguments of package procedures and functions are now displayed in the parameters tip (Firebird 3).

9. Database inside

  • Use short INSERT if possible option implemented. This will generate a short version of INSERT - without the list of columns - as opposed to the long INSERT. This allows you to put more statements in a block and improve performance.
  • Additional statistics data is available.

10. IBEBlock

  • ibec_CompareTables function. If the WHERE clause is specified it will be applied to all tables listed in the list of tables to compare.
  • Support of assignment statements like <variable> = <boolean_expression> implemented.

Example:

    bNotNull = MyVar is not null;

11. Minor bug fixes and small improvements

back to top of page


IBExpert 2014.09.15 & 2014.09.30

New IBExpert Demo Database

This IBExpert version includes an all-new demo database for Firebird 3.0. In the subdirectory, \IBExpertDemoDB, you will find a new script, db1_30.sql, which you an use to create a Firebird 3.0 database.

Among other things this includes a Soundex function as a stored procedure, as a stored function and as a package. By these means you can create your own functions in Firebird 3.0 or using your own UDF, and use them in SQL as if they were an internal function.

Furthermore there is a basic implementation for a materialized view alternative in this script, which can also be used with older Firebird versions.

By combining a view with a static table it is now possible to avoid calculating complex result sets each and every time, and only recalculate them following expiry of specified time intervals. In the next few days we'll be uploading a video in the IBExpert Learning Center, explaining the fundamentals.

Other new features include:

1. Data View

  • Implemented the possibility to display CHAR(16) CHARACTER SET OCTETS fields as UUID (i.e. '248BC700-F384-4AC3-BB39-C0A588B45110'). In this mode these fields are read-only and cannot be modified.

2. SQL Editor

  • Last executed column added to the list of Find query results. This makes sense only for queries from the query history which have a corresponding timestamp value.

3. Generator/Sequence Editor

  • Support of generator increment value (INCREMENT BY clause, Firebird 3).

4. Exception Editor

  • DDL script now includes privileges on exceptions (Firebird 3).

5. Environment Options

  • SQL Editor: Request new query name immediately before creating option implemented. If this option in enabled IBExpert will request a new query name just before creating it.

6. Dependencies

  • Dependencies list for tables/views/procedures/functions/packages now contains user-defined domains used in the object definition.

7. Search in Metadata

  • Searching in functions and packages implemented (Firebird 3).

8. Table Data Comparer

  • Added IBEBlock page which contains an automatically-composed IBEBlock for comparing table data.

9. Import Data

  • Decimal separator option added for import from text files.

10. IBEBlock

  • ibec_ibe_SetLngShortcut function implemented.

Syntax:

 function ibec_ibe_SetLngShortcut(StrID : integer; Value : variant) : variant; 

ibec_ibe_SetLngShortcut changes the shortcut of a specified IBExpert action. StrID is the identifier of the language resource string associated with the action. String identifiers are listed in Tools | Localize IBExpert.

Value is an integer or string representation of the shortcut, for example 'Ctrl+Alt+F7'.

If successful, ibec_ibe_SetLngShortcut returns an integer value which represents the new shortcut, otherwise it returns NULL.

Example 1:

Changing the shortcut of the Disconnect from database action:

 Res = ibec_ibe_SetLngShortcut(1019, 'Shift+Alt+D'); 

Example 2:

Clear the shortcut of the Connect to database action:

 Res = ibec_ibe_SetLngShortcut(1018, 0); 

11. Minor bug fixes and small improvements

back to top of page


IBExpert 2014.06.17

Important Personal Edition changes

  • The activations for the Personal Edition are now valid only until the end of each calendar month.
  • When you first start the Personal Edition at the start of the new month you need to enter a new activation code.
  • In order to generate an activation code you need a valid IBExpert Download Center account.
  • The activation codes are still free.
  • The new version is also compatible with Linux/Wine.

If you own a valid IBExpert Developer Studio full version, you can activate an unlimited number Personal Edition registrations on your IBExpert Download Center account. Otherwise you can activate up to 4 Personal Edition registrations per month per account.

1. Script Executive

SET LOGIN PROMPT ON/OFF command implemented.

This command enables or disables the login prompt dialog when the user name and/or password within CONNECT or CREATE DATABASE is not specified. The SET LOGIN PROMPT command is useful when you use trusted authentication and don't need a login prompt dialog. The default value is ON.

Example:

 SET NAMES UTF8;
 SET LOGIN PROMPT OFF;
 CONNECT ...;
 ...

Fixed the problem with incorrect parsing of PSQL code containing subroutines (Firebird 3).

2. Trace and audit

  • Added support of the explain_plan option (Firebird 3).

3. Autogrant privileges

  • Support of stored functions implemented (Firebird 3).
  • Support of subroutines implemented (Firebird 3).

4. Grant Manager

  • Support of stored functions implemented (Firebird 3).
  • Support of privileges on UDFs (Firebird 3).

5. Stored Functions Editor (Firebird 3)

  • Lazy Mode implemented.
  • Grants page implemented.
  • Executing of stored functions implemented.

6. Extract Metadata

  • Support of stored functions implemented (Firebird 3).

7. UDF Editor

  • Support of privileges on UDFs implemented (Firebird 3).

8. Exception Editor

  • Support of privileges on exceptions implemented (Firebird 3).

9. Database Statistics

  • Support of additional table data implemented (Firebird 3).

10. Package Editor (Firebird 3)

  • Script page implemented.

11. Code Editor

  • Packages now appear in the Code Insight list (Firebird 3).

12. IBEBlock

  • ibec_PasswordQuery function implemented.

Syntax:

 function ibec_PasswordQuery(const ACaption, APrompt: string; var Value: string): Boolean;

The ibec_PasswordQuery function is similar to ibec_InputQuery, the only difference is an asterisk ('*') in place of any input text.

  • ibec_ExtractMetadata

DateTimeFormat options added to allow user-defined formatting of datetime (timestamp) values. Usage is similar to the DateFormat option:

 DateTimeFormat="dd.mm.yy hh:mm:ss.zzz"


  • ibec_ExtractMetadata

Added support of stored functions (Firebird 3). A list of stored functions to be extracted should be specified in the Options string:

 FUNCTIONS=ALL;

or

 FUNCTIONS=FUNCTION_1,FUNCTION_2,...;

or

 FUNCTIONS=NONE;

13. Service Control Center

The Service Control Center is now started automatically with the required admin rights.

14. Minor bug fixes and small improvements.

back to top of page


IBExpert 2014.04.07

1. IBExpert Day Edition

With IBExpert version 2014.04.07, IBExpert KG released the new IBExpert Day Edition: Use the IBExpert IDE whenever and wherever you need it. Ideal if you offer remote support to your customers, need to repair a database or just want to take a quick look at a Firebird/InterBase® database when you're out and about! This softsare model only includes the IBExpert IDE and each registration is only valid for one computer for one day (00:00 until 23:59 local time). IBExpert can be repeatedly started on the activated computer for the whole day (0:00 - 23:59) with just a single activation!

Prices and information.

2. Minor bug fixes and small improvements.

back to top of page


IBExpert 2014.03.16 & 2014.03.22

1. Export data

Export to JSON format implemented.

There are two specific options available:

  • Readable: if enabled, JSON data will be formatted to make it readable for human eyes.
  • Write BOM: if enabled, an UTF-8 BOM will be written at the beginning of the file.

2. Export data as SQL script

Added the possibility to export CHAR(n) CHARACTER SET OCTETS values in hexadecimal format (e.g. x'F62100CEA976'). The corresponding options can be found on the Options page.

3. Script Executive, IBEScript

The OUTPUT command now supports the OctetsAsHex option, which allows the extraction of CHAR(n) CHARACTER SET OCTETS values in hexadecimal format.

Example:

    OUTPUT 'D:\MyData\data.sql' AS INSERT OctetsAsHex;
    SELECT * FROM MYTABLE
    OUTPUT;

4. Support of CREATE/ALTER/RECREATE/DROP/COMMENT FUNCTION statements and version history for stored functions (Firebird 3)

5. Extract Metadata

Added the Extract values of CHAR(n) CHARACTER SET OCTETS fields as hex strings option.

6. Grant Manager

Support of stored functions (Firebird 3).

7. Autogrant privileges

Support of packages and functions (Firebird 3).

8. PSQL parser

Support of subroutines and functions (Firebird 3).

9. SQL Editor

  • Now shows the explain plan if possible (Firebird 3).
  • Support of version history for functions (Firebird 3).

10. Trace and Audit service

  • Support of the log_function_start/log_function_finish options (Firebird 3).

11. Data frame

  • INSERT ... RETURNING ... is now supported (if possible) when inserting new records.
  • The Functions editor allows creation and editing of stored functions when working with Firebird 3 databases.

12. IBEBlock

  • SELECT ... EXPORT AS and ibec_ds_Export functions now support the export to JSON format.

Example 1:

    select * from "Customer"
      export as json into 'D:\MyData\customer.json'
      options 'DateTimeFormat="dd-mm-yyy hh:nn:ss";
               DateFormat="dd-mm-yyyy";
               TimeFormat="hh:nn:ss";
               ExportTextBlobs; 
               Readable;
               WriteBOM';

Example 2:

    ExportOptions = 'DateTimeFormat="dd-mm-yyy hh:nn:ss";
               DateFormat="dd-mm-yyyy";
               TimeFormat="hh:nn:ss";
               ExportTextBlobs; 
               Readable;
               WriteBOM';

    select * from "Customer" order by "CustNo" as dataset MyDS;
    ibec_ds_Export(MyDS, __etJSON, 'D:\MyData\customer.json', ExportOptions);
    ibec_ds_Close(MyDS);


  • ibec_ExtractMetadata now supports the OctetsAsHex option which allows the extraction of CHAR(n) CHARACTER SET OCTETS values in hexadecimal format.
  • ibec_JsonToXML function implemented. It allows the conversion of JSON data to XML. Afterwards ibec_msxml_xxx functions can be used to process data.

Example:

    s = ibec_LoadFromFile('d:\temp\data.json');
    s = ibec_JsonToXML(s, 'Readable');
    ibec_SaveToFile('d:\temp\data.xml', s, __stfOverwrite);

13. Minor bug fixes and small improvements.

back to top of page


IBExpert 2014.01.01

1. SP/Trigger Debugger

Collect statistics mode implemented. In this mode the debugger collects some statistical information (prepare/execute time, rows affected, indexed/non-indexed reads) for each execution of SELECT/INSERT/UPDATE/DELETE/MERGE/EXECUTE statements and calculates total and average values.

2. Simple packages editor (Firebird 3.0) implemented

Currently it works only in edit mode (package should already exist in the database).

3. Trigger editor

  • Added support of DDL triggers (Firebird 3.0).

4. Script Executive / IBEScript.exe

  • Support of packages (Firebird 3.0).
  • Skipping of UTF8 BOM when executing script from file.

5. Database Online / Database Shutdown

  • Support of online/shutdown modes. Available for Firebird 2.5 and above.

6. Extract Metadata

  • Support of packages (Firebird 3.0).
  • Support of DDL triggers (Firebird 3.0).
  • Support of USAGE privileges for exceptions and generators (Firebird 3.0).

7. Grant Manager

  • Support of packages (Firebird 3.0).

8. Database Designer

  • Added the possibility to omit views when performing reverse engineering.

9. Trace and Audit Service

  • Added support of Firebird 3.0 config syntax.

10. Drag-n-Drop from the Database Explorer

  • Added templates for ibec_ShutdownDatabase and ibec_OnlineDatabase functions when dragging a database node into a code editor.

11. IBEBlock

  • ibec_GetStatementPlan and ibec_GetStatementExplainPlan functions implemented.

ibec_GetStatementPlan returns the standard IB/FB plan of the specified statement. ibec_GetStatementExplainPlan returns the extended plan which is available when working with the Firebird 3 server.

Syntax:

 function ibec_GetStatementPlan(Database : variant; 
                                           Statement : string; 
                                           RaiseError : boolean) : variant;
 function ibec_GetStatementExplainPlan(Database : variant; 
                                           Statement : string; 
                                           RaiseError : boolean) : variant;

The RaiseError parameter specifies how to handle possible errors when requesting a plan. If RaiseError is equal to TRUE and an error occurs, an error will be raised and both functions will return an error message as a result. Otherwise in case of error functions it just returns an empty string.

Example:

 execute ibeblock
 as
 begin
   db = ibec_GetDefaultConnection();
   sQuery = 'select * from rdb$fields where rdb$field_name = :field_name';
   sPlan = ibec_GetStatementPlan(db, sQuery, FALSE);
   sQuery = 'select * from rdb$relations where rdb$relation_name = ?';
   sPlan = ibec_GetStatementPlan(db, sQuery, FALSE);
 end


  • ibec_ExtractMetadata function: Added support of packages (Firebird 3.0). You should specify packages in the Options string:


 PACKAGES=ALL;

or

 PACKAGES=PACKAGE_1,PACKAGE_2,...;

or

 PACKAGES=NONE;


  • ibec_SetConnectionProp function: Added the possibility to disable the request of the number of affected rows after executing INSERT/UPDATE/DELETE/MERGE statements. This will improve performance when executing a lot of updates/inserts in a cycle for example.

Example:

 execute ibeblock
 as
 begin
   execute statement 'CREATE TABLE TEST_INSERT (ID  INTEGER)';
   commit;

   TimeStart = ibec_GetTickCount();
   for i = 1 to 10000 do
   begin
     insert into test_insert (id) values (:i);
   end;
   TimeEnd = ibec_GetTickCount();
   Time1 = TimeEnd - TimeStart;
   commit;

   execute statement 'delete from test_insert';
   commit;

   ibec_SetConnectionProp(ibec_GetDefaultConnection(), 'GETROWSAFFECTED', FALSE);
   TimeStart = ibec_GetTickCount();
   for i = 1 to 10000 do
   begin
     insert into test_insert (id) values (:i);
   end;
   TimeEnd = ibec_GetTickCount();
   Time2 = TimeEnd - TimeStart;
   commit;

   ibec_ShowMessage(Time1 || '       ' || Time2);
 end


  • ibec_OnlineDatabase/ibec_ShutdownDatabase: Added support of online/shutdown modes (Firebird 2.5 and above).


Possible modes for ibec_ShutdownDatabase: Multi, Single, Full. Default value is Multi.

Example:

 Res = ibec_ShutdownDatabase('myserver/3052:C:\Firebird\FB30.FDB',
                         'ClientLib="D:\Temp\fbclient.dll";
                          User=ADMIN; Password=masterkey;
                          Wait=10; DenyAttachment; Mode=Full');


Possible modes for ibec_OnlineDatabase: Normal, Multi, Single. Default value is Normal.

Example:

 Res = ibec_OnlineDatabase('myserver/3052:C:\Firebird\FB30.FDB',
                       'ClientLib="D:\Temp\fbclient.dll";
                        User=ADMIN; Password=masterkey;
                        Mode=Single');


12. Minor bug fixes and small improvements. back to top of page


IBExpert 2013.10.08

1. IBExpert Benchmark

  • Compare your server's performance to our IFS servers! This simple but effective tool gives you a reference Benchmark, based on our recommended IFS Servers. Our servers will show you a typical performance of 100 % for CPU and HDD Test. If your server shows for example 50%, it was much slower. Higher values indicate better performance.

Important: This benchmark gives you a value to compare several hardware or software configurations running the Firebird server. Changing the server to a more powerful hardware might improve the speed by 100 %, but optimizing your software and database operations can often improve the speed by more than 1000 %. Ask sales@ibexpert.biz for further support, for example our remote support or on-site workshops.

2. Code Editors, Parameters Tip

  • Support of server built-in functions. For built-in functions IBExpert shows a tip with the number/type of parameters and a short description of the function.

3. Code Formatter

  • Support for ROWS clause of SELECT statements implemented.

4. Trace and Audit services

Added the possibility to export trace data from the Grid View mode.

5. IBE Version History

  • Support of logging of the client address (IP address).

If the IBE$VERSION_HISTORY table already exists in your database you should add the following changes manually if you need to log the client address and the RDB$GET_CONTEXT function is available:

New column in the IBE$VERSION_HISTORY table:

     ALTER TABLE IBE$VERSION_HISTORY ADD IBE$VH_CLIENT_ADDRESS VARCHAR(32) CHARACTER 
     SET NONE;

Additional line of code in IBE$VERSION_HISTORY_BI trigger:

     NEW.IBE$VH_CLIENT_ADDRESS = RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS');      

6. Support of some Firebird 3 features implemented

You can now register your Firebird 3.0 database. The first stable features are already supported by IBExpert. More to follow soon!

  • Support of the USAGE privilege for generators and exceptions in the Grant Manager.
  • Support of the BOOLEAN data type.
  • Support of autoincrement fields that use internal generators (Table Editor).
  • Support of scroll cursors in SP/Trigger editors and debugger.

7. IBEBlock

The following functions have been implemented for working with FTP protocols:

  • ibec_ftp_OpenSession: creates an FTP session object with specified options.

Syntax

 function ibec_ftp_OpenSession(Options : string) : variant;

The ibec_ftp_OpenSession function creates an FTP session object with specified options. It doesn't perform any network operations, just allocates the necessary resources and initializes internal properties. You should use ibec_ftp_Connect functions to connect to the specified server.

Options

  • HostName: URL of FTP server
  • UserName: user name
  • Password: password
  • Port : port number to connect, default value is 25

UserName and Password can be omitted if the FTP server doesn't require them.

Example

    FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret'); 


  • ibec_ftp_CloseSession: destroys an FTP session object created with the ibec_ftp_OpenSession function.

Syntax

 function ibec_ftp_CloseSession(FTPSession : variant) : variant;

The ibec_ftp_CloseSession function destroys an FTP session object specified by the FTPSession variable and always returns NULL. The function doesn't perform any network operations, you should call the ibec_ftp_Disconnect functions first if there is an active connection.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      ...
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_Connect: establishes connection to the FTP server.

Syntax

 function ibec_ftp_Connect(FTPSession : variant) : boolean;

ibec_ftp_Connect establishes a connection to the FTP server with options defined by the ibec_ftp_OpenSession function and returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        ...
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end; 


  • ibec_ftp_Disconnect: performs a disconnection from the FTP server.

Syntax

 function ibec_ftp_Disconnect(FTPSession : variant) : boolean;

The ibec_ftp_Disconnect function performs a disconnection from the FTP server and returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        ...
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;  


  • ibec_ftp_ChangeDir: changes the working directory on the FTP server.

Syntax

    function ibec_ftp_ChangeDir(FTPSession : variant; DirName : string) : boolean;

The ibec_ftp_ChangeDir function changes the working directory on the FTP server. The DirName variable specifies the directory on the FTP server to change to. The function returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        ibec_ftp_ChangeDir(FTPSession, '\uploads');
        ...
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end; 


  • ibec_ftp_MakeDir: creates a directory on the FTP server.

Syntax

 function ibec_ftp_MakeDir(FTPSession : variant; DirName : string) : boolean;

ibec_ftp_MakeDir creates a new directory on the FTP server. The DirName variable specifies the name of the new directory. The function returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
          ibec_ftp_MakeDir(FTPSession, 'DataFiles');
        ...
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_RemoveDir: deletes a directory on the FTP server.

Syntax

 function ibec_ftp_RemoveDir(FTPSession : variant; DirName : string) : boolean;

ibec_ftp_RemoveDir deletes a specified directory on the FTP server. The DirName variable specifies the name of the directory to delete. The function returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        ibec_ftp_RemoveDir(FTPSession, 'DataFiles');
        ...
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_Rename: renames files/directories on the FTP server.

Syntax

 function ibec_ftp_Rename(FTPSession : variant; OldName : string; NewName : string) : boolean;

ibec_ftp_Rename renames the file or directory specified by the OldName variable. NewName specifies the the new file or directory name. The function returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
          ibec_ftp_Rename(FTPSession, 'db.fdb', 'old_db.fdb');
        ...
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_DeleteFile: deletes a file on the FTP server.

Syntax

    function ibec_ftp_DeleteFile(FTPSession : variant; FileName : string) : boolean;

ibec_ftp_DeleteFile deletes the file specified by the FileName variable. The function returns TRUE in case of success. Otherwise it returns FALSE.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
          ibec_ftp_DeleteFile(FTPSession, 'db.fdb');
        ...
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_FileSize: returns the size of a file in Bytes.

Syntax

 function ibec_ftp_FileSize(FTPSession : variant; FileName : string) : variant;

ibec_ftp_FileSize returns the size in bytes of a file specified by the FileName variable. This function returns NULL if the specified file doesn't exist or in case of any another error.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          FileSize = ibec_ftp_FileSize(FTPSession, 'db.fdb'); 
          if (FileSize is not null) then
            ibec_ShowMessage('File size is ' || FileSize || ' bytes');
        end;
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end; 


  • ibec_ftp_FileDate: returns the modification timestamp of a file.

Syntax

 function ibec_ftp_FileDate(FTPSession : variant; FileName : string) : variant;

ibec_ftp_FileDate returns the modification timestamp of a file specified by the FileName variable. This function returns NULL if the specified file doesn't exist or in case of any another error.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          FileTS = ibec_ftp_FileDate(FTPSession, 'db.fdb'); 
          if (FileTS is not null) then
            ibec_ShowMessage('File date/time ' || FileTS);
        end;
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end; 


  • ibec_ftp_GetFile: copies a file from the FTP server to the local computer.

Syntax

 function ibec_ftp_GetFile(FTPSession : variant; FTPFileName : string; LocalFileName : string) : boolean;

ibec_ftp_GetFile copies a file specified by the FTPFileName variable from the FTP server to the local computer. LocalFileName specifies the name to use on the local computer. If LocalFileName is specified as NULL or an empty string the content of the remote file will be saved into internal buffers of the FTP session object and can be retrieved later by using the ibec_ftp_GetProperty function.

ibec_ftp_GetFile returns TRUE in case of success. Otherwise it returns FALSE.

Example 1

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          ibec_ftp_GetFile(FTPSession, 'db.fdb', 'd:\mydata\db.fdb'); 
        end;
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;  

Example 2

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          if (ibec_ftp_GetFile(FTPSession, 'db.fdb', NULL)) then
          begin
            FileData = ibec_ftp_GetProperty(FTPSession, 'DATA');
            ibec_SaveToFile(FileData, 'd:\mydata\db.fdb', __stfOverWrite);
            ibec_ftp_SetProperty(FTPSession, 'DATA', ''); -- Just to clear the data buffer
          end; 
        end;
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_PutFile: copies a local file to the FTP server.

Syntax

 function ibec_ftp_PutFile(FTPSession : variant; LocalFileName : string; FTPFileName : string) : boolean;

ibec_ftp_PutFile copies a file specified by the LocalFileName variable from the local computer to the FTP server. If LocalFileName is specified as NULL or an empty string the content of the internal data buffer will be copied to the FTP server. FTPFileName specifies the name to use on the FTP server. ibec_ftp_PutFile returns TRUE in case of success. Otherwise it returns FALSE.

Example 1

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          ibec_ftp_PutFile(FTPSession, 'd:\mydata\db.fdb', 'db.fdb'); 
        end;
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;  

Example 2

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          FileData = ibec_LoadFromFile('d:\mydata\db.fdb');
          ibec_ftp_SetProperty(FTPSession, 'DATA', FileData);  
          ibec_ftp_PutFile(FTPSession, NULL, 'db.fdb');
          ibec_ftp_SetProperty(FTPSession, 'DATA', ''); -- Just to clear the data buffer
        end;
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;


  • ibec_ftp_LastResponse: returns the last response of the FTP server.

Syntax

 function ibec_ftp_LastResponse(FTPSession : variant) : string;

The ibec_ftp_LastResponse function returns a string containing last response of the FTP server.

Example

 FTPSession = ibec_ftp_OpenSession('HostName=myftpserver.com; UserName=me; 
                    Password=mysecret');
    try 
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (not ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
          ibec_ShowMessage(ibec_ftp_LastResponse(FTPSession));
        ibec_ftp_Disconnect(FTPSession);
      end;
    finally
      ibec_ftp_CloseSession(FTPSession); 
    end;  


  • ibec_ftp_GetProperty: gets the value of the specified property.

Syntax

 function ibec_ftp_GetProperty(FTPSession : variant; PropertyName : string) : variant;

ibec_ftp_GetProperty returns the value of the specified property of the FTP server object. PropertyName is a name of the property to read. If the property name is unknown the function will return NULL.

The following properties are available for reading:

  • Host (or HostName): returns the URL of the FTP server name
  • User (or UserName): returns the user name
  • Pass (or Password): returns the password
  • Port: returns the port number (as a string)
  • Data: returns the content of the internal data buffer
  • SessionLog: returns the session log data
  • LastResponse: returns the last response of the FTP server (same as ibec_ftp_LastResponse)


  • ibec_ftp_SetProperty: sets the value of the specified property.

Syntax

 function ibec_ftp_SetProperty(FTPSession : variant; PropertyName : string; Value : variant) : variant;

ibec_ftp_SetProperty sets the value of the specified property of the FTP server object. PropertyName is the name of the property to read. ibec_ftp_PutFile returns TRUE in case of success. Otherwise it returns FALSE.

The following properties are available for writing:

  • Host (or HostName): sets the URL of the FTP server, meaningless after the connection has already been established.
  • User (or UserName): sets the user name, meaningless after the connection has already been established.
  • Pass (or Password): sets the password, meaningless after the connection has already been established.
  • Port: sets the port number, meaningless after the connection has already been established.
  • Data: sets the value of the internal data buffer.
  • SessionLog: sets the value of the internal session log variable. May be used to clear the log if necessary.

Example

 FTPSession = ibec_ftp_OpenSession('');
    try 
      ibec_ftp_SetProperty(FTPSession, 'host', 'myftpserver.com');
      ibec_ftp_SetProperty(FTPSession, 'user', 'me');
      ibec_ftp_SetProperty(FTPSession, 'pass', 'mysecret');
      ibec_ftp_SetProperty(FTPSession, 'port', 25);
      if (ibec_ftp_Connect(FTPSession)) then
      begin
        if (ibec_ftp_ChangeDir(FTPSession, '\uploads')) then
        begin
          FileData = ibec_LoadFromFile('d:\mydata\db.fdb');
          ibec_ftp_SetProperty(FTPSession, 'DATA', FileData);  
          ibec_ftp_PutFile(FTPSession, NULL, 'db.fdb');
          ibec_ftp_SetProperty(FTPSession, 'DATA', ''); -- Just to clear the data buffer
        end;
        ibec_ftp_Disconnect(FTPSession);
        SessionLog = ibec_ftp_GetProperty(FTPSession, 'SessionLog');
        ibec_SaveToFile('D:\Temp\ftplog.txt', SessionLog, __stfOverwrite);
      end;
    finally

8. Minor bug fixes and small improvements

      ibec_ftp_CloseSession(FTPSession); 
    end; 

back to top of page


IBExpert 2013.06.26

1. SQL Editor

  • Added the possibility to delete all queries of the current query set simultaneously.

2. IBEBlock

ibec_FormatDateTime function implemented.

Syntax

 function ibec_FormatDateTime(Format: string; DateTime : variant): string;

ibec_FormatDateTime formats the timestamp, date or time value given by DateTime using the format given by Format.

Implemented support of OPEN/FETCH/CLOSE operators for SQL cursors.

3. Code Formatter

Added formatting rules for JOIN ... ON and MERGE ... ON expressions.

4. Export as INSERT

  • Export blob values as hex strings implemented. If this option is ON, blob values will be written directly into VALUES clause of INSERT statements as hex strings like the following:
    ... VALUES (..., X'0A66756E6374696F6E2024242873297B72', ...)

This representation is supported in Firebird 2.5. Unfortunately the length of DML/DDL statements in Firebird/InterBase® is limited to 64 kilobytes, so it is very easy to get statements with length > 64 Kb using this method, and they cannot be executed by the server.

5. Database Inside

  • In this version we introduce a new feature - Database Inside. It is available in the Tools menu in the full version of IBExpert.
  • Database Inside reads the database file directly, without a server. This allows extraction of data/metadata from corrupted databases even if it is impossible to do this using a normal connection to the database. The result depends on how heavily the database is corrupted.
  • Database Inside processes files in read-only mode so files remain unchanged.
  • The All pages page displays a list of database pages in natural order. Page types to be displayed here are customizable on the Options page. Please note that for large databases it is better to disable the display of the index tree, index root and blob data pages in order to optimize memory usage.
    • Suspicious pages (pages marked as allocated with unknown page type or/and wrong checksum) appear highlighted in red.
    • Double click on page or press Enter to open the data page in a separate window.
  • The Statistics page contains some useful statistics related to distribution of pages within the database file. Suspicious data (number of allocated pages with undefined/unknown page type and/or wrong checksum) appears highlighted in red.
  • The Header page contains the database header data.
  • The PIPs (pointer inventory pages) page contains list of all PIPs in the database file and information about the allocation of pages.
  • The TIPs (transaction inventory pages) page contains list of all TIPs in the database.
  • The Pointer pages page contains list of all pointer pages for each relation in the database.
  • On the Options page you can select the types of pages to be listed in "All pages" page.
  • The Extract Data/Metadata page allows you to extract data and/or metadata directly from the database file. Metadata/data can be extracted into a set of SQL script files or into a new database (a working server instance is necessary in this case).
    • You can select/unselect all data tables simultaneously from the context menu of the data tables list.
  • Current limitations:
    • only single-file databases are supported at the moment.
    • InterBase® databases with object names’ length > 31 chars are not supported yet.
    • the Database Inside feature has been tested with Firebird 1.5-2.5 databases created with Firebird 32-bit for Windows.

6. Minor bug fixes and small improvements

back to top of page


IBExpert 2013.02.15

1. Copy database object / Copy Table

  • Fixed problem with the incorrect copying of COMPUTED BY fields.

2. Database Statistics

  • Added the possibility to get statistics for specified tables only.
To get statistics for certain tables just drag them from the DB Explorer into the Database Statistics window.
  • An alternative way is to use the DB Explorer context menu, Get statistics for selected tables.

3. Code Editors

  • It’s now possible to format selected text using the Editor’s context menu. Note that IBExpert supports the formatting of PSQL blocks and separate DML statements only.

4. SQL Editor

  • Snapshot RO (snapshot read-only) and Read Committed RO (read committed read-only) transaction isolation levels added for quick selection.

5. Database Login form

  • Added the Prevent database/transaction triggers from firing checkbox.

This is equal to the isc_dpb_no_db_triggers option in additional connection parameters.

6. Backup/Restore Database

  • Added the Prevent database/transaction triggers from firing option.

7. IBEBlock

  • ibec_BackupDatabase/ibec_RestoreDatabase: The NoDBTriggers option has been implemented. This prevents database/transaction triggers from firing during a backup/restore.
  • Improved handling of Int64 (bigint) values, and some critical errors fixed.

8. Minor bug fixes and improvements.

back to top of page


IBExpert 2012.12.16

1. Fixed the problem causing a slowdown while scrolling/selecting text in code editors and scrolling data in the data grids.

2. Code Formatter

  • Added support of extended syntax of the [FOR] EXECUTE STATEMENT statement (ON EXTERNAL ...).

3. Autogrant feature

  • For SELECT statements with a WITH LOCK clause IBExpert now grants an UPDATE privilege on the affected table.

4. Dependencies Frame

  • Now it is possible to recompile all/selected procedures/triggers listed in the dependencies tree directly from its context menu.

5. Minor bug fixes and improvements.

back to top of page


IBExpert 2012.11.15

1. SQL Assistant

The Description page has been added to display and edit the database description which is stored in RDB$DATABASE.RDB$DESCRIPTION.

2. HTML Documentation

The database description will be included into the documentation if the Include descriptions... option is enabled.

3. Code Formatter

Fixed the problem with incorrect formatting of the WITH clause within INSERT and MERGE statements.

4. Database Designer

[Ctrl] + DblClick on a table or view will open the Table/View Editor for the corresponding table/view in the active database.

After dropping tables dragged from the Database Explorer, possible references (foreign keys) will be analyzed and added into the database diagram after confirmation.

5. Index Editor, Dependencies Viewer, Table Editor / Indices Page

Added support of index dependencies.

6. Script Executive

Added support for Before/After metadata change events. Execution of DDL statements will fire before and after metadata event blocks if they are assigned and the Use current connection option is ON.

Options page: Fire event blocks option added, which affects only the current instance of the Script Executive.

7. Options / Environment Options / SQL Script

Added the Fire event blocks option.

8. Import Data

Implemented the missing functionality for import data from text files with fixed column widths.

9. Database Restore

Now IBExpert analyzes and retrieves error messages from the restore log even if the Verbose option is off. If errors are detected they will be placed into the end of the log and the user will be warned about possible problems.

10. Login Dialog

Added the Show password checkbox.

11. IBEBlock

  • FixedWidths option added for the ibec_ImportData function.

Example:

    execute ibeblock
    as
    begin
      ...
      sMappings = 'Field1=1,26;' +
                  'Field2=27,26;' +
                  'Field3=53,45';

      Res = ibec_ImportData(DB, 'MYTABLE', __impText,
                            'D:\Import\country_fixed_colnames.txt', '',
                            'RowFirst=1; RowLast=255555;
                            TrimStrings;
                            FixedWidths;', :sMappings, cbb);
      ...
    end

Please note that the Mappings parameter is mandatory if you import data from a text file with fixed column widths. The syntax of each item in the Mappings string is:

 <source_field_name>=<start_position>,<length>

IBExpert automatically produces an IBEBlock for data import directly in the Import Data window (Block page) so you can always get it there.

  • The performance of the ibec_StringReplace function has been greatly improved and now it is about 10 times faster than before.
  • ibec_PosEx function implemented.

Syntax:

    function ibec_PosEx(Substr : string; S : string; StartPos : integer) : integer;

The only difference between the ibec_Pos and ibec_PosEx functions is the StartPos parameter which defines the starting position for scanning.

12. Other minor bug fixes and small improvements.

back to top of page


IBExpert 2012.09.02

1. Database Explorer

Highlighting of the database folder containing the active database has been implemented. The highlighting color is customizable in Options / Environment options / DB Explorer (Database folder containing active DB).

2. C/Pascal/Basic/JS scripts

Class TdxPageControl not found error fixed.

3. Copy Object, Copy Table

Added additional options which allow data to be copied into an existing table and the alteration of generator values.

4. A few other minor bug fixes and improvements.

back to top of page


IBExpert 2012.08.19

1. Trace and Audit Service

  • Support implemented for the log_sweep option (Firebird 2.5.2).
  • Source/Details window implemented. In Grid mode this allows you to view the source and details of each trace record.

2. Code Formatter

  • CRLF after UPDATE and Indent before table name options added for the UPDATE statement.

3. Event Blocks

  • In this version we introduce the Event Blocks feature which allows you to process certain events within IBExpert.
  • The following events are currently available for processing:
    • After IBExpert starts event
    • Before IBExpert stops event
    • Before connect to database event
    • After database connected event
    • Before disconnect from database event
    • After database disconnected event
    • Before metadata change event
    • After metadata changed event
  • Event Blocks are stored in the IBExpert User Database and are available as ordinary IBEBlocks on the Blocks page in the DB Explorer.
  • There are two ways to create an Event Block:
    • Create an ordinary IBEBlock and associate it with the event using the Event page in the Block Editor.
    • Use Create/Edit Event Block in the context menu of the Blocks tree. IBExpert will associate a new block automatically with the selected event.
  • There is a template/example of an Event Block available on the Event page in the Block editor. It lists the actual block input parameters and can also contain some code which illustrates possible actions you wish to perform when processing events.
  • Event blocks start to work straight after you save them - take this into account.
  • The Debug when fires option allows you to start the Block Debugger when the associated event fires. This option takes effect immediately after you turn it on but is only effective during the current session of IBExpert.
  • If you need to process specific events within IBExpert let us know about what you want to process and what results you expect.

4. Default blocks and language files

  • In this version we have updated all default blocks and most of the language files.

5. Minor bug fixes and small improvements.

back to top of page
--------

IBExpert 2012.05.19

Bugfix release

  • Several small bugs are removed.


IBExpert 2012.05.10

1. Code Formatter

  • Implemented formatting of IN AUTONOMOUS TRANSACTION statement.
  • There is a new option for SELECT and UPDATE statements, Line feed before column list delimiter, which allows you to format them as below:
   SELECT Customer
        , Contact_First
        , Contact_Last
        , Address_Line1
          ...

   UPDATE Help_Items
     SET Item_Parent_Id = :Varpitem_Parent_Id
       , Item_Title = :Varpitem_Title
       , Item_Order = :Varpitem_Order
       , Item_Data = :Varpitem_Data
         ...

2. Import Data

  • Trim string values if they are too long option added (General Options tab). If this option is enabled, IBExpert will silently truncate strings if they exceed the target field length.

3. Code Editors / Code Insight / Code Parameters Hint

  • For stored procedures the parameters’ hint now contains a description of the current input parameter. If there is no description specified for the current parameter – a description of the procedure itself will be displayed, if it exists.
  • For user-defined functions the parameters’ hint displays a UDF description, if it exists.
  • For the VALUES part of INSERT statements the parameters' hint displays a description of the current field or table description.
  • The following options are available under Options / Editor Options / Code Insight allowing you to customize the behavior of the parameters tip:
    • Show current parameter/field description.
    • Show parent object description if there is no description for current parameter/field.
    • Maximum number of description lines to show.

4. Code Editors

  • Quick Comment feature implemented. Using the [Ctrl] + [/] (Ctrl + Slash) shortcut you can quickly comment/uncomment the current line of code or selected block using the single line comment style (-- at the beginning of the line).

5. Search Metadata

  • Fixed the problem with searching non-ASCII text when using UTF8 connection charset.

6. IBEBlock

  • ibec_ImportData: Support of TrimStrings option added.
  • ibec_Decode function implemented. The ibec_Decode function has the functionality of an IF...THEN...ELSE statement.

Syntax:

  function ibec_Decode(Expression : variant; Search : variant; Result : variant; 
                       [Search : variant; Result : variant]... [; Default : variant]) : variant;
  • Expression is the value to compare.
  • Search is the value that is compared against Expression.
  • Result is the value returned, if Expression is equal to Search.
  • Default is optional. If no matches are found, the ibec_Decode will return Default. If Default is omitted, then the ibec_Decode function will return NULL (if no matches are found).

Example:

  CityName = ibec_Decode(CityCode, 1, 'Berlin', 2, 'Rome', 3, 'Bangkok', 'Unknown'); 
  • The following functions have been implemented for reading/writing from/to a file stream:
function ibec_fs_ReadByte(FileHandle : variant) : integer;
function ibec_fs_WriteByte(FileHandle : variant; Value : integer) : integer;
function ibec_fs_ReadWord(FileHandle : variant) : integer;
function ibec_fs_WriteWord(FileHandle : variant; Value : integer) : integer;
function ibec_fs_ReadDoubleWord(FileHandle : variant) : integer;
function ibec_fs_WriteDoubleWord(FileHandle : variant; Value : integer) : integer;
function ibec_fs_ReadInt32(FileHandle : variant) : integer;
function ibec_fs_WriteInt32(FileHandle : variant; Value : integer) : integer;
  • The ibec_fs_ReadByte function reads one byte from the file stream and returns an unsigned integer value (0..255).
  • The ibec_fs_ReadWord function reads two bytes from the file stream and returns an unsigned integer value (0..65535).
  • The ibec_fs_ReadDoubleWord function reads four bytes from the file stream and returns an unsigned integer value (0..4294967295).
  • The ibec_fs_ReadInt32 function reads four bytes from the file stream and returns a signed integer value (–2147483648..2147483647).
  • The ibec_fs_WriteByte function writes one byte to the file stream as a 8-bit unsigned integer.
  • The ibec_fs_WriteWord function writes two bytes to the file stream as a 16-bit unsigned integer.
  • The ibec_fs_WriteDoubleWord function writes four bytes to the file stream as a 32-bit unsigned integer.
  • The ibec_fs_WriteInt32 function writes four bytes to the file stream as a 32-bit signed integer.
All ibec_fs_WriteXXX functions return the number of bytes written to the file stream.
  • Below is an example of an IBEBlock which scans a database file and retrieves some useful information about the distribution of database pages. You can also find this block in the \Blocks\Samples\DB Pages Statistics directory.
   execute ibeblock (DBFileName varchar(1000) comment 'Path to database file')
   returns (
     PageType varchar(100) comment 'Page Type',
     PageCount integer comment 'Page Count',
     PagePercent numeric(15,2) comment 'Page %',
     PageMb numeric(15,2) comment 'Size, Mb')
   as
   begin
     TimeStart = ibec_GetTickCount();
     iPageIndex = 0;
     aPages = ibec_Array(0,0,0,0,0,0,0,0,0,0,0);
     aPageTypes = ibec_Array('Unused', 'Database Header', 'Page Inventory Page', 'Transaction Inventory Page', 'Pointer Page',
                             'Data Page', 'Index Root Page', 'Index Page', 'Blob Data Page', 'Generator Page', 'Write Ahead Log');

     aBitMasks = ibec_Array(1, 2, 4, 8, 16, 32, 64, 128);

     fs = ibec_fs_OpenFile(DBFileName, __fmOpenRead + __fmShareDenyNone);
     if (fs is null) then
       Exit;
     try
       ibec_fs_Seek(fs, 16, __soFromBeginning);

       iPageSize = ibec_fs_ReadWord(fs);
       iPageSizeSub20 = iPageSize - 20;

       ibec_fs_Seek(fs, iPageSize + 20, __soFromBeginning);
       sPIP = ibec_fs_ReadString(fs, iPageSizeSub20);
       NextPIPIndex = iPageSizeSub20 * 8 - 1;

       ibec_fs_Seek(fs, 0, __soFromBeginning);
       while (not ibec_fs_Eof(fs)) do
       begin
         if (ibec_mod(iPageIndex, 100) = 0) then
         begin
           TimeSpent = ibec_Div(ibec_GetTickCount() - TimeStart, 1000);
           iSpeed = ibec_IIF((iPageIndex = 0) or (TimeSpent = 0), 0, ((iPageSize / 1024) * iPageIndex) / 1024 / TimeSpent);
           ibec_Progress(iPageIndex || '  :  ' || TimeSpent || '  :  ' || iSpeed || ' Mb/s');
         end;
         iVal = ibec_fs_ReadByte(fs);

         iPIPBytePos = ibec_mod(ibec_div(iPageIndex, 8), iPageSizeSub20) + 1;
         iPIPBitMaskIdx = ibec_mod(iPageIndex, 8);
         if (iPIPBitMaskIdx = 0) then
           iPIPByte = ibec_Ord(ibec_Copy(sPIP, iPIPBytePos, 1));
         iPIPBitMask = aBitMasks[iPIPBitMaskIdx];
         IsUsed = (ibec_and(iPIPBitMask, iPIPByte) = 0);

         if (IsUsed) then
           aPages[iVal] = aPages[iVal] + 1;
         else
           aPages[0] = aPages[0] + 1;

         if (iPageIndex = NextPIPIndex) then
         begin
           ibec_fs_Seek(fs, 19, __soFromCurrent);
           sPIP = ibec_fs_ReadString(fs, iPageSizeSub20);
           NextPIPIndex = NextPIPIndex + iPageSizeSub20 * 8;
         end;

         iPageIndex = iPageIndex + 1;
         ibec_fs_Seek(fs, iPageIndex * iPageSize, __soFromBeginning);
       end;

       PageType = 'Total Pages';
       PageCount = iPageIndex;
       PagePercent = 100;
       PageMb = (PageCount * (iPageSize / 1024)) / 1024;
       suspend;

       foreach (aPages as PageCnt key Idx skip nulls) do
       begin
         PageType = aPageTypes[Idx];
         PageCount = PageCnt;
         PagePercent = (PageCnt/iPageIndex) * 100;
         PageMb = (PageCount * (iPageSize / 1024)) / 1024;
         suspend;
       end
     finally
       ibec_fs_CloseFile(fs);
     end
   end 

7. A lot of minor bug fixes and small improvements.

back to top of page


IBExpert 2012.02.21

1. Import Data

  • Fixed the problem with importing Boolean values from DBF files.
  • Added the possibility to convert Boolean values to smallint values when importing data into a new table. When there are Boolean columns in the source record set, the Convert Boolean values to integers checkbox will be visible on the Columns/Mappings page.
  • Generate simple column names feature implemented. It is available in the column mappings list context menu and generates simple column names like COL1, COL2, ..., COLN for the target table.

2. Export Data to Script

  • Fixed the problem writing blob values into an existing lob-file in append mode.
  • Added the Add DELETE FROM <table> statement option.

3. Dependencies Frame

  • Field names are now taken into account when filtering the Dependencies tree.

4. Data View | Classic Form View

  • Fixed the problem with showing/editing UTF8 data in memo fields.

5. Code Formatting

  • Formatting of the IN function implemented.

6. User Manager

  • Active users list now retrieved from MON$ATTACHMENTS if possible.

7. Trace and Audit, Grid View

  • Now it is possible to use the Blob Viewer in Grid View mode for viewing data of Process name, Statement text, Statement plan, Trigger event, and Procedure name columns.

8. Procedure and Trigger Editors, Parameters Grid

  • Fixed the problem with the editing of parameter descriptions in UTF8.

9. To-do List

  • Added the possibility to duplicate a To-do item. It is available in the to-do list context menu.

10. Script Executive

  • Fixed the problem of positioning to error, when only a selected part of the script is executed.

11. Extract Metadata

  • Always include COLLATE option implemented.

12. Search in Metadata

  • Do not search in comments option implemented. This prevents searches in any comments for a specified string.

13. IBEBlock

  • ibec_SaveToFile and ibec_fs_xxx functions now support files larger than 2 GB.
  • The following functions now support Unicode (UTF8) file names:
      ibec_fs_OpenFile
      ibec_SaveToFile
      ibec_LoadFromFile
      ibec_FileSize
      ibec_FileDateTime
      ibec_SetFileDateTime
      ibec_FileAttr
      ibec_SetFileAttr
      ibec_CopyFile
      ibec_RenameFile
      ibec_MoveFile
      ibec_GetFiles
      ibec_ForceDirectories
      ibec_md5File

You still can use ANSI names; the necessary checks and conversion are performed automatically.

  • ibec_GetFiles function can now return a list of files/directories in UTF8. Just specify the __gfUTF8 option:
 ibec_GetFiles(Dirs, 'D:\Pictures\', '*.*', __gfSort + __gfDirectories + __gfFullName + __gfUTF8);

Mask and Path parameters can be also specified in UTF8. The necessary checks and conversion are performed automatically.

  • ibec_md5 and ibec_md5File functions implemented.

Syntax:

 function ibec_md5 (Value : string) : string;
 function ibec_md5File (FileName : string) : string;

Functions return md5 sum for the specified value/file.

  • ibec_ExtractMetadata: IncludeCollate option added.

14. A lot of minor bug fixes and small improvements.

back to top of page


IBExpert 2011.12.11

1. IBExpert Named User License

Some changes were required for the new IBExpert Named User License?.

2. Registered VAR and Site License holders

Important: if you have a valid VAR or Site license, please contact register@ibexpert.biz for new license file.

3. Some small bug fixes and minor improvements.

back to top of page


IBExpert 2011.12.01

1. IBExpert storage

Since this version IBExpert uses the Firebird database and Firebird Embedded 2.5 to store IBExpert data (registered databases, query histories etc.) by default.

In previous versions by default IBExpert stored this data in the IBExpert.stg file and the user was able to change this manually in Options / Environment Options / User Database.

Working with IBExpert.stg is still possible (for example, if you disable the User Database manually) but you will get a warning every time you start IBExpert, and we will not support this method in the future.

2. The page control component was replaced with a new one.

You can customize its look under Options / Visual Options / Page Control. If you're working with IBExpert in a terminal session it is a good idea to choose Terminal style to avoid painting slowdown.

3. Import Data:

  • Added the possibility to import data into updatable views.

4. Blob Viewer

  • Added blob size information.

5. Options / Object Editor Options / Table Editor

  • The Use domain description as a description of a new domain-based field option was added. By default, when you create a new domain-based field, IBExpert copies the domain description into the description of a new field. To disable this behavior just deactivate this option.

6. Code Formatting

  • Fixed the problem with incorrect formatting of the FULL JOIN clause.

7. Procedure Editor:

Added information about the procedure source length. You can disable this in Options / Object Editor Options / Procedure Editor, using the Always display procedure DDL size option.

8. Extract Metadata:

  • Fixed the occasional problem with extracting blobs when they are extracted in separate lob-files.

9. A lot of small bug fixes and minor improvements.

back to top of page


IBExpert 2011.09.05

1. Export Data

  • Fixed the problem with exporting big integer values into text formats.
  • Fixed the problem with exporting integer fields with no value (NULL) into CSV. Now they are exported as an empty string instead of 0 (zero) before.

2. Grant Manager

  • Added an indication for tables/views that have UPDATE/REFERENCE privileges on certain columns only. A gray ball means that there is at least one column with a granted privilege. A gray ball in the hand means that there is at least one column with a privilege granted with the grant option.

3. Performance Info

  • Added information about marks, expunges, backouts, purges.

4. SP/Block Debugger, Edit Variable Form

  • Added the possibility to load blob values from file.
  • Fixed the problem with displaying/editing of BIGINT values.

5. Export Data into SQL Script

  • Do not put linefeeds and extra spaces between statement parts option added. This allows you to avoid an additional formatting of INSERT and UPDATE OR INSERT statements.

6. Database Comparer

  • Database comparer now uses additional connect parameters if they are specified in the registration info of the databases to be compared.

7. Trigger Editor

  • Added the possibility to open the trigger table editor from the Trigger menu.

8. Database Monitoring

  • Restoring of active record after refresh implemented. IBExpert uses the very first field in the record set to remember the current position and restore it after reopening.

9. IBEBlock

  • Support of the WHERE clause for ibec_CompareTables function implemented. It can be used to restrict the record sets which will be compared.

Example:

 ibec_CompareTables(MasterDB, SubscriberDB, 'MYTABLE', 'MYTABLE', 
 'E:\CompRes.sql',
    'OmitUpdates; Where="WHERE RECORD_DATE > 
 '12-NOV-2005'"', cbb);

It is also possible to omit the WHERE keyword:

 Where="RECORD_DATE > '12-NOV-2005'" 

IBExpert will add it automatically.

You can also use the WhereClause as an optional name:

 WhereClause="RECORD_DATE > '12-NOV-2005'"
  • Added __gfDirectories option for ibec_GetFiles. Use this option to get the list of subdirectories instead of the files:
 DirCount =  ibec_getfiles(DirList, 'D:\MyData\', '*.*', __gfSort + __gfFullName + __gfDirectories);
  • ibec_FileAttr function implemented.

Syntax:

 function ibec_FileAttr(FileName : string) : variant;

ibec_FileAttr returns the attributes of the file as an integer value which represents a string of bits. In case of any error (when the specified file doesn't exist, for example) ibec_FileAttr returns NULL.

See example for ibec_SetFileAttr function.

  • ibec_SetFileAttr function implemented.

Syntax:

 function ibec_SetFileAttr(FileName : string; Attr : integer) : integer;

ibec_SetFileAttr sets the file attributes of the file specified by FileName to the value given by Attr.

The value of Attr is formed by combining the appropriate file attribute constants:

 Constant     Value     Description
 -----------------------------------------------
 __faReadOnly $00000001 Read-only files
 __faHidden   $00000002 Hidden files
 __faSysFile  $00000004 System files
 __faVolumeID $00000008 Volume ID files
 __faDirectory$00000010 Directory files
 __faArchive  $00000020 Archive files
 __faAnyFile  $0000003F Any file

ibec_SetFileAttr returns zero if the function was successful. Otherwise the return value is a Windows error code.

Example:

 FileAttr = ibec_FileAttr(TargetFileName);
 if (ibec_and(OldFileAttr, __faReadOnly) = __faReadOnly) then
   ibec_SetFileAttr(TargetFileName, ibec_xor(OldFileAttr, 
 __faReadOnly));
  • ibec_RenameFile function implemented.

Syntax:

 function ibec_RenameFile(OldName : string; NewName : string) : Boolean;

ibec_RenameFile attempts to change the name of the file specified by OldFile to NewFile.

If the operation succeeds, RenameFile returns True. If it cannot rename the file (for example, if a file called NewName already exists), it returns False.

  • ibec_not, ibec_and, ibec_or, ibec_xor functions implemented.

Syntax:

 function ibec_not(Operand : integer) : integer;
 function ibec_and(Operand1, Operand2 : integer) : integer;
 function ibec_or(Operand1, Operand2 : integer) : integer;
 function ibec_xor(Operand1, Operand2 : integer) : integer;

The functions above perform bitwise manipulation on integer operands. For example, if the value stored in X (in binary) is 001101 and the value stored in Y is 100001, the statement

 Z = ibec_or(X, Y);

assigns the value 101101 to Z.

10. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2011.06.13

1. Database Designer

  • Implemented full support of UTF8. Internal representation of string values has been changed from ANSI to UTF8 (except exceptions’ texts which are stored AS IS according to their character set in Firebird/InterBase® databases - OCTETS).
  • Conversion of existing model files will be performed automatically the first time they are opened in the Database Designer.

2. Data Export

  • Added the possibility to export data into clipboard in HTML format (CF_HTML).
  • Fixed some problems with exporting bigint values into XLS files.

3. Data Import

  • Added Convert strings from ANSI to UTF8 option.
This option is visible and will be set ON automatically when the target database needs data in UTF8 (i.e. the connection charset is UTF8 or UNICODE_FSS).

4. Copy Database Object / Copy Table

  • Added the possibility to copy foreign keys (if the referenced tables exist).

5. SQL Editor, Query Manager

  • Added the possibility to save queries/sets into XML files and load them accordingly. It is possible to save several queries/sets at the same time. Use the Query Manager context menu to save/load queries and query sets.
  • Added the possibility to delete several query sets at the same time.

6. Select Database Object form [Ctrl + Shift + F12]

  • Added Description column.
  • Added the option to filter by object descriptions: just put '~' (tilde) at the beginning of the filter string.

7. Database Explorer

  • Added the possibility to filter objects by their description: just add '~' (tilde) at the beginning of the filter string.

8. Exception Editor

  • Implemented support of UTF8 for descriptions and the DDL tab.

9. Options / Environment Options / Confirmations

  • Added Confirm closing of all windows option.

10. Services / Database Monitoring

  • Added Commit transaction when refreshed option.
    If this option is OFF (default) IBExpert executes the monitoring query in the same transaction when a user clicks the Refresh button or an automatic refresh is performed.
    If this option is ON – the current transaction will be committed and a new one will be started immediately.

11. Table Data Comparer

  • If the target database ODS version is equal to or greater than 11.1 string values with the character set OCTETS will be presented in the result script in hex representation (e.g. x'7D81AE05CB').
  • Fixed the problem with occasionally corrupted script files after comparing more than one table with different blobs.

12. Script Executive, IBEScript

  • Added support of the IBECurrentScriptPath environment variable.
    This variable is initialized internally before executing the script, and its value represents a path to the current script file (if the script is loaded/executed from a file).
    Typically you can use this variable in INPUT, SET BLOBFILE and SET PARAMFILE directives to specify where IBExpert/IBEScript should search for required files.

Example:

 INPUT 'Inputs\data.sql';
 ...
 SET BLOBFILE 'Data\blobs.lob';

13. IBEBlock

  • ConvertToUTF8 option implemented for ibec_ds_Export and SELECT ... AS EXPORT, when exporting data into HTML format.
  • AnsiToUTF8 option implemented for ibec_ImportData. If this option is specified, string values will be converted to UTF8 before being inserted into a database.

14. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2011.03.29

1. SQL Editor

  • Added the possibility to share SQL Editor queries between registered databases - Common queries. IBExpert makes these queries available from all registered databases.
  • The Find query tab allows you to search for queries in Histories and sets of the SQL Editor queries of any registered database. Also it is possible to perform a search in IBEBlocks and Firebird blocks stored in the IBExpert User Database.
  • Both features are available only if usage of the IBExpert User Database (Options / Environment options / User Database) is enabled.

2. Table Data Comparer

  • Fixed the occasionally occurring stream write error.

3. Database Restore

  • Added the option to register a database straight after a successful restore (Register database after restore checkbox in the bottom left-hand corner, only visible when Restore in new database is selected).

4. Table Editor / Script

  • Decode domains checkbox added.

5. Code Editors / Code Completion

  • Added the possibility to display a list of object names containing a specified string, instead of starting with that string. Just add the dollar sign to the beginning of an object name. For example, $tmp + [Ctrl + Space] will list all database objects (SQL keywords, etc.) containing tmp in the object name.
Alternatively you can use two asterisks to get the same result: *tmp* + [Ctrl + Space].

6. To-do List

  • Support of UTF8 implemented.

7. Database Explorer

  • Saving and restoring of the Database Explorer tree state (expanded folders, active node) between IBExpert sessions implemented.

8. Environment Options / Confirmations

  • Added an option to control what to do with an active transaction when closing a form. By default IBExpert requests for your choice for each active transaction when you close a form. Now you can change this behavior and choose Commit or Rollback as the default action.

9. SP/Trigger/Block Debugger

  • Improved VAR values editor.
  • Support of UTF8.

10. IBEBlock

  • The implementation of ibec_iif and ibec_Coalesce functions was optimized: the evaluation of input expressions stops as soon as the result of the entire expression becomes evident in left to right order of the evaluation.
  • ibec_GetDiskFreeSpace function implemented. This function retrieves information about the amount of space that is available on a disk volume.

Syntax:

 function ibec_GetDiskFreeSpace(DirectoryName : variant) : variant; 

DirectoryName is a directory on the disk. If this parameter is NULL or an empty string, the function uses the root of the current disk. ibec_GetDiskFreeSpace returns the total number of free bytes on a disk that are available to the user who is associated with the calling thread.

Example:

 execute ibeblock 
 as 
   begin 
     FreeSpace = ibec_GetDiskFreeSpace('C:\'); 
     ibec_ShowMessage('Total free space: ' || :FreeSpace || ' bytes'); 
   end; 
  • ibec_GetServerLog function implemented. This function retrieves a Firebird/InterBase® server log using the Services API (if available) and saves it into a specified file (or variable).

Syntax

 function ibec_GetServerLog(ConnectParams : string; FileName : variant) : variant; 

If FileName is specified as NULL or an empty string, the ibec_GetServerLog function returns the server log as the result. Otherwise it returns NULL.

Example

 execute ibeblock 
 as 
   begin 
     res = ibec_GetServerLog('ServerName=localHOST/3070; User=SYSDBA; Password=masterke; 
                              ClientLib="C:\Program Files\Firebird25\bin\fbclient.dll"', 
                              'W:\srvlog.txt'); 
   end 

11. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2011.01.11

1. Services / Trace and Audit:

  • Grid View feature implemented. It allows you to browse trace logs in a table mode.
  • Added the possibility to load and analyze the trace data from a file.
  • Added a context menu for trace session tabs.

2. Code Editors:

  • Performance of search and replace has increased considerably when working with long texts.

3. Database Explorer / Copy Data / Copy Procedure:

  • Added support for TYPE OF COLUMN, NOT NULL and default values (Firebird 2.5).

4. Export Data:

  • Export to XML spreadsheet implemented.
  • Fixed some problems with incorrect encoding of the document when exporting data into MS Excel files.

5. SQL Editor:

  • Support of [Ctrl + C], [Ctrl + X], [Ctrl + V] shortcuts for the Query Manager tree.

6. Grant Manager:

  • If there is an active SP/View/Trigger editor on the screen, the corresponding object will be automatically selected when the Grant Manager is started.

7. Data Grid / Context Menu / Reorder Grid Columns:

  • Added the possibility to toggle visibility of columns.

8. Import Data:

  • Added the option to autolink source and destination columns by their names.

9. User Manager:

  • Added the possibility to specify a role when connecting to the Service Manager.

10. Drag-n-drop database objects from the Database Explorer into code editors:

  • The following choices have been added:
 DECLARE VARIABLE ... TYPE OF COLUMN
 DECLARE VARIABLE ... TYPE OF <domain>
 DECLARE VARIABLE ... <domain>
 INSERT INTO ... SELECT

11. IBEBlock:

  • ibec_Coalesce function implemented.

Syntax:

 function ibec_Coalesce(Val1 : variant; Val2 : variant; [Val2 : variant; ...]) ; variant;

The ibec_Coalesce function is similar to the Firebird COALESCE functions. It takes two or more arguments and returns the value of the first non-NULL argument. If all the arguments evaluate to NULL, NULL is returned.

  • SELECT ... EXPORT AS now supports export into an XML spreadsheet.

Example:

 execute ibeblock
 as
 begin
   select * from rdb$relation_fields
   order by rdb$relation_name, rdb$field_position
   export as xmlspreadsheet into 'D:\rdb$relation_fields.xml'
   options 'ConvertToUTF8;
            DateTimeFormat="dd-mm-yyy hh:nn:ss";
            DateFormat="dd-mm-yyyy";
            TimeFormat="hh:nn:ss";
            CurrencyFormat="$0.00";
            IntegerFormat="0";
            FloatFormat="0.0000";
            ExportTextBlobs';

    ibec_ShellExecute('open', 'D:\rdb$relation_fields.xml', , , 0);
 end
  • ibec_ds_Export now supports the export of the dataset into an XML spreadsheet.

Example:

 execute ibeblock
 as
 begin
    ExportOptions = 'ConvertToUTF8;
                     DateTimeFormat="dd-mm-yyy hh:nn:ss";
                     DateFormat="dd-mm-yyyy";
                     TimeFormat="hh:nn:ss";
                     CurrencyFormat="$0.00";
                     IntegerFormat="0";
                     FloatFormat="0.0000";
                     ExportTextBlobs';

    try
      select * from rdb$relation_fields
      order by rdb$relation_name, rdb$field_position
      as dataset dsFields;

      ibec_ds_Export(dsFields, __etXMLSpreadSheet, 'D:\rdb$relation_fields.xml', ExportOptions);

      ibec_ShellExecute('open', 'D:\rdb$relation_fields.xml', , , 0);
    finally
      if (dsFields is not null) then
        ibec_ds_Close(dsFields);
    end;
 end
  • ibec_RestoreDatabase now supports FIX_FSS_DATA and FIX_FSS_METADATA options which are equal to the corresponding gbak keys.

Example:

 res = ibec_RestoreDatabase('D:\NEWBLOCKDEMO.FBK',
                            'localhost:D:\NEWBLOCKDEMO.FB2',
                            'ClientLib=C:\Program Files\Firebird\Bin\fbclient.dll;
                             password=masterkey; user=SYSDBA; OneAtATime; PageSize=8192;
                             fix_fss_data=WIN1251; fix_fss_metadata=WIN1251', null);

12. Database Comparer:

  • Fixed the problems with an incorrect result script when comparing temporary and persistent tables with the same name.

13. Script Editor:

  • Added the possibility to copy error messages to the clipboard.

14. A lot of minor bug fixes and small improvements.

back to top of page


IBExpert 2010.10.08

1. Services / Trace and Audit:

  • Added support of include/exclude filter for the services section.

2. Table/View/Trigger/Procedure editors:

  • Added the possibility to drop table/view/trigger/procedures directly from the object editor. To drop an object use the main object editor menu (usually the left button on the object editor toolbar).

3. Database Comparer:

  • Added the IBEBlock page which contains a block for comparing databases. This block is generated automatically using values of the properties and options specified.

4. SQL Editor:

  • Added direct access to the Code Formatting options.

5. Script Executive:

  • Added the Options page with the possibility to change Abort script on error and Rollback on abort options for the current instance of the Script Executive.

6. Export Data:

  • Added the possibility to perform conversion of text values to UTF8 when exporting data into XML files and UTF8 encoding is selected. Use the Encode text to UTF8 option only if your data is in ANSI.

7. Import Data:

  • Added the Convert strings from OEM to ANSI option.
  • Added the IBEBlock page which contains automatically generated IBEBlocks for data import.

8. Data Grid:

  • Now it is possible to edit Unicode data directly in the grid.

9. Options / Environment Options / SQL Editor:

  • Set of options added to control behavior of the SQL Editor’s Query Manager when a second, third etc. instance of the SQL Editor is started.

10. IBEBlock:

  • ibec_MoveFile function implemented.

The ibec_MoveFile function renames an existing file or a directory (including all its children).

Syntax:

 function ibec_MoveFile(ExistingFileName, NewFileName : string) : Boolean;

The ibec_MoveFile function will move (rename) either a file or a directory (including all its children) either in the same directory or across directories. The one caveat is that the ibec_MoveFile function will fail on directory moves when the destination is on a different volume.

If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.

  • ibec_url_DownloadToFile and ibec_url_DownloadToVar functions implemented.

Both functions are intended for downloading the content of a specified URL.

Syntax:

 function ibec_url_DownloadToFile(URL : string; FileName : string; Options : variant) : Boolean;

 function ibec_url_DownloadToVar(URL : string; var V : variant; Options : variant) : Boolean;

The Options parameter is not used yet (reserved for future use).

Both functions try to download the data from specified HTTP or FTP URL. If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.

The ibec_url_DownloadToFile function saves downloaded data in a file specified by the FileName parameter.

The ibec_url_DownloadToVar function saves downloaded data in a local variable file specified by V parameter.

Example:

    Res = ibec_url_DownloadToFile('https://www.ibexpert.biz/download/setup_trial.exe',
                                  'd:\downloads\ibexpert_trial.exe', '');
    if (Res) then
      ibec_ShowMessage('Downloaded successfully');
    ...
    MyVar = null;
    Res = ibec_DownloadToVar('https://www.ibexpert.com/download/setup_trial.exe',
                             MyVar, '');
    if (Res) then
      ibec_SaveToFile('d:\downloads\ibexpert_trial.exe', MyVar, 0);
  • ibec_mime_Encode, ibec_mime_EncodeNoCRLF and ibec_mime_Decode functions implemented. The ibec_mime_Encode/ibec_mime_EncodeNoCRLF functions are intended for encoding a string with MIME Base64. The ibec_mime_Decode function decodes Base64-encoded data.

Syntax:

 function ibec_mime_Encode(Str : string) : string;
 function ibec_mime_EncodeNoCRLF(Str : string) : string;
 function ibec_mime_Decode(Str : string) : string;

The only difference between ibec_mime_Encode and ibec_mime_EncodeNoCRLF is that the first one adds line breaks (CRLF) during Mime encoding as required by RFC 2045.

Example:

 ...
 s = 'My data';
 sBase64 = ibec_mime_Encode(s);
 ...
 s = ibec_mime_Decode(sBase64);
 ...
  • The following set of functions have been implemented to read data from XML files:
      ibec_msxml_Create
      ibec_msxml_Free
      ibec_msxml_Save
      ibec_msxml_Load
      ibec_msxml_LoadXML
      ibec_msxml_SelectNodes
      ibec_msxml_SelectSingleNode
      ibec_msxml_GetText
      ibec_msxml_GetTextUTF8
      ibec_msxml_GetAttribute

The following example illustrates how to use ibec_msxml_xxx functions to process XML data. Detailed descriptions of these functions will come soon.

    execute ibeblock
    as
    begin
      UserDB = ibec_GetUserDBConnection();
      if (UserDB is null) then
      begin
        ibec_ShowMessage('You have to use the IBExpert User Database.' + ibec_CRLF() +
                         '(Options | Environment Options | User Database)');
        Exit;
      end;

      ibec_UseConnection(UserDB);


      xmlfile = 'https://www.ibexpert.com/rus/ibedemoscripts.xml';
      --xmlfile = 'w:\ibedemoscripts.xml';
      xml = ibec_msxml_Create();
      try
        ibec_msxml_Load(xml, xmlfile);
        nodes = ibec_msxml_SelectNodes(xml, 'demoscripts/script');

        foreach (nodes as node skip nulls) do
        begin
          sid = ibec_msxml_GetAttribute(node, 'id');
          sorder = ibec_msxml_GetAttribute(node, 'order');
          stype = ibec_msxml_GetAttribute(node, 'type');
          sparent = ibec_msxml_GetAttribute(node, 'parentid');

          tempnode = ibec_msxml_SelectSingleNode(node, 'name');
          if (tempnode is not null) then
            sname = ibec_msxml_GetText(tempnode);

          tempnode = ibec_msxml_SelectSingleNode(node, 'description');
          if (tempnode is not null) then
            sdesc = ibec_msxml_GetText(tempnode);

          tempnode = ibec_msxml_SelectSingleNode(node, 'source');
          if (tempnode is not null) then
            ssource = ibec_mime_Decode(ibec_msxml_GetText(tempnode));

          if (exists(select id from ibescripts where id = :sid)) then
            update ibescripts
            set item_order = :sorder,
                item_type = :stype,
                item_parent_id = :sparent,
                item_name = :sname,
                item_description = :sdesc,
                item_source = :ssource
            where id = :sid;
          else
            insert into ibescripts (id, item_order, item_type, item_parent_id, item_name, item_description, item_source)
                        values (:sid, :sorder, :stype, :sparent, :sname, :sdesc, :ssource);
          commit;
        end

      finally
        ibec_msxml_Free(xml);
      end;
    end

11. Minor bug fixes and small improvements


IBExpert 2010.07.29

1. Data Frame, Form View:

  • Fixed the problem control has no parent window when browsing record sets with blob fields.

2. IBEBlock:

  • Memory leak eliminated when executing nested IBEBlocks using EXECUTE IBEBLOCK statement.
  • ibec_ExtractMetadata function: added ServerVersion, AddKeyword, RemoveKeyword options. All options are intended mostly for the control of the quoting of identifiers that match keywords.

Example of usage:

 ibec_ExtractMetadata(MyDB, 'D:\MyDB.sql', 'ServerVersion=FB21; AddKeyword=FIRST,SECOND,KEY; 
 RemoveKeyword=START,TIME; ...', cbb);

You can use the following server version identifiers with the ServerVersion option:

  • IB5x
  • IB61
  • IB65
  • IB70
  • IB71
  • IB75
  • IB2007
  • FB10
  • FB15
  • FB20
  • FB21
  • FB25
  • YA10
  • ibec_SetEnvironmentVariable function implemented.

ibec_SetEnvironmentVariable function is a wrapper for the Windows API SetEnvironmentVariable function which sets the value of an environment variable for the current process.

Syntax:

 function ibec_SetEnvironmentVariable(VarName : string; Value : string) : integer;

If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.

3. Dependencies Frame:

  • Apply block to selected objects item added to the context menu. This allows users to process selected objects using custom IBEBlocks.

4. Blob Viewer/Editor:

  • Added As IBExpert/Firebird Block tab with the possibility of integrated debugging. Currently only the debugging of IBEBlocks is supported.

5. Extract Metadata:

  • Support of a default database collation for Firebird 2.5 databases implemented.

6. Create Database:

  • Added Default collation field to specify default collation for Firebird 2.5 databases.

7. View Editor:

  • Fixed some problems with resolving the dependencies of a view when creating the Recreate Script.

8. IBEScript, SQL Scripts:

  • Added the possibility to use environment variables in INPUT, OUTPUT and SET BLOBFILE statements.

Example:

 execute ibeblock 
 as
 begin
 ibec_SetEnvironmentVariable('MyScriptDir', 'D:\Scripts\MyScripts');
 ibec_SetEnvironmentVariable('MyDataDir', 'D:\Data');
 ibec_SetEnvironmentVariable('MyBlobData', 'D:\Data\Blobs');
 end;

 SET BLOBFILE '\mytable.lob';

 OUTPUT '\mytable.sql';
 select * from mytable
 asinsert;
 COMMIT;

 INPUT '\ProcessData.sql';

9. Table/View Editor:

  • Added the possibility to drop a foreign key directly from the fields list, if it exists (from the context menu).
  • Support for the alteration of computed by expressions implemented (Firebird 2.5).

10. SP/Trigger Debugger:

  • Support of EXECUTE STATEMENT ... ON external connection implemented.

11. Minor bugfixes and improvements

back to top of page


IBExpert 2010.07.05

1. Import Data:

  • Added the possibility to select table names from the list of available tables when importing data from an MS Access database.
  • Fixed the problem with truncation of values when importing data from XLS-files.

2. SQL Editor:

  • The new Query Manager allows you to organize your queries in different query sets.
Note: This feature is only available if the IBExpert User Database (Options / Environment Options / User Database) is used as a main storage.

3. Create SUID procedures:

4. Copy object:

  • Fixed the problem with the processing of external tables (regular tables were created instead).

5. IBEBlock:

  • Support of UPDATE OR INSERT implemented.
  • ibec_CopyToClipboard function implemented.
Syntax:
function ibec_CopyToClipboard(StringToCopy : string; Encoding : integer) : Boolean;
ibec_CopyToClipboard puts a copy of the string specified by the StringToCopy parameter in the clipboard. The Encoding parameter specifies encoding of the StringToCopy and can be __seAnsi or __seUTF8.

6. Extract Metadata:

  • Fixed the problem with extracting stored procedure headers with TYPE OF <table>.<column> definitions when the referenced table has not yet been created.

7. Exceptions Editor:

  • Added the possibility to display exception messages as Unicode (UTF8).

8. Table Data Comparer; Database Comparer:

  • Both now use the connection role if specified.

9. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2010.03.23

1. Database Registration Info:

  • Added the option to poll a database with a simple query to keep the connection alive. Please refer to the Additional page: Database poll interval option. Set the poll interval to 0 (default) to disable polling.

2. Import Data:

3. IBEBlock:

* ibec_GetFiles function. Added the possibility to sort a list of files using the __gfSort option.

Example

 ibec_GetFiles(FilesLst, 'D:\MyData', '*.*', __gfFullName + __gfRecursiveSearch + __gfSort);

* ibec_CreateDatabase function implemented. ibec_CreateDatabase replaces the CREATE DATABASE command within IBEBlocks. CREATE DATABASE is still available for compatibility.

Syntax

 function ibec_CreateDatabase(DatabaseType : integer; DatabaseProps : string) : variant; 

ibec_Database attempts to create a new database using the specified properties and, if successful, returns a handle of the connection to the database just created. Otherwise it returns NULL and raises an exception.

Parameters

DatabaseTypeType of the database to be created. Currently only _ctFirebird/__ctDatabase is supported.
DatabasePropsList of the new database properties, delimited with semicolon. Following properties are available:
DBName=<path_to_a_database>A new database file specification; file naming conventions are platform-specific.
ClientLib=<path to client library>Client library file name; default: gds32.dll.
User=<user_name>User name.
Password=<password>Password.
PageSize=<page_size_value>Size, in bytes, for database pages.
page_size=<page_size_value>The same as PageSize.
DefaultCharset=<charset_name>The default character set for the new database.
lc_ctype=<charset_name>Same as DefaultCharset.
SQLDialect=<dialect_number>The SQL dialect for the new database, either 1, 2, or 3.
sql_dialect=<dialect_number>The same as SQLDialect.

Example

 execute ibeblock
 as
 begin 
   try
     MyDB = ibec_CreateDatabase(__ctFirebird, 'DBName="localhost:d:\my databases\nydb.fba";
                                ClientLib="C:\Program Files\Firebird\bin\fbclient.dll"; 
                                User=SYSDBA; Password=masterkey; PageSize=16384;
                                DefaultCharset=WIN1252; SQLDialect=3');
   except
     exit;
   end;

   ibec_UseConnection(MyDB);
   ...
 end;

* ibec_DropDatabase function implemented. ibec_DropDatabase replaces the DROP DATABASE command within IBEBlocks. DROP DATABASE is still available for compatibility.

Syntax

 function ibec_DropDatabase(DatabaseType : integer; DatabaseProps : variant) : variant;

ibec_Database attempts to drop a database using the specified properties or connection handle and returns 0 if successful. Otherwise it returns NULL and raises an exception.

Note: It is impossible to drop the default connection using ibec_DropDatabase, an exception will be raised.

Parameters

DatabaseTypeType of database to be dropped. Currently only __ctFirebird/__ctDatabase is supported.
DatabasePropsList of the database properties, delimited with semicolon. Alternatively you can use a connection handle created with the ibec_CreateConnection or the ibec_CreateDatabase functions. The following properties are available:
DBName=<path_to_a_database>A new database file specification; file naming conventions are platform-specific.
ClientLib=<path to client library>Client library file name. Default: gds32.dll.
User=<user_name>User name.
Password=<password>Password.

Example #1

 execute ibeblock
 as
 begin
  try
    Res = ibec_DropDatabase(__ctFirebird, 'DBName="localhost:d:\my databases\nydb.fba";
                           ClientLib="C:\Program Files\Firebird\bin\fbclient.dll"; 
                           User=SYSDBA; Password=masterkey');
    if (Res is not null) then
       ibec_ShowMessage('Database dropped successfully');
   except
   end;
 end;

Example #2

 execute ibeblock
 as
 begin
   MyConn = ibec_CreateConnection(__ctFirebird, 'DBName="localhost:d:\my databases\nydb.fba";
                                 ClientLib="C:\Program Files\Firebird\bin\fbclient.dll"; 
                                 User=SYSDBA; Password=masterkey');
   try
     Res = ibec_DropDatabase(__ctFirebird, MyConn);
     if (Res is not null) then
       ibec_ShowMessage('Database dropped successfully');
   except
   end;
 end;

* ibec_ImportData function implemented. This function returns the number of imported (inserted) records.

Syntax

 function ibec_ImportData(TargetConnection : variant; TargetTable : string; ImportType : integer; 
 SourceFile : string; SourceTable : string; 
                      Options : string; Mappings : string; CallbackBlock : string) : variant;

ibec_ImportData imports records from the specified source (SourceFile, SourceTable) into the target database (TargetConnection, TargetTable).

Parameters

TargetConnectionHandle of the target connection created with ibec_CreateConnection or ibec_CreateDatabase functions.
TargetTableName of the target table. The table must exist in the target database before importing data.
ImportTypeType of data source. Following data sources are currently supported:
__impTextPlain text files, comma-separated or fixed widths values.
__impClipboardWindows clipboard.
__impExcelMS Excel file.
__impLotus123Lotus 1-2-3 file.
__impQuattroProQuattro Pro file.
__impOpenOfficeOpenOffice spreadsheet.
__impParadoxParadox file.
__impDBasedBASE file.
__impAccessMS Access database.
__impAdvantageAdvantage table.
__impDBISAMDBISAM table.
__impClarionClarion table.
__impHTMLHTML file.
__impXMLXML file.
__impWABWindows Address Book.
__impVCalendarVCalendar file.
SourceFilePath to the source file. Provide an empty string when importing data from the Windows clipboard.
SourceTableName of the source table if necessary (import from MS Access database).
OptionsList of import options, delimited with a semicolon. The following options are currently supported:
RowFirst=<integer>Number of the first row to be imported. Row numbering starts from 1. The default value is 1.
RowLast=<integer>Number of the last row to be imported. By default all rows will be imported.
RowNames=<integer>Number of rows with field names. The default value is 0.
DateOrder=DMY|DYM|MDY|MYD|YDM|YMDOrder of date parts within a string representation of date values. By default the system defined order is used.
DateSeparator=<char>Date parts separator. By default the system defined separator will be used.
TimeSeparator=<char>Time parts separator. By default the system defined value will be used.
DecimalSeparator=<char>Decimal separator. By default the system defined value will be used.
ThousandSeparator=<char>Thousand separator. By default the system defined value will be used.
CSVDelimiter=TAB|SEMICOLON|COMMA|SPACE|<char>Delimiter for CSV-files. The default value is a semicolon (;).
RecordSeparator=CRLF|CR|LFRecords delimiter. The default value is CRLF.
CommitAfter=<integer>Number of records inserted before committing. The default value is 500.
MappingsSpecifies the column mappings for an import operation. Mappings string should contain a list of pairs <target_column>=<source_column>, delimited with a semicolon. It is possible to use a column name either a column index as <target_column> and <source_column>. If the Mappings options is not specified (is NULL or an empty string) each source column will be mapped to a target column by their index, i.e. the first source column will be mapped to the first target column, the second source column to the second target one, etc.
CallbackBlockCall back IBEBlock, which will be executed for every imported record.

Example #1

 execute ibeblock
 as
 begin
   MyDB = ibec_GetDefaultConnection();

    delete from test_import;
    commit;

   cbb = 'execute ibeblock (RecCount integer)
       as
       begin
         if (ibec_mod(RecCount, 100) = 0) then
         ibec_Progress(Records inserted:  || RecCount);
       end';

   res = ibec_ImportData(MyDB, 'TEST_IMPORT', __impText, 'D:\import\test_import.csv', '',
                        'RowLast=15000; RowFirst=1001;
                         CSVDelimiter=";"; DecimalSeparator=","; DateSeparator="-"; TimeSeparator=":";
                         DateOrder=DMY; CommitAfter=1000',
                         '',
                         cbb);
   if (res is not null) then
     ibec_ShowMessage(res || ' records imported successfully.');
 end; 

Example #2

 execute ibeblock
 as
 begin
   MyDB = ibec_GetDefaultConnection();

   res = ibec_ImportData(MyDB, 'TEST_IMPORT', __impAccess, 'D:\import\demo.mdb', 'CUSTOMER',
                         '',
                         'CUSTOMER_ID="Customer ID"; 2=3; 3=4',
                         '');
   if (res is not null) then
     ibec_ShowMessage(res || ' records imported successfully.');
 end; 

4. Minor bug fixes and small improvements

back to top of page


IBExpert 2010.01.06

1. Code Editors

  • Added the possibility to indent/unindent selected text blocks using the [Tab]/[Shift + Tab] keys. An alternative method is to use the [Ctrl + Shift + I] / [Ctrl + Shift + U] shortcuts.

2. SQL Editor

  • The possibility to lock queries against accidental alteration/deletion has been implemented. Note that the Delete all action will delete ALL queries including those locked!

3. Main menu: Services

  • Added support of Trace/audit services (Firebird 2.5).

4. IBEBlock

  • ibec_DirectoryExists function implemented.

Syntax

 function ibec_DirectoryExists(Name : string) : Boolean;

Call ibec_DirectoryExists to determine whether the directory specified by the Name parameter exists. If the directory exists, the function returns True. If the directory does not exist, the function returns False.

If a full path name is entered, ibec_DirectoryExists searches for the directory along the designated path. Otherwise, the Name parameter is interpreted as a relative path name from the current directory.

5. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2009.11.02

  1. Scripts
  2. Support of ini-files with default IBEScript parameters and global var values implemented
  3. Added possibility to store SQL scripts in the User Database
  4. Code Editors
  5. IBEBlock
  6. Database Monitoring
  7. IBExpert Script Executive, IBEScript
  8. Extract Metadata
  9. A lot of minor bug fixes and small improvements

1. Scripts

IBEScript

Added the possibility to specify global VAR values for IBEBlocks using the command line:

 -G<variable_name>=<value>. 

Use the ibec_GetGlobalVar function to get values of global variables inside IBEBlock scripts.

Example:

 IBEScript.exe MyScript.sql -GDBName="D:\My Data\db.fdb" -GDBUser=SYSDBA 
 -GDBPass=masterke -GDBClientLib="C:\Program Files\Firebird\bin\fbclient.dll"
 ...
 execute ibeblock
 as
 begin
    MyDBName = ibec_GetGlobalVar('DBName', ''); 
   MyDBUser = ibec_GetGlobalVar('DBUser', ''); 
   MyDBPass = ibec_GetGlobalVar('DBPass', ''); 
   MyDBClientLib = ibec_GetGlobalVar('DBClientLib', ''); 
   if ((MyDBName = '') or (MyDBUser = '') or 
       (MyDBPass = '') or (MyDBClientLib = ''))  
   then Exit;  
   MyDB = ibec_CreateConnection( 
          __ctFirebird, 
         'DBName=' + ibec_QuotedStr(MyDBName, '"') + 
         '; ClientLib=' + ibec_QuotedStr(MyDBClientLib, '"') + 
         '; User=' + MyDBUser + '; Password=' + MyDBPass' +  
         'Names=WIN1251; SqlDialect=3;'); 
   ...
 end;

It is also possible to specify global VAR values using INI files (see below).

2. Support of INI files with default IBEScript parameters and global VAR values implemented

By default (without the -I option specified) IBEScript.exe processes IBEScript.ini files immediately after starting in the following order:

1. IBEScript.ini in the IBEScript.exe directory, if it exists, 2. IBEScript.ini in the current directory, if it exists.

If only -I is specified without a file name, any INI-file will be ignored. If a file name is specified after -I (e.g. -I"C:\my files\myibescript.ini") ONLY this file will be processed if it exists.

Parameters specified in the command line will overwrite corresponding ones from an INI file.

Sample of an IBEScript INI file:

 ==== IBEScript.ini =====================
 [DefaultValues]
 WriteTimestamp=1
 AppendToExistingLog=1
 OnlyErrors=0
 ConnectString=LOCALHOST/3060:D:\FB2_DATA\IBE.FBA
 UserName=SYSDBA
 Password=masterkey
 Charset=WIN1251
 SQLDialect=3
 ClientLib=C:\Program Files\Firebird\bin\fbclient.dll
 EncryptOnly=0
 DecryptOnly=0

 [GlobalVars]
 CurrentYear=2009
 CurrentMonthName=October
 AnotherVar="some string with spaces"
 ========================================

3. Added possibility to store SQL scripts in the User Database

Scripts stored in the IBExpert User Database can be viewed and opened using the Scripts/Blocks page in the Database Explorer (this option is only available if the User Database is used as the main storage). Alternatively SQL scripts can be stored in the IBE$SCRIPTS table of registered databases (found under the Scripts node in a registered database's objects tree).

Users can create and store SQL scripts in their databases or in the User Database using the New script/block/webform menu item item in the database objects tree or the Scripts/Blocks tree context menu.

4. Code Editors

Added possibility to drag-n-drop scripts/blocks from a registered database's objects tree and from the Scripts/Blocks tree into code editors. The source of the dragged script/block will be inserted into a code editor in this case.

[Alt + X] hotkey has been implemented, which may be used to input Unicode characters. Type the hex code of a Unicode character and then press [Alt + X] to get a character. Press [Alt + X] again to turn the character back into its hex code.

Examples (| - caret position)

 56| --> Alt+X --> V --> Alt+X --> 56
 4e56|  --> Alt+X --> 乖 --> Alt+X --> 4E56

5. IBEBlock:

  • ibec_ExtractMetadata: added AlwaysQuoteIdents option.
When this option is specified all identifiers (except those in procedure/trigger bodies) will be quoted.
  • ibec_CompareMetadata: added IgnoreCharsets options.
When this option is specified character sets of domain/fields/parameters will be ignored during the comparison process.

6. Database Monitoring

Fixed the problem with cancelling statements when working with Firebird 2.x databases.

7. IBExpert Script Executive, IBEScript

When no password and/or user name are specified in the CONNECT or CREATE DATABASE statements a login dialog will appear.

Added the possibilty to change the connection character set (SET NAMES) and garbage collection option (SET GARBAGE_COLLECT) before the RECONNECT statement. Any SET commands mentioned which are followed by a RECONNECT statement will affect the new connection.

8. Extract Metadata

Added the Always quote identifiers option.

9. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2009.08.17

1. Code Editors

  • Fixed the problem with the handling of hieroglyphs, they are rendered and selected correctly now.

2. Database Explorer

  • Added possibility to quickly open a table/view editor on the Data page. There is a corresponding item - Show data - in the Database Explorer context menu. Default shortcut for this action is [F9].

3. SP/Trigger/Block Debugger

  • Support of UTF8/Unicode implemented.
  • Fast debug mode implemented. In this mode some statements such as simple assignments and Boolean expressions of IF/WHILE statements will be executed on the client side if possible (in the standard Careful mode a corresponding SELECT statement will be composed and executed on the server side).

Use the Fast mode, for example, if you need to repeatedly execute a loop, which contain statements that can be calculated on the client side, as this will greatly reduce the total execution time.

4. IBEBlock

  • ibec_AnsiStringToUTF8 implemented.

Syntax:

 function ibec_AnsiStringToUTF8(AnsiString : string) : string; 

ibec_AnsiStringToUTF8 performs a conversion of AnsiString to UTF8 using the current system ANSI code page.

  • ibec_UTF8ToAnsiString implemented.

Syntax:

 function ibec_UTF8ToAnsiString(UTF8String : string) : string; 

ibec_UTF8ToAnsiString performs a conversion of UTF8String to Ansistring.

  • ibec_ExecScript implemented.

Syntax:

 function ibec_ExecScript(Script : string) : variant;

Running a script to create interactive dialogs: there will be a separate newsletter with description and examples to follow.

5. Code Formatting

  • Added the possibility to align type definitions for input/output parameters and variables.
  • Added Start single line comments from the first column option.

This is useful for Firebird 1.0 users.

6. Extract Metadata

  • Added the possibility to drag objects from the object dependencies trees (the Dependencies page in the object editors) and the field dependencies list (found in the Field Dependencies window at the bottom of the Fields page in the table/view editors) into the Selected Objects tree.

7. SQL Assistant, Database Properties, Active Users page

  • Added an IP Address column for databases with MON$ATTACHMENTS table.

8. Dragging objects from the Database Explorer tree into the Code Editors

  • Added the possibility to format generated code.

9. Export Data

  • Added a Decimal separator option.

10. BLOB Viewer/Editor

  • Fixed the problem with the loading of XML files.

11. HTML Documentation

  • Support of UTF8 now implemented.

12. A lot of minor bug fixes and small improvements.

back to top of page


IBExpert 2009.06.15

1. Full Unicode support

Since this version the internal representation of all texts in the code editors is Windows Unicode (UTF-16LE, two bytes per character).

This allows you to use multilingual characters in your procedures, queries, database object descriptions etc., if you use the UTF8 character set when connecting to your database.

When you're working with a database using the UTF8 character set IBExpert performs automatic conversion from UTF8 to Windows Unicode (for example, when you open a stored procedure for editing) and backwards (when you compile a stored procedure). This applies to Firebird 2.1 and 2.5 databases. For other databases you will need to enable this behavior manually (if you really need this!) by flagging the Do NOT perform conversion from/to UTF8 checkbox in the Database Registration Info.

If you use ANSI character sets to work with your databases there are no changes to previous versions of IBExpert, except it is now possible to enter characters that are not presented in your default system locale. Such characters will be replaced by converting from Unicode to ANSI representation.

As a rule IBExpert knows when it must convert strings from Windows Unicode to UTF8 but sometimes it is necessary to specify the conversion type manually. First of all this affects the Script Executive. IBExpert tries to guess the charset which should be used, and there is Execute charset combo in the Script Executive toolbar that allows you to specify the necessary charset manually.

2. IBExpert color frames

This feature allows you to select an individual color frame for all editor windows in your database registration. It is possible, for example, to set a green frame on your developer database and a red one on your production database. This can help to avoid executing operations on the wrong database.

Simply select the desired color in the database registration dialog in Color Mark area.

back to top of page


IBExpert 2009.03.25

1. Code Formatter

  • In this release we introduce a first version of the Code Formatter.
    At present it is possible to format source of views, triggers and stored procedures - there are corresponding toolbar buttons in the View, Trigger and SP Editors. You also can customize code formatting rules in Main Menu / Options / Code Formatting Options.

2. User Manager

  • Added support of Trusted Authentication.

3. IBEScript.exe

  • Fixed problem with EXECUTE BLOCK statement which crashed the IBEScript.exe.

4. A lot of minor bug fixes and small improvements...

back to top of page


IBExpert 2009.01.17

1. Database Designer:

  • Added the possibility to generate COMMENT ON statements instead of DESCRIBE/UPDATE for object descriptions.
  • Option added to ignore IBExpert objects (IBE$xxx) when performing reverse engineering.

2. Procedure/Trigger Editor

  • Comment body now also comments DECLARE VARIABLE/CURSOR sections to remove dependencies from objects used in DECLARE CURSOR selects.

3. Metadata Reports

  • Added the option to print object DDLs in black and white.

4. Metadata Extract:

  • Fixed the problem with missing index descriptions.
  • RDB$ADMIN role will not be extracted anymore.

5. User Manager:

  • Roles Membership: added the possibility to display Windows users (when trusted authentication is used) and users which are missing in the security database but still presented in RDB$USER_PRIVILEGES.

6. SP/Trigger Debugger:

  • Fixed some problems with converting strings into date/time values when performing Trace Into.

7. Script Editor:

  • UPDATE OR INSERT statements are displayed in the Script Explorer now.

8. Options / Environment Options / Transactions:

  • Added the option to specify default transaction properties for scripts.

9. Export Data into Script:

  • Added the possibility to export data as UPDATE OR INSERT statements.

10. Object Editors, Dependencies page:

  • Added support of UPDATE OR INSERT and MERGE statements.

11. Input Parameters Form

  • Added the possibility to copy/paste parameter values to/from clipboard.

12. SP/Trigger/View Analyzer:

  • Added support of TYPE OF / TYPE OF COLUMN.

13. A lot of minor bug fixes and small improvements...

back to top of page


IBExpert 2008.11.18

1. Database Comparer:

  • Better support of Firebird 2.1 syntax
  • Added support of known Firebird 2.5 features: TYPE OF COLUMN, IN AUTONOMOUS TRANSACTION, extended syntax of EXECUTE STATEMENT.

2. Procedure Editor:

  • Added support of TYPE OF, NOT NULL, COLLATE when working in lazy mode.
  • Added support of parameter default values when executing procedure and requesting its input parameters.

3. PSQL parser:

   * Added support of known Firebird 2.5 features.

4. Create SUID procedures:

  • The SUID block was completely redesigned to give you better support of the TYPE OF feature and also the possibility of integrated debugging. IBExpert now only uses IBEBlock to generate SUID procedures. The old version of SUID blocks is also available for compatibility reasons.

5. Blob Viewer/Editor:

  • Added the possibility to display blob data as XML.

7. User Manager:

  • Fixed unexpected buffer value error when there are many users registered in the security database.

8. Script Editor, IBEScript:

  • Added support of ALTER VIEW, CREATE/ALTER/DROP USER (Firebird 2.5)

9. Database Monitoring:

  • Added standard monitor queries for Firebird 2.1-5 databases.

10. SP/Trigger debugger:

  • Added partial support of known Firebird 2.5 features.

11. View Editor:

  • Added support of ALTER VIEW (Firebird 2.5)

12. Extract Metadata:

  • Added support for CREATE OR ALTER VIEW (Firebird 2.5)

13. IBEBlock:

  • Better support of bigint values
  • ibec_ibe_PerformAction function implemented.

Syntax:

 function ibec_ibe_PerformAction(DatabaseID : variant; Action : string; Options : variant) : variant;

ibec_ibe_PerformAction performs an Action using the registered database specified as DatabaseID.

Currently the following actions are supported:

OpenScriptFile - opens a script file specified in the Options parameter for editing (using IBExpert's Script Editor). DatabaseID is ignored for this action and should usually be NULL.

usuallyOpenScriptusually - opens a script text specified in the usuallyOptionsusually parameter for editing (using IBExpert's Script Editor). DatabaseID is ignored for this action and should usually be NULL.

CloseAllWindows - if DatabaseID is NULL all IBExpert child windows will be closed. If DatabaseID is NOT NULL only windows associated with the specified database will be closed. The options parameter is ignored for this action.

Example:

     execute ibeblock
     as
     begin
       ibec_ibe_PerformAction(null, 'OpenScriptFile', 'D:\MyScripts\data.sql');

       s = 'DELETE FROM MYTABLE WHERE ID = 0; COMMIT';
       ibec_ibe_PerformAction(null, 'OpenScript', s);

       DBID = ibec_ibe_GetActiveDatabaseID();
       if (DBID is not null) then
         ibec_ibe_PerformAction(DBID, 'CloseAllWindows', '');
     end
  • ibec_ibe_GetActiveDatabaseID

Syntax:

 function ibec_ibe_GetActiveDatabaseID : variant;

ibec_ibe_GetActiveDatabaseID returns an identifier of the active (currently used within IBExpert) database. If there is no active database it will return NULL.

See example above.

  • ibec_ibe_EditDBObject function

Syntax:

 function ibec_ibe_EditDBObject(DatabaseID : variant; ObjectType : integer; ObjectName : string; Options : variant) : variant;

ibec_ibe_EditDBObject opens a specified database object for editing (starts a suitable object editor within IBExpert). DatabaseID is an identifier of the registered database that should be active.

ObjectType is a type of database object. Following ObjectTypes are available:

       __dboDomain
       __dboTable  
       __dboProcedure
       __dboGenerator
       __dboTrigger  
       __dboView     
       __dboFunction
       __dboException

ObjectName - name of the database object.

Options - reserved for future use.

Example:

     execute ibeblock
     as
     begin
       DBID = ibec_ibe_GetActiveDatabaseID();
       if (DBID is not null) then
       begin
         ibec_ibe_PerformAction(DBID, 'CloseAllWindows', '');
         ibec_ibe_EditDBObject(DBID, __dboTable, 'TABLE1', '');
         ibec_ibe_EditDBObject(DBID, __dboTable, 'TABLE2', '');
         ibec_ibe_EditDBObject(DBID, __dboProcedure, 'TABLE1_UPDATE', '');
         ibec_ibe_EditDBObject(DBID, __dboProcedure, 'TABLE2_UPDATE', '');
       end;
     end
  • All ibec_ibe_xxx functions work only within IBExpert and will be ignored when IBEBlock is executed with IBEScript.exe or IBEScript.dll.

14. A lot of minor bug fixes and small improvements...

back to top of page


IBExpert 2008.08.08

The new IBExpert version 2008.08.08 includes the new feature IBExpert Instance Manager? and many improvements and small bug fixes.

1. IBExpertInstanceManager

The IBExpertInstanceManager is a new module in HK-Software Control Center. It can be started using the IBExpert Services menu item, HK-Software Services Control Center. It allows you to install several instances of the Firebird server on one Windows machine using different ports. Additional functions allow monitoring and other useful options.

Step by step instructions:

  1. Be sure that there is already a Firebird Instance installed on the machine using the default Firebird installer.
  2. Install the new IBExpert version.
  3. Start the Services-HK Software Services Control Center.
  4. Select the IBExpertInstanceManager service.
  5. Right click on it and select Add task.
  6. For the newly added task select BaseService from the list of Firebird instances installed on your PC.
  7. Set the port number for the Firebird instance you are going to create. All other instance configuration settings will be generated automatically.
  8. Setup mail notification if needed.
  9. Setup validation parameters if needed. Validation is just a test connection to security.fdb of the new instance, using the instance's port number.
  10. Set the task's Active parameter to True.
  11. To rename the task, click on the task name with the [Ctrl] key pressed down.
  12. Run the service. When properly configured the running task should show runtime info on the first run.

The full documentation can be found here?.

That's it! Using multiple instances of the Firebird Server has different advantages, for example using different SYSDBA passwords, using multiple CPUs more effectively, using old and new Firebird version on one machine etc.

To distribute the IBExpertInstanceManager with your application, you need a Junior VAR License or a VAR License?.

2. IBEBlock Results form:

  • Added the possibility to sort data by clicking on a grid column caption.
  • Added the option to export data.

3. Table Data Comparer:

  • It is now possible to generate UPDATE OR INSERT instead of UPDATE/INSERT for Firebird 2.1 databases.

4. IBEBlock:

  • ibec_CompareTables function.

Here it is now possible to compare more than one table in a single operation. Just specify the list of necessary tables, delimited with a comma or semicolon, as MasterTable and SubscriberTable.

Example:

    ibec_CompareTables@@(DB1, DB2,'TABLE1, TABLE2, "Table3"',
                         'TABLE1, TABLE2, "Table3"',
                         'D:\Diff.sql', 'UpdateOrInsert', cbb);'
  • Added UpdateOrInsert option (UseUpdateOrInsert is valid too).

This allows you to generate UPDATE OR INSERT statements instead of UPDATE/INSERT for Firebird 2.1 databases. See example above.

  • ibec_ds_Sort function implemented.

Syntax:

 function ibec_ds_Sort(Dataset : variant; SortFields : string) : variant;

ibec_ds_Sort function sorts Dataset according to the specified SortFields.

Example:

    execute ibeblock
    as
    begin
      select * from rdb$relation_fields
      as dataset ds;
      try
        ibec_ds_Sort(ds, 'RDB$RELATION_NAME ASC, RDB$FIELD_POSITION ASC');
        ibec_ds_Sort(ds, 'RDB$RELATION_NAME, RDB$FIELD_POSITION');         
        ibec_ds_Sort(ds, '1, 2 DESC');       finally
        ibec_ds_Close(ds);
      end;
    end;
  • ibec_ds_Locate function implemented.

Syntax:

  function ibec_ds_Locate(Dataset : variant; KeyFields : string;    
                          KeyValues : array of variant; Options : integer) :  Boolean;    
ibec_ds_Locatesearches Dataset for a specified record and makes that record the active record.
KeyFieldsis a string containing a semicolon-delimited list of field names in which to search.
KeyValuesis a variant array containing the values to match in the key fields.

If KeyFields lists a single field, KeyValues specifies the value for that field on the desired record. To specify multiple search values, pass a variant array as KeyValues, or construct a variant array on the fly using the ibec_Array function.

Examples:

    ibec_ds_Locate('Company;Contact;Phone', ibec_Array('Sight Diver', 'P', '408-431-1000'), __loPartialKey);

or

    Keys[0] = 'Sight Diver';
    Keys[1] = 'P';
    Keys[2] = '408-431-1000';
    ibec_ds_Locate('Company;Contact;Phone', Keys, __loPartialKey);

Options is a set of flags that optionally specifies additional search latitude when searching on string fields. If Options contains the __loCaseInsensitive flag, then ibec_ds_Locate ignores case when matching fields. If Options contains the __loPartialKey flag, then ibec_ds_Locate allows partial-string matching on strings in KeyValues. If Options is 0 or NULL or if the KeyFields property does not include any string fields, Options is ignored.

This function returns True if a record is found that matches the specified criteria and the cursor repositioned to that record. Otherwise it returns False.

Example:

    execute ibeblock
    returns (FieldName varchar(100))
    as
    begin
      select * from rdb$relation_fields
      as dataset ds;
      try
        ibec_ds_Sort(ds, 'RDB$RELATION_NAME, RDB$FIELD_POSITION');
        res = ibec_ds_Locate(ds, 'RDB$RELATION_NAME', 'RDB$FIELDS', __loPartialKey);
        while (res) do
        begin
          FieldName = ibec_ds_GetField(ds, 'RDB$FIELD_NAME');
          FieldName = ibec_Trim(FieldName);
          suspend;
          ibec_ds_Next(ds);
          res = not ibec_ds_EOF(ds);
          if (res) then
          begin
            RelName = ibec_Trim(ibec_ds_GetField(ds, 'RDB$RELATION_NAME'));
            res = RelName = 'RDB$FIELDS';
          end;
        end;
      finally
        ibec_ds_Close(ds);
      end;
    end
  • ibec_ExecSQLScript function implemented.

Syntax:

    function ibec_ExecSQLScript(Connection : variant; SQLScript : string; Options : string; ProgressBlock : variant) : variant;

ibec_ExecSQLScript executes an SQL script from a variable or a file.

Connection is an active connection created with the ibec_CreateConnection function which will be used while executing a script. If Connection is not specified (NULL) the script must contain the CREATE DATABASE or the CONNECT statement, otherwise an exception will be raised.

SQLScriptscript text or name of script file.
Optionsadditional options. There are two additional options currently available: ServerVersion and StopOnError.
ProgressBlockan IBEBlock which will be executed for every progress message generated during script execution.

ibec_ExecSQLScript returns NULL if there were no errors while executing a script. Otherwise it returns an error(s) message.

Example:

    execute ibeblock
    as
    begin
      cbb = 'execute ibeblock (BlockData variant)
             as
             begin
               sMessage = BlockData;
               if (sMessage is not null) then
                 ibec_Progress('SQL Script: ' + sMessage);
             end';

      db = ibec_CreateConnection(__ctFirebird, ...);
      try
        Scr = 'INSERT INTO MYTABLE (ID, DATA) VALUES (1, 'Bla-bla'); ' + 'INSERT INTO MYTABLE (ID, DATA) VALUES 
       (2, 'Bla-bla'); '  + 'COMMIT;';
        ibec_ExecSQLScript(db, Scr, 'ServerVersion=FB21; StopOnError=FALSE', cbb); ...
        ibec_ExecSQLScript(db, 'D:\Scripts\CheckData.sql', 'ServerVersion=FB21', null); finally
        ibec_CloseConnection(db);
      end
    end    
  • ibec_GetViewRecreateScript function implemented.

Syntax:

    function ibec_GetViewRecreateScript(Connection : variant; ViewName : string; 
    Options : string; ProgressBlock : variant) : string;

ibec_GetViewRecreateScript creates a Recreate script for a specified view(s) and returns it as a result.

Connectionis an active connection created with the ibec_CreateConnection function.
ViewNamelist of names of view(s), delimited with semicolon or comma, for which a Recreate script will be created.
Optionslist of options delimited with semicolon; possible options are:
GenerateCreatedetermines whether a CREATE DATABASE statement should be included at the beginning of the generated script.
GenerateConnectdetermines whether a CONNECT statement should be included at the beginning of the generated script.
IncludePassworddetermines whether the password should be included into the CREATE DATABASE or the CONNECT statement in the resulting SQL script.
SupressCommentsuse to supress comments in the resulting script.
ExtractDescriptionsdetermines whether database objects' descriptions should be included in the generated script. By default this option is enabled.
DescriptionsAsUpdatedetermines whether the raw UPDATE statement should be used for object descriptions instead of the IBExpert specific DESCRIBE statement.
UseCommentgenerates the COMMENT ON statement for object descriptions (Firebird 2.x).
DontUseSetTermdon't use SET TERM statements, all statements will be separated by semicolon only.
UseCreateOrAltergenerates CREATE OR ALTER instead of CREATE/ALTER where possible.
ProgressBlockan IBEBlock which will be executed for every progress message generated during script execution. May be NULL or empty.

Example:

    execute ibeblock
    as
    begin
      cbb = 'execute ibeblock (MsgData variant)
             as
             begin
               ibec_Progress(MsgData);
             end';
      ...
      RecreateScript = ibec_GetViewRecreateScript(mydb, 'VIEW_A; VIEW_B; VIEW_C',
          'GenerateConnect; IncludePassword; UseCreateOrAlter', cbb);
      Res = ibec_ExecSQLScript(null, RecreateScript, 'ServerVersion=FB21', cbb);
    end

5. DB Explorer context menu, Apply Block:

  • Added the possibility to recreate selected views based on IBEBlock and the ibec_GetViewRecreateScript function.

6. New installer

7. A lot of minor bug fixes and small improvements...

8. Forum for Firebird and IBExpert news: https://www.firebirdexperts.com


IBExpert 2008.05.03

The newest IBExpert version has a lot of improvements and bug fixes. The most important are:

  • improved support for Firebird 2.1
  • new IBEBlock functions for
    • creating reports
    • POP3 email access
    • SMTP support
    • and much more.

The command-line versions ibescript.exe and the DLL version ibescript.dll have been improved. The new customer version is available for download here: https://www.ibexpert.com/customer.

If you have already downloaded version 2008.05.03 and encounter a problem closing the Script Executive, please download the new bug-fixed version.

1. IBExpert websites completely redesigned:

We have changed almost all the IBExpert websites over the last weeks:

2. The Firebird forum for beginners and professionals: https://www.firebirdexperts.com

The forum is focused on Firebird-specific topics for developers. The main topics are Delphi, .NET, Java and PHP. If requested, we can also add new areas or language-specific boards. The forum runs on Windows 2003 Server, Apache™ web server, the current PHP version, phpBB 3.01, and Firebird 2.1. The installation is easier than most people think, especially since there is an integrated Apache™ and PHP version with Firebird support in the current IBExpert customer version.

3. Scripting language IBEBlock:

Reports are now available for batch creation. Some new IBEBlock commands are now available for executing reports created with IBExpert's Report Manager in command-line mode, for example with batch files. The monthly sales report, invoices or other reports can be designed in the Report Manager and executed with simple SQL statements. The result can be saved in the database as a pdf or other formats and sent by email. Further details can be found in our docmentation at https://ibexpert.net/ibe/index.php?n=Doc.IBEBlock.

back to top of page


IBExpert 2008.02.19

1. IBExpertWebForms now included in IBExpert Customer Version:

What is required for using IBExpertWebForms?

Since IBExpert version 2008.01.28 all IBExpert fully licensed versions, i.e. single, multiple, Site, Junior VAR and full VAR licenses, include our fully integrated IBExpertWebForms module.

If you have a customer version of IBExpert, you are allowed to use IBExpertWebForms on your registered computer. If you have a Site License, you can use IBExpertWebForms on any computer in your company. If you have a VAR or Junior VAR License, you are allowed to distribute IBExpertWebForms together with your applications to your customers.

With IBExpertWebForms you can create database-based web applications. Just place your VCL components in the integrated Form Designer, connect them with your tables or queries as a data source using the integrated object inspector, and create your events as stored procedures inside your Firebird or InterBase® database.

The result is handled by a PHP script, which is used by the Apache™ web server on Windows, Linux or any other operating system which supports Apache™, PHP and Firebird or InterBase®.

The main advantage: you do not need any know-how regarding JavaScript, HTML, Ajax, PHP, etc. to create your database web application. All operations are done inside your database and you just need to learn some very simple extensions and rules based on your existing Firebird and InterBase® knowledge. Start your database web development in just 10 minutes after reading this document!

https://www.ibexpert.com/download/IBExpertWebForms/IBEWebFormsFirstSteps.pdf

2. Database Explorer:

  • Drag 'n' drop of objects from the Database Explorer into the code editor.
Since this version it is possible to create your own sets of statements that will be composed when you drag 'n' drop object(s) from the Database Explorer into any code editor. This feature is based on IBEBlock; refer to the example below for more details.
  • Context Menu / Apply IBEBlock to selected object(s).
This feature is also based on the IBEBlock functionality and allows you to create your own set of code blocks to process selected object(s). Inplace debugging is available. See example below for more details.

3. Script language, OUTPUT statement:

  • AsUpdateOrInsert option added.

Example:

       OUTPUT 'C:MyScriptsdata.sql' ASUPDATEORINSERT;
    SELECT * FROM MYTABLE ORDER BY ID;
    OUTPUT;
    COMMIT;:

This produces a script containing UPDATE or INSERT statements.

4. Database Registration Info / Log Files:

Added the possibility to include a date part into log file names. This allows you to create daily/monthly logs automatically. The following substrings in a log file name will be replaced with a current date:

    =date=yyyy-mm-dd
    =date=yyyy-mm-dd%=<date format string>%

=date=yyyy-mm-dd is a short form of the date template and is equal to =date=yyyy-mm-dd%=yyyy-mm-dd%

Examples:

D:MyLogsTestDB=date=yyyy-mm-dd.sql - file name for a simple daily log.

D:MyLogsTestDB=date=yyyy-mm-dd%=mmmm of yyyyyyyy-mm-dd%=date=yyyy-mm-dd%=yyyy.mm.dd%.sql - a separate directory ('January 2008' etc.) will be created for each month.

5. Blob Viewer:

Added support for TIFF images.

6. ODBC Viewer:

Fixed the problem with exporting of memo-fields.

7. IBEBlock:

The following functions have been implemented:

  • ibec_GetRunDir - returns the path of the currently executing program. (IBExpert.exe or IBEScript.exe).

Syntax:

    function ibec_GetRunDir : string;   
  • ibec_GetUserDBConnection - returns pointer to the User Database (Options / Environment Options / User Database) if one is used. Otherwise this function returns NULL.

Syntax:

    function ibec_GetUserDBConnection : variant;
    Example:
        execute ibeblock
     as
     begin
       CRLF = ibec_CRLF();
       sTab = ibec_Chr(9);
       sLine = '==============================================';
            UserDB = ibec_GetUserDBConnection();
       if (UserDB is not null) then
       begin
         sMes = '';
              sHost = ibec_GetConnectionProp(UserDB, 'HostName');
         sFile = ibec_GetConnectionProp(UserDB, 'FileName');
         sServerVersion = ibec_GetConnectionProp(UserDB, 'ServerVersion');
         sDBSqlDialect = ibec_GetConnectionProp(UserDB, 'DBSqlDialect');
         sClientLib = ibec_GetConnectionProp(UserDB, 'ClientLib');
         sUser = ibec_GetConnectionProp(UserDB, 'UserName');
         sPass = ibec_GetConnectionProp(UserDB, 'Password');
         sNames = ibec_GetConnectionProp(UserDB, 'lc_ctype');
              iPageSize = ibec_GetConnectionProp(UserDB, 'PageSize');
         iSweep = ibec_GetConnectionProp(UserDB, 'SweepInterval');
         iODSMinorVersion = ibec_GetConnectionProp(UserDB, 'ODSMinorVersion');
         iODSMajorVersion = ibec_GetConnectionProp(UserDB, 'ODSMajorVersion');
              sMes = 'User Database properties' + CRLF + sLine + CRLF;
         sMes .= 'Database host: ';
         if (sHost = '') then
           sMes .= sTab + '(local)';
         else
           sMes .= sTab + sHost;
              sMes .= CRLF +
                 'Database file: ' + sTab + sFile + CRLF +
                 'Server version: ' + sTab + sServerVersion + CRLF +
                 'Client library: ' + sTab + sClientLib + CRLF + CRLF +
                      'Page size, bytes: ' + sTab + ibec_Cast(iPageSize, 

 __typeString) + CRLF +
                 'Sweep interval: ' + sTab + sTab + ibec_Cast(iSweep, 

 __typeString) + CRLF +
                 'ODS version: ' + sTab + sTab + ibec_Cast(iODSMajorVersion, 

 __typeString) + '.' +
                      ibec_Cast(iODSMinorVersion, __typeString) + CRLF + CRLF 

 +
                      'Connection username: ' + sTab + sUser + CRLF +
                 'Connection password: ' + sTab + sPass + CRLF +
                 'Connection charset: ' + sTab + sNames + CRLF;
                   ibec_UseConnection(UserDB);
              sMes .= CRLF + CRLF + 'User Database tables' + CRLF + sLine + CRLF;
         for select rdb$relation_name
             from rdb$relations
             where (rdb$system_flag is null) or (rdb$system_flag = 0)
             order by rdb$relation_name
             into :RelName
         do
         begin
           RelName = ibec_Trim(RelName);
           sMes .= RelName + CRLF;
         end
         commit;
              ibec_ShowMessage(sMes);
       end
     end
  • ibec_ibe_GetActiveDatabaseID - returns the unique identifier of the active (currently used) database within IBExpert. If there is no active database ibec_ibe_GetActiveDatabaseID returns -1.

Syntax:

 function ibec_ibe_GetActiveDatabaseID : integer;
  • ibec_ibe_GetDatabaseProp - returns the value of a specifed database property.

Syntax:

 function ibec_ibe_GetDatabaseProp(DatabaseID : integer; PropertyName : string) : variant;  

The following properties are available:

ALIASalias of the registered database
CLIENTLIBname of client library file specified in the database registration info
SERVERNAME or HOSTNAMEserver name
FILENAME or DBNAMEdatabase file name
PASSWORDpassword specified in the database regstration info
USERNAME or USER_NAME or USERuser name
ROLENAME or ROLE_NAME or ROLErole name
NAMES or LC_CTYPE or CHARSETconnection charset
CONNECTIONSTRING or CONNECTION_STRINGconnection string
ACTIVE or CONNECTEDreturns TRUE if the database is active and FALSE if it is not

Example:

        execute ibeblock as
     begin
       CRLF = ibec_CRLF();
       ActiveDB = ibec_ibe_GetActiveDatabaseID();
       if (ActiveDB is not null) then
       begin
         if (ActiveDB = -1) then
           Exit;
         sAlias = ibec_ibe_GetDatabaseProp(ActiveDB, 'Alias');
         sClientLib = ibec_ibe_GetDatabaseProp(ActiveDB, 'ClientLib');
         sHost = ibec_ibe_GetDatabaseProp(ActiveDB, 'HostName');
         sFileName = ibec_ibe_GetDatabaseProp(ActiveDB, 'FileName');
         sPassword = ibec_ibe_GetDatabaseProp(ActiveDB, 'Password');
         sUser = ibec_ibe_GetDatabaseProp(ActiveDB, 'User');
         sRole = ibec_ibe_GetDatabaseProp(ActiveDB, 'Role');
         sCharset = ibec_ibe_GetDatabaseProp(ActiveDB, 'Names');
         sConnectionStr = ibec_ibe_GetDatabaseProp(ActiveDB, 'ConnectionString');
         bActive = ibec_ibe_GetDatabaseProp(ActiveDB, 'Connected');
              s = 'Database alias: ' + sAlias + CRLF +
             'Client library: ' + sClientLib + CRLF +
             'Server name: ' + sHost + CRLF +
             'Database file name: ' + sFileName + CRLF +
             'User name: ' + sUser + CRLF +
             'Password: ' + sPassword + CRLF +
             'Role: ' + sRole + CRLF +
             'Charset: ' + sCharset + CRLF +
             'Connection string: ' + sConnectionStr;
              if (bActive) then
           s .= CRLF + CRLF + 'Database is active.';
              ibec_ShowMessage(s);
       end
     end

8. Integrated web-based groupware "PHProjekt IBExpert Edition" usable with Firebird 1.5

IBExpert customers can now use PHProjekt with Firebird 1.5. The fully functional web-based groupware system offers many useful tasks and functions such as calendar, chat, trouble ticketing, contacts, mailing lists etc.

How to start it? Just start the example from and starting the WebForm the first time (on port 80), just enter https://localhost/phprojekt in your web browser and follow the instructions to install.

Attention: the first page shows a panic information and a link to the setup form. Just follow the link to start the installer. The current version still has some problems with Firebird 2.x, so we recommend using it at the moment only with Firebird 1.5.

PHProjekt is an Open Source Project and free software. For IBExpert Customers, we made some changes to the source code, to make it possible to use it with Firebird. The original version which can be downloaded from phprojekt.com still contains some errors for Firebird users.

The documentation for PHProjekt can be found here in English: https://www.ibexpert.com/download/phprojekt/phprojekt_en.pdf

and here in German: https://www.ibexpert.com/download/phprojekt/phprojekt_de.pdf

Important: We offer no official support for this product, but weve been using it for a long time with Firebird and InterBase® and we really like it.

9. A lot of minor bug fixes and small improvements.

back to top of page


IBExpert 2007.12.08

[This product is unfortunately no longer available]

1. IBExpertXOCR command-line version available:

What is IBExpertXOCR?

IBExpertXOCR is an optical character recognition command line utility, able to convert scanned images into text files. This increases the value of all your documents, since it makes it easy to store these files in a database. A full text search engine can be created using simple SQL statements.

What are the System requirements?

The installation requires about 15 MB. A typical OCR process takes between 2 and 5 seconds per page, depending on the processor speed and the complexity and quality of your scanned image. For best results, the scanner should work with a minimum of 300 dpi and store the images in TIFF format. It can be used under Windows 2000 or upwards. It can also be used under Linux and Wine.

What are the major advantages for processing the recognized documents inside a database? How can I process the documents automatically?

A fully functional RDBMS such as Firebird allows you to easily store the images and text files in the database and use simple SELECT statements to define your result set. Operators such as CONTAINING, IN or LIKE provide fast access even in medium-sized databases. A typical search on a 5 GB database with about 50,000 documents takes less than a single second even for complex results. Based on the recognized text, you can add, for example, a database trigger to create links to existing records in your customer table or whatever you want. When a customer invoice is scanned, there is often a text such as Customer No: in front of the required number. All new text records can be searched using a trigger and simple functions from UDF libraries to detect the document type and extract such numbers. The Firebird database can be used with billions of data sets. For very large amounts of documents, we can integrate the scalable memory-based full-text search engine IBExpertFTS. This can handle millions of documents and display the result extremely fast.

How to integrate IBExpertXOCR in my environment? How to connect a scanner?

The calling interface is extremely simple. Just place your documents in a directory, call xocr.exe with the file names as a parameter and after processing, it will store the recognized text in a text file with the same file name and a changed file name extension. Most modern scanners have a programmable TWAIN interface, but in our experience it is usually incompatible to other scanners. We prefer using a scanner with a file interface. Very reliable machines can be found at Fujitsu or Plustek. IBExpertXOCR includes the command line interface that can be used from any development environment, for example Delphi, C++, VB, C#, batch files or any other software, which supports calling other applications. The created text files and scanned images can be loaded in any other database that supports blob columns.

What characters are supported?

All supported characters can be found here:

All typical western European characters and business fonts such as Arial, Times, etc. are supported. Handwriting or artistic fonts are not supported.

The IBExpertXOCR Trial Version can be downloaded here: https://www.ibexpert.com/xocrtrial/

Pricing?

The IBExpertXOCR Single License costs EUR 499.00. The license is created for a specific computer name. You can purchase IBExpertXOCR in our shop in (select the product group software): .

back to top of page


IBExpert 2007.12.01

We recommend you uninstall older versions before installing the new IBExpert Version. Please select all IBExpert products in the Windows - ControlCenter / Add or Remove Software. All registered databases are stored in the directory C:Documents and Settings[user]ApplicationdataHK-SoftwareIBExpert or, if used, in the IBExpert User Database. Please backup these before uninstalling.

1. To-do List implemented (Tools / To-do list):

  • This new feature can be used to organize your database development. You can add ToDo Items for each object in the database.

2. Database Comparer:

  • Firebird 2.1 support added.

3. Log Manager:

  • Generation of logging trigger bodies now based on the IBEBlock feature.

4. IBEBlock:

  • Added the possibility to pass arrays into IBEBlocks (EXECUTE IBEBLOCK).

Example:

    execute ibeblock
    as
    begin
      MyBlock = 'execute ibeblock (inparam variant)
                 as
                 begin
                   ibec_ShowMessage(inparam[0] || inparam[1] || inparam[2]);
                 end';       MyVar[0] = 'Hello';
      MyVar[1] = ', ';
      MyVar[2] = 'World!';
      execute ibeblock MyBlock(MyVar);
    end
  • Support of CREATE/ALTER SEQUENCE (Firebird 2.x) in the ibec_ExtractMetadata function (UseSequence option).

5. Script Executive:

  • Added the possibility to show DML statements (INSERT, UPDATE, DELETE) in the Script Explorer tree. Use the Script Explorer context menu to display DML statements.

6. Database Monitor:

  • Fixed the problem with the loading of monitor queries when working with Firebird 2.1.

7. Table and View Editor, Triggers tab:

  • Added the option to set active/inactive for more than one trigger simultaneously.

8. Extract Metadata:

  • Now supports CREATE/ALTER SEQUENCE (Firebird 2.x).
  • Added the possibility to extract table data when extracting into VCS files.
  • Fixed the problem with the extraction of array domains dimensions.

9. Database Registration:

  • Trusted Authentication option added (Firebird 2.1).

10. A lot of minor bug fixes and small improvements.

11. Changes in the installer and updated Service Tools

IBExpertSQLMonitor, IBExpertJobScheduler, IBExpertTransactionMonitor and the IBExpertBackupRestore Service were updated. Due to changes in the installer, we strongly recommend uninstalling older versions before installing the new IBExpert Version. Please select all IBExpert products in the Windows ControlCenter - Add or Remove Software. All registered databases are stored in the directory C:Documents and SettingsApplicationdataHK-SoftwareIBExpert or, if used, in the IBExpert User Database. Please backup these files before uninstalling.

back to top of page


IBExpert 2007.09.25

1. Tools / ODBC Viewer:

  • The ODBC Viewer allows you to browse data from any ODBC source available on your PC and also export data from a ODBC source into an SQL script or directly into a Firebird/InterBase® database.

2. Services / Database Statistics:

  • Added the possibility to automatically analyse tables/indices statistics and the highlighting of possible problem tables/indices. This feature based on the IBEBlock functionality and is therefore is fully customizable.

3. Tools / Extract Metadata:

  • Added the Use CREATE OR ALTER for procedures and triggers option.
  • Added the Dont use SET TERM command. SET TERM is not necessary for scripts executed by IBExpert/IBEScript but may be necessary when working with other tools.
  • Now it is possible to create scripts larger than 2 GB.

4. Tools / Script Editor; IBEScript:

  • Both now work with scripts larger than 2 GB.

5. SP/Trigger Parser:

  • The SP/Trigger Parser now displays variables/parameters that may be not initialized or assigned but never used.

6. Blob Editor:

  • Added syntax highlighting for Delphi forms (dfm).

7. Tools / Table Data Comparer:

  • Added the possibility to synchronize generators.

8. Table Editor / Fields:

  • Added the possibility to create a Foreign Key from the context menu of the columns list.

9. Tools / Script Editor:

  • The Script Explorer now displays IBEBlocks and Firebird Blocks.

10. A lot of minor bug fixes and small improvements.

back to top of page
<< What's New? | IBExpert | Online documentation >>