What's New

<<Download IBExpert|IBExpert| Online documentation>>

IBExpert 2022.11.14

and bugfixes 2022.11.28, 2022.12.02 & 2023.01.03

1. SQL Editor

  • Execute with commit (Ctrl+Alt+F9) feature implemented.
    This executes a query and performs a COMMIT immediately for queries that don't return a record set.
  • Autocommit feature for the current SQL Editor (Ctrl+Shift+M) implemented.
    If ON non-select queries will be committed immediately. There is also a corresponding button on the toolbar and an item in the SQL Editor menu.
  • Convert SELECT / WITH into IBEBlock (Ctrl+Shift+B) feature.
    Converts the current select/with query into IBEBlock.
    There is also a corresponding item in the SQL Editor menu.

2. Metadata Search

Web-style search implemented. Rules are:

  • By default AND condition is used: 'declare variable' will find all DDL's that contain both 'declare' and 'variable'
  • To use OR place '|' between words: 'declare | variable'
  • OR has lower priority than AND
  • To exclude words from a search use '-' before a word (without a space):
    'declare -variable -procedure'
  • To search for an exact match put a word or phrase inside quotes:
    "declare variable"
  • Complex expressions with parentheses are not supported
  • 'Whole words' and 'Case sensitive' options are taken into account

Details can be referred to in our online documentation: Search in Metadata.

3. Support of version history for stored Firebird and IBExpert blocks

4. Visual Options

  • Disable undocked toolbars option. This prevents toolbars from undocking.

5. IBEBlock

6. Embed web technologies

It is just replacement of embedded Internet Explorer that is used in IBE Direct, Blob Viewer and some other parts of IBExpert, with embedded Edge.

The lastest IBExpert includes a new feature to embed web technologies (HTML, CSS, and JavaScript). So, instead of using an external program to display PDF or JSON, we have implemented Microsoft edge WebView2 support. The WebView2 control uses Microsoft Edge as the rendering engine to display the web content in IBExpert.

However, some Windows versions do not include WebView2 Runtime.

If you encounter an error when starting IBExpert, please download and install the correct WebView2 Runtime from https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section for your OS version. Following installation, IBExpert should work as intended.

If you do not wish to install this additional Runtime on your server, you can disable (for the time being) WebView2 support and revert to using SumatraPDF by deleting WebView.dll and WebView2Loader.dll from your IBExpert install folder.

7. Minor bugfixes and improvements

back to top of page

IBExpert 2022.06.10

1. Data Grid

  • The possibility to edit UUID/OCTETS values directly in the grid in hexadecimal notation has been implemented.
    For UUID values (CHAR(16) CHARACTER SET OCTETS) the following formats of input data are accepted (examples):
3897C040-5DAE-4856-BDAF-F1BA2591AA13 3897C0405DAE4856BDAFF1BA2591AA13 {3897C040-5DAE-4856-BDAF-F1BA2591AA13} x'3897C0405DAE4856BDAFF1BA2591AA13'

For OCTETS values (CHAR(xx) CHARACTER SET OCTETS) the following formats of input data are accepted (examples):


Notation as x'<hexadecimal sequence>' is universal and may be used even if the UUID and OCTETS switches on the grid toolbar are off.

  • Same possibilities are available in the Form View.

2. PSQL Debugger

  • The values of UUID/OCTETS variables are now shown in hexadecimal format.
  • Editing of OCTETS/UUID values is available AsOCTETS and AsUUID, see description above.
  • Support of conditions in automatic breakpoints. The IBExpert PSQL debugger supports automatic breakpoint in the form of a special comment:



If the debugger meets such a comment, the next executable line in a PSQL source will be set as a breakpoint automatically. Now it is possible to simply specify the conditions in such breakpoints:

    -- IBE_BREAKPOINT (var_a = 20) or (var_b > 0)

3. Input Parameters Form

  • Editing of OCTETS/UUID values in hexadecimal format has been implemented, see above.

4. Event blocks

  • The "After database connected" event block processes a new output parameter DBEExtraCaption which may be used to replace default SQL dialect information followed by database alias in the Database Explorer.

