IBExpert new features archive
<< What's New? | IBExpert | Online documentation >>
- IBExpert 2022.06.10
- IBExpert 2022.03.08
- IBExpert 2021.11.16 & 2021.12.06
- IBExpert 2021.09.04
- IBExpert 2021.08.01
- IBExpert 2021.07.09
- IBExpert 2021.06.17
- IBExpert 2021.02.09 & 2021.02.16
- IBExpert 2021.01.07
- IBExpert 2020.12.06
- IBExpert 2020.09.21 & 2020.11.26
- IBExpert 2020.09.13
- IBExpert 2020.05.10
- IBExpert 2020.01.06 & 2020.02.12
- IBExpert 2019.11.13
- IBExpert 2019.11.13
- IBExpert 2019.10.9
- IBExpert 2019.07.24
- IBExpert 2019.04.14
- IBExpert 2018.12.15 & 2019.01.15
- IBExpert 2018.11.15 bug fixes
- IBExpert 2018.10.18 & 2018.10.28
- IBExpert 2018.10.02
- IBExpert 2018.06.03 & 2018.07.19
- IBExpert 2018.02.25 & 2018.04.01
- IBExpert 2017.12.03
- IBExpert 2017.10.01
- IBExpert 2017.09.15
- IBExpert 2017.08.23
- IBExpert 2017.08.08
- IBExpert 2017.07.12
- IBExpert 2017.04.24
- IBExpert 2017.02.26
- IBExpert 2017.01.15 & 2017.01.25)
- IBExpert 2016.11.07
- IBExpert 2016.10.09
- IBExpert 2016.09.04
- IBExpert 2016.08.20
- IBExpert 2016.08.05
- IBExpert 2016.07.26
- IBExpert 2016.07.17
- IBExpert 2016.06.19
- IBExpert 2016.05.02
- IBExpert 2016.04.15
- IBExpert 2016.03.15
- IBExpert 2015.12.21
- IBExpert 2015.09.28 & 2015.11.11
- IBExpert 2015.06.01
- IBExpert 2015.03.14 & 2015.03.27
- IBExpert 2014.12.17
- IBExpert 2014.09.15 & 2014.09.30
- IBExpert 2014.06.17
- IBExpert 2014.04.07
- IBExpert 2014.03.16 & 2014.03.22
- IBExpert 2014.01.01
- IBExpert 2013.10.08
- IBExpert 2013.06.26
- IBExpert 2013.02.15
- IBExpert 2012.12.16
- IBExpert 2012.11.15
- IBExpert 2012.09.02
- IBExpert 2012.08.19
- IBExpert 2012.05.19
- IBExpert 2012.05.12
- IBExpert 2012.05.10
- IBExpert 2012.02.21
- IBExpert 2011.12.11
- IBExpert 2011.12.01
- IBExpert 2011.09.05
- IBExpert 2011.06.13
- IBExpert 2011.03.29
- IBExpert 2011.01.11
- IBExpert 2010.10.08
- IBExpert 2010.07.29
- IBExpert 2010.07.05
- IBExpert 2010.03.23
- IBExpert 2010.01.06
- IBExpert 2009.11.02
- IBExpert 2009.08.17
- IBExpert 2009.06.15
- IBExpert 2009.03.25
- IBExpert 2009.01.17
- IBExpert 2008.11.18
- IBExpert 2008.08.08
- IBExpert 2008.05.03
- IBExpert 2008.02.19
- IBExpert 2007.12.08
- IBExpert 2007.12.01
- IBExpert 2007.09.25
IBExpert 2022.06.10
- 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):
3897C0405DAE x'4856BDAFF1BA2591'
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.
- 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:
-- IBE_BREAKPOINT
or
/* IBE_BREAKPOINT */
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)
- Editing of OCTETS/UUID values in hexadecimal format has been implemented, see above.
- 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) as begin 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 begin sv = ibec_GetConnectionProp(DBConn, 'ServerVersion'); DBEExtraCaption = '(' || sv || ')'; end; end
- 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.
- DDL page: included USAGE privileges on generators used in table triggers.
- ibec_RecompileFunction implemented additionally to ibec_RecompileProcedure and ibec_RecompileTrigger. Usage is similar to the above functions:
https://www.ibexpert.net/ibe/pmwiki.php?n=Doc.IbecRecompileProcedure
Syntax
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.
Syntax 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 as begin ibec_ProgressEx('Progress: ', __poNoCRLF); for i = 1 to 100 do begin s = i || '%'; iOptions = __poNoCRLF; if (i > 1) then iOptions = iOptions + __poReplaceLast; ibec_ProgressEx(s, iOptions); ibec_sleep(100); end; ibec_ProgressEx('', 0); end;
Example 2
execute ibeblock as begin ibec_ProgressEx('Progress: ', __poNoCRLF); for i = 1 to 100 do begin if (i > 1) then ibec_ProgressEx('', __poNoCRLF + __poReplaceLast); ibec_ProgressEx('=', __poNoCRLF); s = ' ' || i || '%'; ibec_ProgressEx(s, __poNoCRLF); ibec_sleep(100); end; end;
- 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.
Syntax
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.
Example
execute ibeblock as -- Filter block declare ibeblock filter_block (EventSource variant) returns ( NeedSkip boolean = FALSE) as begin -- Using regular expression NeedSkip = ibec_preg_Match('(?i)0\x20ms', :EventSource); -- Using ibec_Pos NeedSkip = ibec_Pos(' 0 ms', :EventSource) > 0; end; -- Callback block declare ibeblock progress_block (data variant) returns ( threshold integer = 2000) as begin 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); end; begin 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(''); ibec_Progress('+-----------------+------------------+----------------+------------------+'); ibec_Progress('| Lines processed | Events processed | Events matched | Output file size |'); ibec_Progress('+-----------------+------------------+----------------+------------------+'); Res = ibec_StartTraceSession(:sConnectParams || ';' || :sOptions, :sConfig, :sOutFile, filter_block, progress_block); if (Res is not null) then -- Error caused ibec_Progress('ERROR: ' || Res); end;
Please also refer to: ibec_StartTraceSession.
9. Other minor bugfixes and small improvements
IBExpert 2022.03.08
Minor bugfixes and improvements
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.
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.
Error messages now provide hyperlinks to mentioned database objects.
Support of alternative hash functions implemented.
Added the possibility to enter OCTETS values in hexadecimal format.
Support of "Trace Into" for the RETURN statement implemented.
7. Data grid, string value editor
Open in Blob Editor button added.
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.
- 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.
- 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:
UseHashFunction=MY_OWN_HASH
12. Other minor bugfixes and small improvements
IBExpert 2021.09.04
Minor bugfixes and improvements
IBExpert 2021.08.01
Minor bugfixes and improvements
IBExpert 2021.07.09
Minor bugfixes and improvements
IBExpert 2021.06.17
Minor bugfixes and improvements
IBExpert 2021.02.09
and bugfix version 2021.02.16
Note: some of the following features were introduced in earlier versions, but not documented.
- 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.
- 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.
- 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.
- 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.
- The possibility to put statements into Firebird blocks (EXECUTE BLOCK) has been implemented.
- 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.
- 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.
- 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
IBExpert 2021.01.07
1. Bugfixes, for example the grid view in Trace and Audit.
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.
IBExpert 2020.12.06
1. Stored procedures now also display a plan in Firebird 3.0
2. Minor bug fixes and small improvements
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:
- Set IBEBlock parameters from the user application.
- Get IBEBlock output values.
- 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.
IBExpert 2020.09.13
1.Stored Procedure/Function Editor
- Recompilation of dependent functions implemented (FB 3,4).
- 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.
- Improved performance (updating and filtering) while working with databases which contain thousands of DB objects and hundred thousands of grant records.
- Fixed problems with selecting a master record from popup grid when PK/FK values are of CHAR(16) (UUID) type.
- OUTPUT statement: MemoAsText option implemented.
If this option is specified blob values of subtype 1 (TEXT) will be exported as strings.
- "Explicit COMMIT after each DDL statement" option implemented.
This will add the COMMIT statement after each DDL statement in the result script.
- 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.
- 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
IBExpert 2020.05.10
- Filtering of the Project View tree implemented.
- 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.
- 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.
- 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.
- 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.
- Fixed the problem with overflow of some performance data values.
- 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.
- 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"
- ibec_psql_Analyze: Performs analysis of a PSQL object.
- ibec_psql_Format: This functions performs code formatting of an PSQL statement.
- ibec_PrepareStatement: Prepares a DML statement and returns preparation report or raises an error.
11. Minor bug fixes and small improvements
IBExpert 2020.01.06
and bugfix version 2020.02.12
- Initial support of DECFLOAT / NUMERIC(38) fields (Firebird 4).
- Support of DECFLOAT and NUMERIC(38) fields (Firebird 4): sorting, filtering and aggregate functions implemented.
- 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>
- Columns grid: [Ctrl] + [C] / [Ctrl] + [Ins] now copies name of focused field into the clipboard.
- 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.
- 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
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.
IBExpert 2019.10.9
- Support of Trace Into for package routines and stored functions.
- Support of DECFLOAT and NUMERIC(38, x) variables and parameters (Firebird 4).
- Support of DECFLOAT and NUMERIC(38,x) parameters (Firebird 4).
- 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.
- Support of identity columns (GENERATE BY DEFAULT AS IDENTITY and GENERATE ALWAYS BY IDENTITY).
- Fixed bug with missing SQL SECURITY clause in lazy mode (Firebird 4).
- Fixed bug with missing USAGE privileges while working with a Firebird 4 database.
7. Minor bug fixes and small improvements
IBExpert 2019.07.24
- Formatting of package header/body sources implemented.
- 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.
- Fixed the problem with the display of icon pictures (ico format).
- Fixed the problem loading BLOB values from BLOB-files when a blob data offset exceeds 2 GB.
- 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
IBExpert 2019.04.14
- Support of Firebird 4 functions in parameters tip.
- Support of Firebird 4 syntax extensions.
- 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.
- 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.
- Support of management statements (Firebird 4).
- For inactive indices IBExpert uses the same color as for inactive triggers (customizable in Options | Environment Options | DB Explorer).
- 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" ...;
- Support of DECFLOAT values (Firebird 4).
- Support of TIME/TIMESTAMP WITH TIME ZONE columns (Firebird 4).
- Support of system privileges (Firebird 4).
- 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
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
3. Support of BINARY/VARBINARY datatypes (Firebird 4)
- Field descriptions are displayed if they exist.
- 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.
IBExpert 2018.11.15 - bug fixes
This version includes important bug fixes for:
- IBExpert Day Edition: The IBExpert Day Edition is now 24 hours regardless of the date anywhere in the world.
- Database Compare
- Data Import
IBExpert 2018.10.18 & 2018.10.28
- The issue with the incorrect extracting of generator values has been fixed.
- Support for LOCALTIME and LOCALTIMESTAMP context variables has been implemented (Firebird 3.0.4).
- 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
IBExpert 2018.10.02
- Debugging of FOR SELECT ... AS CURSOR statements implemented.
- Synchronizing of internal generators for IDENTITY columns (FB 3, 4) implemented.
- Use RECREATE for tables option implemented.
If this option is ON IBExpert will use the RECREATE TABLE statement instead of CREATE TABLE.
- Buffers option has been added to set the default database cache size (in number of database pages) for the database being restored.
- Support of the SQL_NULL datatype of query parameters implemented (FB 2.5 and above).
- It is not possible to set the value of such a parameter, only to change its NULL flag (NULL or NOT NULL).
- More about the SQL_NULL datatype: https://firebirdsql.org/refdocs/langrefupd25-sqlnull.html
- 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.
- 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.
- 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
IBExpert 2018.06.03 & 2018.07.19
- 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.
- 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.
- Backup IBEBlock page implemented. It contains an autogenerated IBEBlock for the database backup.
- Restore IBEBlock page implemented. It contains an autogenerated IBEBlock for the database restore.
- 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.
- Bugfix: database event triggers were extracted as inactive if Delayed activation of database events and DDL triggers option was deactivated.
- Compact view style implemented.
- 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.
- 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.
- 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
IBExpert 2018.02.25
(and Bugfix version 2018.04.01)
- Import from *.xlsx files (Microsoft Excel) implemented.
- Export into *.xlsx files (Microsoft Excel) implemented.
- "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.
- "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.
- 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.
- Converting of exception message to UTF8 implemented to avoid the "malformed string" error.
- Support of exponential representation of numbers, i.e. 1.24E-5
- Support of comparison operators: ~= , ^= , !> , ~> , ^> , !< , ~< , ^<
- 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
IBExpert 2017.12.03
- Support of NUMERIC/DECIMAL datatypes with maximum precision of 34 digits (Firebird 4).
- Support of SET TRANSACTION statement implemented. https://ibexpert.net/ibe/index.php?n=Doc.SETTRANSACTION
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.
- Backup options: Show runtime statistics and Skip data options added (Firebird 3, 4). https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk02ch11s03.html
- 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:
- Support of runtime statistics and the SKIP DATA option implemented (Firebird 3, 4). https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk02ch11s03.html.
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).
- Support of runtime statistics has been implemented (Firebird 3, 4). https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk02ch11s03.html
- 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.
- Column and parameter descriptions were ignored while creating a new database. This has been fixed.
- Grant manager reads the users list from SEC$USERS table if one exists in the database.
- 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);
- Statistics and SkipData options have been implemented for the ibec_BackupDatabase function. https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk02ch11s03.html
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
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.
- Issue with primary/foreign keys defined on UUID - CHAR(16) CHARACTER SET OCTETS - columns has been fixed.
- After load from file event block implemented. See the block template for available input parameters.
- 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
IBExpert 2017.09.15
Mostly minor bug fixes and a number of minor improvements.
IBExpert 2017.08.23
- Fixed the problem with the incorrect update script when stored procedure/function parameter name was changed.
- Restoring of data sorting after refresh has been implemented.
- Fixed the bug with executing INSERT INTO SOME_TABLE SELECT ... statement when SOME_TABLE doesn't exist in the database.
- Additional options - "One expression in a line" and "CRLF before items delimiter" have been implemented for ORDER/GROUP BY clauses.
- "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
IBExpert 2017.08.08
Mostly minor bug fixes and a number of minor improvements.
IBExpert 2017.07.12
- Formatting of subroutines (Firebird 3) implemented.
- 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
IBExpert 2017.04.24
- 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.
- 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.
- The Field dependencies list now includes dependencies of foreign keys and referenced tables.
- 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).
- The Parameters’ tip didn't show stored function (Firebird 3) arguments. This has been fixed.
- The Code Insight list didn't show a function's local variables. This has been fixed.
- The problem with the safe conversion of BIGINT and INTEGER fields to DECIMAL/NUMERIC has been fixed.
- 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
IBExpert 2017.02.26
Mostly minor bug fixes and a number of minor improvements.
IBExpert 2017.01.15
(and Bugfix version 2017.01.25)
- 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.
- It is now possible to specify the initial value for autoincrement fields (GENERATED BY IDENTITY, Firebird 3) and restart them with the specified value.
- IBExpert didn't grant privileges for SELECT used in WHILE statement expression. It's fixed.
- Problem with the incorrect parsing of Firebird 3 trace config has been fixed.
- 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.
- References counter added for each object node.
- Saving/restoring of target server version implemented.
- CRLF before/after and indent for ON keyword (JOIN clause) options implemented.
- 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).
- Problem with invisibility of some values of To-Do items has been fixed.
- AutoSave/AutoLoad features implemented.
- Has been redesigned to radio-group items.
- Force close connection option has been implemented.
- Performance has been improved when working with databases containing thousands of objects.
- Fixed the occasional problems with objects sorting.
- 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.
- 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
IBExpert 2016.11.07
1. Object Editors, Operations/Index Using Tab
- Support of subroutines (Firebird 3) has been implemented.
- Support of stored functions (Firebird 3) has been implemented.
- Support of subroutines (Firebird 3) has been implemented.
- Support of stored functions and packages (Firebird 3) has been implemented.
- Temporary tables (GTT) has been removed from the tables selection list.
- Change font size with [Ctrl] + Mouse Wheel option added.
- Conversion of error messages from UTF8 has been implemented.
- 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
IBExpert 2016.10.09
- 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.
OCTETS
character set strings (CHAR/VARCHAR
) are now written into aLOB
file if it is not possible to convert them into hexadecimal format.
- Possibility to load
CHAR/VARCHAR
values from aLOB
-file has been implemented.
- 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).
- Support of the
RETURN
statement (stored functions, Firebird 3) has been implemented.
7. Minor bug fixes and small improvements
IBExpert 2016.09.04
- Fixed the problem with the occasionally incorrect order of views while creating/deleting them.
- Fixed problem with missing values of Boolean fields in
INSERT/UPDATE
statements (Firebird 3).
- Notification about the case sensitivity of user names (logins) for Firebird 3 added.
- 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 noIBExpert.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
IBExpert 2016.08.20
- 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.
- Fixed the problem with changing primary key properties (dependant foreign keys weren't deactivated).
- Jump to packages and Jump to functions (sub-items of Goto object) have been added to the context menu.
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 inALTER 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:
ibec_RegisterFBCryptKey('Red', '$ec$a1$52$f6$4d$27$da$93...', '')
ibec_RegisterFBCryptKey('Green', '0xab,0xd7,0x34,0x63,0xae,0x19,...', '');
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
requiresFBCrypt.dll
on the client side.DBCrypt.dll
andKeyHolder.dll
(plugins) should be installed and configured on the server side.
There are several ways to call ibec_RegisterDBCryptKey
before connecting to a database:
- Include it into After IBExpert Starts script (Options / Environment Options).
- Include it into Before Connect Script of a database (Database Registration Info).
- 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
IBExpert 2016.08.05
In dieser Version wurden die durch Windows Updates verursachten Registrierungsprobleme behoben.
IBExpert 2016.07.26
- The Too many contexts problem, which occurred when packing statements into Firebird blocks has been fixed.
- 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
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
- Support of the
RETURNING
clause forUPDATE
andDELETE
statements. IBExpert shows the returned values in the Messages panel.
ibec_CompareTables
: the broken functionality of theAppendMode
option has been restored.
4. Minor bug fixes and small improvements
IBExpert 2016.06.19
- 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))
- 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.
- Support of IBEBlock implemented.
- Support of
RETURNING...INTO
for before insert/update triggers implemented.
- The popup text blob editor was replaced with a new one which works correctly with UTF8 data.
- [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.
- Fixed the problem with the missing
USER
/ROLE
keyword when granting privileges on a database (CREATE
/ALTER
/DROP
).
- Support of stored (internal) functions and packages (Firebird 3).
- 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.
- Fixed the problem with
ROW_COUNT
variable (always contained 0).
12. Minor bug fixes and small improvements
IBExpert 2016.05.02
Bug-fix IBExpert.dll.
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:
- Registering your IBExpert software
- Registering IBExpert on a stand-alone PC
- Hardware/OS alterations
- Change of computer
- Remove the IBExpert activation
Should you have any questions, please mail register@ibexpert.biz.
IBExpert 2016.03.15
- IBExpert Benchmark has a new look! We're currently improving the IBExpert Benchmark feature; more improvements coming in the next IBExpert releases.
- Package routines' explorer implemented.
- Fixed the problem with the empty plan for
UPDATE OR INSERT
andMERGE
statements.
- Online synchronization feature implemented. This allows you to update the target database simultaneously with the comparison process.
- Commit each block and Commit after specified number of records options added.
- Added support of
BOOLEAN
andBLOB
fields. - This now composes an IBEBlock which can be used to generate test data.
- 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.
- 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.
- Suppress database triggers checkbox added.
- Composed IBEBlock now contains fields mapping information.
- You can now specify the SQL role name while creating the database.
ibec_CompareTables
now supports the following options:CommitBlock
orCommitBlocks
- to performCOMMIT
after each Firebird block;CommitAfter=<number>
- specifies the number of statements betweenCOMMIT
s.SyncOnline
- perform online synchronization, see above.
12. Minor bug fixes and small improvements
IBExpert 2015.12.21
- Fixed all known bugs introduced in 2015.09.28.
2. Procedure, Function, Trigger Editors
- Support of external procedures/functions/triggers (Firebird 3) implemented.
- Edit view after compile option added.
4. Create Procedure from Table
- Grant necessary privileges on used tables option added.
- Fixed problem with incorrect calculation of some ODS-dependent data which can cause errors while extracting data/metadata.
- Support of external procedures/functions/triggers implemented (Firebird 3).
- Support of external procedures/functions/triggers implemented (Firebird 3).
INSERTEX
: support ofBOOLEAN
datatype implemented.
8. Minor bug fixes and small improvements
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.
- Support of Firebird 3 databases implemented.
- Visualization of differences implemented.
- Added support for
CREATE/ALTER/DROP MAPPING
actions (Firebird 3).
- Now uses a single transaction when comparing data of several tables at the same time.
4. IBEBlock, ibec_CompareMetadata
function
- New
OmitFunctions
andOmitPackage
s 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
IBExpert 2015.06.01
- 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.
- Data tips for blob fields are shown in Unicode if it is necessary.
- Support of statistical functions and linear regression functions (highlighting, parameter tips) implemented, Firebird 3.
- Support of
REGR_xxx
(linear regression) functions as window functions implemented (Firebird 3).
- Added support of Firebird 3 format descriptors (As format page).
8. Minor bug fixes and small improvements
IBExpert 2015.03.14 & 2015.03.27
IBExpertLive has now officially been discontinued, as it has been fully replaced by our YouTube channel.
Fixed the problem with accidental access violation error while restoring the desktop after connection to a database.
- Support of refresh procedure implemented. Refresh procedure returns a single record specified by the primary key value.
- 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.
- 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 theHASH
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.
- 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.
- 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 theMATCHING
clause) has been implemented. - The problem with package headers containing
TYPE OF COLUMN
definitions has been fixed. Now such headers, initially created withTYPE OF COLUMN
, are replaced with a raw data type definition and then, following creation of the tables, altered with user-defined header text.
- The IBExpert-specific
DESCRIBE
statement will be translated to the FirebirdCOMMENT ON
statement instead ofUPDATE RDB$xxx
when executing scripts against Firebird 3 databases.
- Support of the
CONTINUE
statement (Firebird 3).
- DDL privileges (Firebird 3) mode implemented.
- Write BOM option added for CSV and text export types.
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
andUseUpdateOrInsert
options implemented.- The
ExtractDDLPrivileges
option allows extraction of privileges on data definition language statements such asCREATE/ALTER/DROP
(Firebird 3). - The
UseUpdateOrInsert
option allows extraction of data asUPDATE OR INSERT
statements instead ofINSERT
.
- The
ibec_CompareTables
function -UseHashFunc[tion]
andUseBlocks
options implemented.- The
UseHashFunc[tion]
option allows the comparison of blobs using theHASH
function. This option will be ignored if one of the servers - source or comparative - doesn't support theHASH
function. - The
UseBlocks
option forces the packing ofINSERT/UPDATE/DELETE
statements into Firebird blocks (EXECUTE BLOCK
) if possible.
- The
ibec_ds_Export
function andSELECT ... AS EXPORT
statement: theWriteBOM
option now works for CSV and text exports.
12. Minor bug fixes and small improvements
IBExpert 2014.12.17
- 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.
- The User Manager now uses SQL instead of the Services API when working with Firebird 3 databases.
- 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.
- Support of
OFFSET
andFETCH
clauses (Firebird 3) implemented.
- Added support of
OFFSET
andFETCH
clauses (Firebird 3).
- Extracting definition of autoincrement fields (Firebird 3) implemented.
- Extracting descriptions of package procedures/functions and their parameters (Firebird 3) implemented.
- Now includes information about packages and stored functions (Firebird 3).
- 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).
- Use short INSERT if possible option implemented. This will generate a short version of
INSERT
- without the list of columns - as opposed to the longINSERT
. This allows you to put more statements in a block and improve performance. - Additional statistics data is available.
ibec_CompareTables
function. If theWHERE
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
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:
- 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.
- 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.
- Support of generator increment value (
INCREMENT BY
clause, Firebird 3).
- DDL script now includes privileges on exceptions (Firebird 3).
- 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.
- Dependencies list for tables/views/procedures/functions/packages now contains user-defined domains used in the object definition.
- Searching in functions and packages implemented (Firebird 3).
- Added IBEBlock page which contains an automatically-composed IBEBlock for comparing table data.
- Decimal separator option added for import from text files.
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
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.
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).
- Added support of the
explain_plan
option (Firebird 3).
- Support of stored functions implemented (Firebird 3).
- Support of subroutines implemented (Firebird 3).
- 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.
- Support of stored functions implemented (Firebird 3).
- Support of privileges on UDFs implemented (Firebird 3).
- Support of privileges on exceptions implemented (Firebird 3).
- Support of additional table data implemented (Firebird 3).
10. Package Editor (Firebird 3)
- Script page implemented.
- Packages now appear in the Code Insight list (Firebird 3).
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;
The Service Control Center is now started automatically with the required admin rights.
14. Minor bug fixes and small improvements.
IBExpert 2014.04.07
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.
IBExpert 2014.03.16 & 2014.03.22
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.
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)
Added the Extract values of CHAR(n) CHARACTER SET OCTETS
fields as hex strings option.
Support of stored functions (Firebird 3).
Support of packages and functions (Firebird 3).
Support of subroutines and functions (Firebird 3).
- Now shows the explain plan if possible (Firebird 3).
- Support of version history for functions (Firebird 3).
- Support of the
log_function_start
/log_function_finish
options (Firebird 3).
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.
SELECT ... EXPORT AS
andibec_ds_Export
functions now support theexport 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 theOctetsAsHex
option which allows the extraction ofCHAR(n) CHARACTER SET OCTETS
values in hexadecimal format.ibec_JsonToXML
function implemented. It allows the conversion of JSON data to XML. Afterwardsibec_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.
IBExpert 2014.01.01
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).
- 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.
- Support of packages (Firebird 3.0).
- Support of DDL triggers (Firebird 3.0).
- Support of
USAGE
privileges for exceptions and generators (Firebird 3.0).
- Support of packages (Firebird 3.0).
- Added the possibility to omit views when performing reverse engineering.
- Added support of Firebird 3.0 config syntax.
10. Drag-n-Drop from the Database Explorer
- Added templates for
ibec_ShutdownDatabase
andibec_OnlineDatabase
functions when dragging a database node into a code editor.
ibec_GetStatementPlan
andibec_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 theOptions
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 executingINSERT
/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
- 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.
- Support for
ROWS
clause ofSELECT
statements implemented.
Added the possibility to export trace data from the Grid View mode.
- 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.
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 theibec_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
(orHostName
): returns the URL of the FTP server nameUser
(orUserName
): returns the user namePass
(orPassword
): returns the passwordPort
: returns the port number (as a string)Data
: returns the content of the internal data bufferSessionLog
: returns the session log dataLastResponse
: returns the last response of the FTP server (same asibec_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
(orHostName
): sets the URL of the FTP server, meaningless after the connection has already been established.User
(orUserName
): sets the user name, meaningless after the connection has already been established.Pass
(orPassword
): 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;
IBExpert 2013.06.26
- Added the possibility to delete all queries of the current query set simultaneously.
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.
Added formatting rules for JOIN ... ON
and MERGE ... ON
expressions.
- Export blob values as hex strings implemented. If this option is
ON
, blob values will be written directly intoVALUES
clause ofINSERT
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.
- 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
IBExpert 2013.02.15
1. Copy database object / Copy Table
- Fixed problem with the incorrect copying of
COMPUTED BY
fields.
- Added the possibility to get statistics for specified tables only.
- An alternative way is to use the DB Explorer context menu, Get statistics for selected tables.
- 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.
- Snapshot RO (snapshot read-only) and Read Committed RO (read committed read-only) transaction isolation levels added for quick selection.
- Added the Prevent database/transaction triggers from firing checkbox.
This is equal to the isc_dpb_no_db_triggers
option in additional connection parameters.
- Added the Prevent database/transaction triggers from firing option.
ibec_BackupDatabase
/ibec_RestoreDatabase
: TheNoDBTriggers
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.
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.
- Added support of extended syntax of the
[FOR] EXECUTE STATEMENT
statement(ON EXTERNAL ...)
.
- For
SELECT
statements with aWITH LOCK
clause IBExpert now grants anUPDATE
privilege on the affected table.
- 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.
IBExpert 2012.11.15
The Description page has been added to display and edit the database description which is stored in RDB$DATABASE.RDB$DESCRIPTION
.
The database description will be included into the documentation if the Include descriptions... option is enabled.
Fixed the problem with incorrect formatting of the WITH
clause within INSERT
and MERGE
statements.
[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.
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.
Implemented the missing functionality for import data from text files with fixed column widths.
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.
Added the Show password checkbox.
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.
IBExpert 2012.09.02
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).
Class TdxPageControl not found error fixed.
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.
IBExpert 2012.08.19
- 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.
- CRLF after UPDATE and Indent before table name options added for the
UPDATE
statement.
- 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
- Several small bugs are removed.
IBExpert 2012.05.10
- Implemented formatting of
IN AUTONOMOUS TRANSACTION
statement. - There is a new option for
SELECT
andUPDATE
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 ...
- 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 ofINSERT
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.
- 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).
- Fixed the problem with searching non-ASCII text when using UTF8 connection charset.
ibec_ImportData
: Support ofTrimStrings
option added.ibec_Decode
function implemented. Theibec_Decode
function has the functionality of anIF...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 againstExpression
.Result
is the value returned, ifExpression
is equal toSearch
.Default
is optional. If no matches are found, theibec_Decode
will returnDefault
. IfDefault
is omitted, then theibec_Decode
function will returnNULL
(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:
ibec_fs_ReadByte(FileHandle : variant) : integer;
ibec_fs_WriteByte(FileHandle : variant; Value : integer) : integer;
ibec_fs_ReadWord(FileHandle : variant) : integer;
ibec_fs_WriteWord(FileHandle : variant; Value : integer) : integer;
ibec_fs_ReadDoubleWord(FileHandle : variant) : integer;
ibec_fs_WriteDoubleWord(FileHandle : variant; Value : integer) : integer;
ibec_fs_ReadInt32(FileHandle : variant) : integer;
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.
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.
IBExpert 2012.02.21
- Fixed the problem with importing Boolean values from DBF files.
- Added the possibility to convert
Boolean
values tosmallint
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.
- Fixed the problem writing blob values into an existing
lob
-file in append mode. - Added the Add DELETE FROM <table> statement option.
- 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.
- Formatting of the
IN
function implemented.
- Active users list now retrieved from
MON$ATTACHMENTS
if possible.
- 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.
- Added the possibility to duplicate a To-do item. It is available in the to-do list context menu.
- Fixed the problem of positioning to error, when only a selected part of the script is executed.
- Always include COLLATE option implemented.
- Do not search in comments option implemented. This prevents searches in any comments for a specified string.
ibec_SaveToFile
andibec_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
andibec_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.
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.
IBExpert 2011.12.01
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.
- Added the possibility to import data into updatable views.
- 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.
- Fixed the problem with incorrect formatting of the
FULL JOIN
clause.
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.
- 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.
IBExpert 2011.09.05
- 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 of0
(zero) before.
- 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.
- 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
andUPDATE OR INSERT
statements.
- Database comparer now uses additional connect parameters if they are specified in the registration info of the databases to be compared.
- Added the possibility to open the trigger table editor from the Trigger menu.
- 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.
- Support of the
WHERE
clause foribec_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 foribec_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
IBExpert 2011.06.13
- Implemented full support of
UTF8
. Internal representation of string values has been changed fromANSI
toUTF8
(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.
- Added the possibility to export data into clipboard in HTML format (
CF_HTML
). - Fixed some problems with exporting
bigint
values into XLS files.
- Added Convert strings from ANSI to UTF8 option.
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).
- 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.
- Added the possibility to filter objects by their description: just add '
~
' (tilde) at the beginning of the filter string.
- 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.
- 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 inINPUT
,SET BLOBFILE
andSET PARAMFILE
directives to specify where IBExpert/IBEScript
should search for required files.
Example:
INPUT 'Inputs\data.sql'; ... SET BLOBFILE 'Data\blobs.lob';
ConvertToUTF8
option implemented foribec_ds_Export
andSELECT ... AS EXPORT
, when exporting data into HTML format.AnsiToUTF8
option implemented foribec_ImportData
. If this option is specified, string values will be converted toUTF8
before being inserted into a database.
14. A lot of minor bug fixes and small improvements
IBExpert 2011.03.29
- 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.
- Fixed the occasionally occurring
stream write error
.
- 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).
- 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.) containingtmp
in the object name.
*tmp*
+ [Ctrl + Space].
- Support of UTF8 implemented.
- 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.
- Improved
VAR
values editor. - Support of UTF8.
- The implementation of
ibec_iif
andibec_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
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.
- 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).
- Export to XML spreadsheet implemented.
- Fixed some problems with incorrect encoding of the document when exporting data into MS Excel files.
- Support of [Ctrl + C], [Ctrl + X], [Ctrl + V] shortcuts for the Query Manager tree.
- 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.
- Added the option to autolink source and destination columns by their names.
- 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
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.
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
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 supportsFIX_FSS_DATA
andFIX_FSS_METADATA
options which are equal to the correspondinggbak
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);
- Fixed the problems with an incorrect result script when comparing temporary and persistent tables with the same name.
- Added the possibility to copy error messages to the clipboard.
14. A lot of minor bug fixes and small improvements.
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).
- Added the IBEBlock page which contains a block for comparing databases. This block is generated automatically using values of the properties and options specified.
- Added direct access to the Code Formatting options.
- 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.
- 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.
- Added the Convert strings from OEM to ANSI option.
- Added the IBEBlock page which contains automatically generated IBEBlocks for data import.
- 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.
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
.
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
andibec_mime_Decode
functions implemented. Theibec_mime_Encode
/ibec_mime_EncodeNoCRLF
functions are intended for encoding a string with MIME Base64. Theibec_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); ...
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
- Fixed the problem control has no parent window when browsing record sets with blob fields.
- Memory leak eliminated when executing nested IBEBlocks using
EXECUTE IBEBLOCK
statement. ibec_ExtractMetadata
function: addedServerVersion
,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
.
- Apply block to selected objects item added to the context menu. This allows users to process selected objects using custom IBEBlocks.
- Added As IBExpert/Firebird Block tab with the possibility of integrated debugging. Currently only the debugging of IBEBlocks is supported.
- Support of a default database collation for Firebird 2.5 databases implemented.
- Added Default collation field to specify default collation for Firebird 2.5 databases.
- Fixed some problems with resolving the dependencies of a view when creating the Recreate Script.
- Added the possibility to use environment variables in
INPUT
,OUTPUT
andSET 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';
- 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).
- Support of
EXECUTE STATEMENT ... ON
external connection implemented.
11. Minor bugfixes and improvements
IBExpert 2010.07.05
- 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.
- The new Query Manager allows you to organize your queries in different query sets.
- Added the possibility to change a processed table directly in the Create SUID Procedures form.
- Fixed the problem with the processing of external tables (regular tables were created instead).
- Support of
UPDATE OR INSERT
implemented. ibec_CopyToClipboard
function implemented.
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
.
- Fixed the problem with extracting stored procedure headers with
TYPE OF <table>.<column>
definitions when the referenced table has not yet been created.
- 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
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.
- Added the possibility to import data from different sources. Please refer to the IBExpert Tools menu item, Import data.
* 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
DatabaseType | Type of the database to be created. Currently only _ctFirebird/__ctDatabase is supported. |
DatabaseProps | List 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
DatabaseType | Type of database to be dropped. Currently only __ctFirebird/__ctDatabase is supported. |
DatabaseProps | List 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
TargetConnection | Handle of the target connection created with ibec_CreateConnection or ibec_CreateDatabase functions. |
TargetTable | Name of the target table. The table must exist in the target database before importing data. |
ImportType | Type of data source. Following data sources are currently supported: |
__impText | Plain text files, comma-separated or fixed widths values. |
__impClipboard | Windows clipboard. |
__impExcel | MS Excel file. |
__impLotus123 | Lotus 1-2-3 file. |
__impQuattroPro | Quattro Pro file. |
__impOpenOffice | OpenOffice spreadsheet. |
__impParadox | Paradox file. |
__impDBase | dBASE file. |
__impAccess | MS Access database. |
__impAdvantage | Advantage table. |
__impDBISAM | DBISAM table. |
__impClarion | Clarion table. |
__impHTML | HTML file. |
__impXML | XML file. |
__impWAB | Windows Address Book. |
__impVCalendar | VCalendar file. |
SourceFile | Path to the source file. Provide an empty string when importing data from the Windows clipboard. |
SourceTable | Name of the source table if necessary (import from MS Access database). |
Options | List 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|YMD | Order 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|LF | Records delimiter. The default value is CRLF . |
CommitAfter=<integer> | Number of records inserted before committing. The default value is 500. |
Mappings | Specifies 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. |
CallbackBlock | Call 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
IBExpert 2010.01.06
- 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.
- 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!
- Added support of Trace/audit services (Firebird 2.5).
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
IBExpert 2009.11.02
- Scripts
- Support of ini-files with default IBEScript parameters and global var values implemented
- Added possibility to store SQL scripts in the User Database
- Code Editors
- IBEBlock
- Database Monitoring
- IBExpert Script Executive, IBEScript
- Extract Metadata
- A lot of minor bug fixes and small improvements
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 beginMyDBName = 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.
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
ibec_ExtractMetadata
: addedAlwaysQuoteIdents
option.
ibec_CompareMetadata
: addedIgnoreCharsets
options.
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.
Added the Always quote identifiers option.
9. A lot of minor bug fixes and small improvements
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 correspondingSELECT
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.
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.
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 theIBEScript.exe
.
4. A lot of minor bug fixes and small improvements...
IBExpert 2009.01.17
1. Database Designer:
- Added the possibility to generate
COMMENT ON
statements instead ofDESCRIBE/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 inDECLARE 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
andMERGE
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...
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 ofEXECUTE 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 withIBEScript.exe
orIBEScript.dll
.
14. A lot of minor bug fixes and small improvements...
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:
- Be sure that there is already a Firebird Instance installed on the machine using the default Firebird installer.
- Install the new IBExpert version.
- Start the Services-HK Software Services Control Center.
- Select the IBExpertInstanceManager service.
- Right click on it and select Add task.
- For the newly added task select BaseService from the list of Firebird instances installed on your PC.
- Set the port number for the Firebird instance you are going to create. All other instance configuration settings will be generated automatically.
- Setup mail notification if needed.
- Setup validation parameters if needed. Validation is just a test connection to
security.fdb
of the new instance, using the instance's port number. - Set the task's Active parameter to True.
- To rename the task, click on the task name with the [Ctrl] key pressed down.
- 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 ofUPDATE
/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_Locate | searches Dataset for a specified record and makes that record the active record. |
KeyFields | is a string containing a semicolon-delimited list of field names in which to search. |
KeyValues | is 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.
SQLScript | script text or name of script file. |
Options | additional options. There are two additional options currently available: ServerVersion and StopOnError . |
ProgressBlock | an 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.
Connection | is an active connection created with the ibec_CreateConnection function . |
ViewName | list of names of view(s), delimited with semicolon or comma, for which a Recreate script will be created. |
Options | list of options delimited with semicolon; possible options are: |
GenerateCreate | determines whether a CREATE DATABASE statement should be included at the beginning of the generated script. |
GenerateConnect | determines whether a CONNECT statement should be included at the beginning of the generated script. |
IncludePassword | determines whether the password should be included into the CREATE DATABASE or the CONNECT statement in the resulting SQL script. |
SupressComments | use to supress comments in the resulting script. |
ExtractDescriptions | determines whether database objects' descriptions should be included in the generated script. By default this option is enabled. |
DescriptionsAsUpdate | determines whether the raw UPDATE statement should be used for object descriptions instead of the IBExpert specific DESCRIBE statement. |
UseComment | generates the COMMENT ON statement for object descriptions (Firebird 2.x). |
DontUseSetTerm | don't use SET TERM statements, all statements will be separated by semicolon only. |
UseCreateOrAlter | generates CREATE OR ALTER instead of CREATE/ALTER where possible. |
ProgressBlock | an 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:
- The new IBExpert website can be found here: https://www.ibexpert.net/ibe.
- The new online shop can be found here: https://www.ibexpert.net/shop.
- The new documentation can be found here: https://ibexpert.net/ibe/index.php?n=Doc.Doc.
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.
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.
- Context Menu / Apply IBEBlock to selected object(s).
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
orIBEScript.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 returnsNULL
.
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 databaseibec_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:
ALIAS | alias of the registered database |
CLIENTLIB | name of client library file specified in the database registration info |
SERVERNAME or HOSTNAME | server name |
FILENAME or DBNAME | database file name |
PASSWORD | password specified in the database regstration info |
USERNAME or USER_NAME or USER | user name |
ROLENAME or ROLE_NAME or ROLE | role name |
NAMES or LC_CTYPE or CHARSET | connection charset |
CONNECTIONSTRING or CONNECTION_STRING | connection string |
ACTIVE or CONNECTED | returns 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.
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): .
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 theibec_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.
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 >>