(C) 2005-2024 Ethea
The goal of InstantBDExpress (IBDX) is to aid in the conversion of BDE-based applications towards the dbExpress technology.
IBDX contains:
A library of Delphi components that emulate the interface and behaviour of the BDE components, but internally use dbExpress instead.
Tools for data migration (IBDXDataPump) and configuration (IBDXAdmin) of the IBDX environment.
Techniques and methodologies for the conversion of BDE applications to dbExpress. Everything Ethea knows from past and current conversion projects is available in the form of consultancy and development services. Please visit our site for further details.
IBDX currently supports those versions of Delphi for Win32 and Win64: Delphi 7, 10.1, 10.2, 10.3, 10.4, 11 and 12. Other versions of Delphi are available only by request.
The IBDX package contains the IBDX Delphi components (the first item in the list above). To install them:
Unzip the archive in the desired folder, which we'll call <IBDX> from now on.
The <IBDX> folder will contain a bin subfolder with the tools IBDXAdministrator and IBDXDataPump (and the compiled IBDX package as well), a doc sub-folder with the available documentation, a lib sub-folder with the compiled binary files (dcu and dcp files) and a demos sub-folder with an example converted application. There's also a samples sub-folder with files referenced in the documentation. Depending on the distribution, you could also find a src sub-folder with the components' source files, and other folders. The lib folder has a sub-folder for each supported Delphi version. For example, the files for Delphi XE8 are located in <IBDX>\lib\DXE8.
Copy the file <IBDX>\bin\InstantBDExpress_D<version of Delphi>.bpl in a folder included in the system's search path (many people use $(DELPHI)\Projects\Bpl). Alternatively, add the folder <IBDX>\bin to the system's search path (which is stored in the PATH environment variable).
Add the folder <IBDX>\lib\D<version of Delphi> to Delphi's Library path.
Install the design-time package in the Delphi IDE (Component/Install Packages, then select the file <IBDX>\bin\dclInstantBDExpress_D<version of Delphi>.bpl.
Once these steps are completed, the IBDX components are available for your applications. You can replace the BDE components with them through global search & replace operations on the sources, or apply interposing techniques which avoid the need to rename anything in some cases. If you need help, feel free to contact us.
Several different approaches are possible to convert an existing BDE application to dbExpress through the use of IBDX. The Conversion strategies article describes them in detail. We have tried to summarize our expertise in converting BDE application in this article, but please understand that each application to convert requires careful ad-hoc analysis and small or big changes, depending on the way it is written and the techniques it uses. There are applications that are simply not worth the effort, and rewriting them is quicker than trying to port them semlessly; it also yields better results.
For big and/or complex applications, you might want to take advantage of Ethea's ad-hoc consulting and development services. We know how it's done; we can tell you how to do it and help you to do it.
This section lists the current main differences between IBDX and the BDE. It will be updated with each version of IBDX, and is intended to give you a quick way to spot show-stoppers. Some things in this list will be changed/added in future releases, while others are going to stay because they are out of the scope of IBDX.
IBDX only emulates the BDE high-level components (defined in the DBTables unit). It doesn't emulate the low-level BDE API (defined in the BDE unit). Applications using direct calls to the BDE API need to be modified.
IBDX doesn't have an EDBEngineError equivalent. Exceptions are reported as dbExpress exceptions. Applications that trap exceptions using BDE error codes will need to wrap their exception-handling code.
While the SessionName property is supported, IBDX currently only uses the global session object. Multiple sessions in the BDE are traditionally used in multi-threaded applications (such as web applications). As there is no direct equivalent in dbExpress, the implementation is tricky. Multiple sessions will be implemented if and when users ask for them.
TIBDXDatabase.Execute doesn't support the rarely used parameters Cache and Cursor.
TIBDXTable.BatchMove and TIBDXBatchMove don't support the batCopy mode. Similarly, TIBDXTble.CreateTable is not supported.
TIBDXTable.Exclusive exists but has no effect. There's no way to lock a table for exclusive access in dbExpress.
The BDE applies table filters on the database side. IBDX applies them client side. The effect of this difference is two-fold: the filter syntax is database-independent (see TClientDataSet.Filter for details), and opening and scrolling huge tables transfers more data in IBDX.
TIBDXDatabase.OnLogin is of type TLoginEvent, while TDatabase.OnLogin is of type TDatabaseLoginEvent. The two are incompatible and an adjustment is needed when porting code.
BDE: when the master dataset in a master/detail structure is closed, if the detail dataset is a table, it shows all records; if it is a query, it keeps showing the records it was showing prior to closing its master dataset. In IBDX, both tables and queries behave as the BDE query, for efficiency reasons.
UpdatesPending returns True between calls to ApplyUpdates and CommitUpdates in IBDX datasets. In the BDE, calling ApplyUpdates sets UpdatesPending to False if no errors occur.
See the Release notes fsor a list of all changes in this version of IBDX.