Example of usage

    execute ibeblock(
      DatabaseID integer,
      IsReconnect boolean)
    returns (
      DBEExtraCaption variant default NULL)
      DBConn = ibec_GetDefaultConnection();

      if (DatabaseID = 630) then  -- Show database version stored in some user table
        select '(Ver. ' || DBVERSION || ')' from DBCONFIG into :DBEExtraCaption;
      else -- Show server version, just for example
        sv = ibec_GetConnectionProp(DBConn, 'ServerVersion');
        DBEExtraCaption = '(' || sv || ')';

5. SQL Editor

  • Added the F4 shortcut to toggle visibility of the Query Manager.

6. Code Editors, Find and Replace Text

  • Added support of substitutions when using regular expressions.

7. Table and View Editors

  • DDL page: included USAGE privileges on generators used in table triggers.

8. IBEBlock


function ibec_RecompileFunction(Connection : variant; FunctionName : string) : string; 
  • ibec_ProgressEx function has been implemented. This function provides some additional flags to display progress percentage and/or bars when executing scripts in console mode (IBEScript.exe). In the IBExpert GUI it works exactly as the ibec_Progress function.
function ibec_ProgressEx(Message : string; Options : variant);

Currently the Options argument can accept a combination of the following constants:

  • __poNoCRLF ($1) - no end-of-line marker (CR+LF) will be added to the end of progress message;
  • __poReplaceLast ($2) - last ibec_ProgressEx output will be replaced with a new one;

Example 1

    execute ibeblock
      ibec_ProgressEx('Progress: ', __poNoCRLF);
      for i = 1 to 100 do
        s = i || '%';
        iOptions = __poNoCRLF;
        if (i > 1) then
          iOptions = iOptions + __poReplaceLast;
        ibec_ProgressEx(s, iOptions);

      ibec_ProgressEx('', 0);

Example 2

    execute ibeblock
      ibec_ProgressEx('Progress: ', __poNoCRLF);
      for i = 1 to 100 do
        if (i > 1) then
          ibec_ProgressEx('', __poNoCRLF + __poReplaceLast);
        ibec_ProgressEx('=', __poNoCRLF);
        s = ' ' || i || '%';
        ibec_ProgressEx(s, __poNoCRLF);
  • ibec_StartTraceSession function implemented.
    ibec_StartTraceSession starts a trace session using Firebird Services API and writes trace data into a file. Additional filtering of trace items is possible via callback block.


    function ibec_StartTraceSession(ConnectParams : string; TraceConfig : string; OutputFile : string;
                                FilterBlock : variant; ProgressBlock : variant) : variant;

ConnectParams - list of connection params and some additional options delimited with semicolon:

  • Server - server name including port number if necessary.
  • User - user name.
  • Password - password.
  • ClientLib - path to a client library dll.
  • MaxFileSize - maximum size of the result file in megabytes. If not specified the result file size will be limited to 100 megabytes.
  • StopAfter - determines duration of the trace session in minutes. Default value is 60 minutes.
  • IncludeStatistics - some statistical data (total and max per second number of processed lines and events) will be written at beginning of trace data.
  • AppendToExisting | AppendMode - if specified, trace data will be added to the existing file (if exists).

TraceConfig - Firebird trace configuration.

OutputFile - name of a result file which will contain trace data.

FilterBlock - a callback block which performs additional filtering of trace items if necessary. This block is called for every trace item and accepts a trace item text as input parameter (EventSource). Output parameter NeedSkip determines whether trace item should be skipped i.e. not included into result file.

If no additional filtering is needed pass NULL or an empty string as FilterBlock value.

ProgressBlock - a callback block that is intended to display progress of tracing. It receives array of some statistical data:

  • Data[0] (or Data['LinesProcessed'] - number of processed lines.
  • Data[1] (or Data['EventsProcessed']) - number of processed trace items/events.
  • Data[2] (or Data['EventsMatched']) - number of trace items written to result file.
  • Data[3] (or Data['OutputSize']) - current size of result file in bytes.

Output parameter Threshold determines a delay im milliseconds before next call of the ProgressBlock.

ibec_StartTraceSession returns NULL if a trace session is started successfully, otherwise it returns an error message as a result.


execute ibeblock

  -- Filter block
  declare ibeblock filter_block (EventSource variant)
  returns (
    NeedSkip boolean = FALSE)
    -- Using regular expression
    NeedSkip = ibec_preg_Match('(?i)0\x20ms', :EventSource);

    -- Using ibec_Pos
    NeedSkip = ibec_Pos(' 0 ms', :EventSource) > 0;

  -- Callback block
  declare ibeblock progress_block (data variant)
  returns (
    threshold integer = 2000)
    for i = 0 to ibec_High(data) do
      data[i] = ibec_Cast(data[i], __typeString);

    s = ibec_Format('| %15.15s | %16.16s | %14.14s | %16.16s |', data[0], data['EventsProcessed'], data['EventsMatched'], data['OutputSize']);
    ibec_ProgressEx(s, __poNoCRLF + __poReplaceLast);

  sConfig = ibec_LoadFromFile('D:\temp\trace.conf');
  sOutFile = 'D:\Temp\tracedata.txt';
  sConnectParams = 'Server="myserver/3044"; User=SYSDBA; Password=masterkey; ClientLib="D:\FB4_CLIENT\fbclient.dll"';
  sOptions = 'MaxFileSize=10; StopAfter=60; IncludeStatistics';

  ibec_Progress('| Lines processed | Events processed | Events matched | Output file size |');

  Res = ibec_StartTraceSession(:sConnectParams || ';' || :sOptions,

  if (Res is not null) then  -- Error caused
    ibec_Progress('ERROR: ' || Res);

Please also refer to: ibec_StartTraceSession.

9. Other minor bugfixes and small improvements

back to top of page

IBExpert 2022.03.08

Minor bugfixes and improvements

back to top of page

IBExpert 2021.11.16

and bugfix versions 2021.11.25 & 2021.12.06


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

1. Database Explorer

Added the possibility to deactivate (comment) stored functions and packages from the context menu.

2. DB object editors, Dependencies trees:

Added the possibility to deactivate (comment) PSQL objects from the context menu.
After deactivation of dependant objects they will disappear from the dependencies tree, and IBExpert offers the option to store a list of deactivated objects in the Project View tree or copy it to clipboard. It is possible to customize this behaviour using the corresponding event block, see "Event blocks" section below.

3. Object editors, SQL Editor

Error messages now provide hyperlinks to mentioned database objects.

4. Table data comparer

Support of alternative hash functions implemented.

5. Input parameters form

Added the possibility to enter OCTETS values in hexadecimal format.

6. PSQL Debugger

Support of "Trace Into" for the RETURN statement implemented.

7. Data grid, string value editor

Open in Blob Editor button added.

8. Windows navigation bar

Now supports database colour marks (Database Registration Info / Color Mark).

9. Services / Database Monitor

  • Now with more detailed results, also for SQL dialect 1 databases.
  • New query introduced to see the most active I/O statements.

10. Event blocks

  • Table/View editor :: On compose SELECT statement
    This block fires before executing a SELECT from table/view and allows you to override the SELECT statement composed by IBExpert.
  • Data grid :: Before edit a string value
    This block fires when the user clicks an edit button in a string cell and allows you to force IBExpert to open/edit the string value in the Blob editor.
  • Data grid :: After executing a query
    This block fires after executing a query that returns a record set and allows you to apply the best fit to grid columns just after the query is executed.
    The user can choose where and when "Apply best fit" should be performed and where not. See block example/template for details.
  • Dependencies :: Before deactivate database objects
    This block fires when the user deactivates PSQL objects from the dependencies trees in the database object editors.
    There are some options that can be customized via the block:
    default action, deactivation lists autodelete interval, confirmation request.

11. IBEBlock

  • ibec_CompareTables: support of alternative hash functions.
    In case you want to use your own hash function instead of the Firebird HASH function just specify its name in the UseHashFunction option:

12. Other minor bugfixes and small improvements

back to top of page

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:


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:

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.


    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
<<Download IBExpert|IBExpert| Online documentation>>