[Lazarus] MWA Software's Firebird Pascal API

Tony Whyman tony.whyman at mccallumwhyman.com
Wed Dec 7 12:09:14 CET 2016

I've copied the following announcement to this list because of the 
discussions that took place earlier this year on use of Pascal 
Interfaces. The background for my interest in the subject was the 
development of this package and which I believe really does show the 
power of Pascal interfaces - for the package user. When I started 
developing this API, it was meant to be an internal interface to IBX2, 
but once developed it became clear that the use of interfaces had 
provided a powerful means to effectively embed SQL in a Pascal program 
with very little effort from the user. Hopefully, this package will be 
useful to others.

Tony Whyman

MWA Software

Announcement follows:

MWA Software is pleased to announce the release of its Firebird Pascal 
API package (/fbintf/). This package has been derived from IBX for 
Lazarus and is part of the IBX2 development (see separate announcement). 
The intent is to provide common Pascal language bindings to the Firebird 
API that are independent of the Firebird API version. The IBX derived 
code is licensed under the Interbase Public License, with the remaining 
code licensed under the Initial Developer's Public License.

The /fbintf/ package provides the Firebird API in a format where all 
data types for SQL data, interface parameters and results are native 
Pascal types, including all parameter blocks and database information. 
The Pascal API is pitched at a similar level and purpose to the IBPP 
Firebird API provided to the C++ world. The package is intended to be 
suitable for use on any platform supported by the Free Pascal Compiler. 
It is a required dependency for version 2 onwards of /IBX for Lazarus/, 
and is provided as both a standalone package and as part of IBX2.

It is available for download from http://www.mwasoftware.co.uk/ibx2.

The Firebird Pascal API is intended to be simple to use and to place the 
minimum burden on the API user when it comes to managing the Firebird 
client library and the various Pascal objects that are created to 
provide the API. It is implemented as reference counted COM interfaces 
which, for the API user, are as easy to use as other managed types such 
as AnsiStrings and dynamic arrays. The user only needs to worry about 
accessing and using the interface; disposing of interfaces is performed 
automatically whenever an interface goes out of scope. It is intended to 
be a full implementation of the Firebird API, including events, 
services, blobs and arrays.

Two interface implementations are provided. One is for the new Firebird 
3 Client API and the other for the legacy Firebird Client API used for 
Firebird 2.x and earlier. The Firebird 3 API implementation is used 
whenever possible and the older API only if the Firebird 3 API is not 

The package is supported by an 89 page User Guide and a comprehensive 
test suite. The test suite includes 16 separate tests covering 104 
individual test objectives. It is console mode and run from a batch 
script with automatic comparison against a reference results log. It 
uses the “heaptrc” unit to check for memory leaks. The objective of the 
test suite is to provide confidence in the correct operation of the 
software over are variety of platforms and with only expected variances 
between the two Firebird APIs. It is also intended to be the basis for 
regression testing. Documentation on the use of the test suite is 
provided with the package.

Given the level at which the package works and the power of Pascal 
“interfaces”, embedded SQL statements are possible, such as:

Attachment.ExecuteSQL([isc_tpb_write, isc_tpb_nowait,isc_tpb_concurrency],
'Execute Procedure DELETE_EMPLOYEE ?', [8]);


writeln('Employee Count = ',
MyAttachment.OpenCursorAtStart('Select count(*) from 

The /fbintf/package may be used on its own or as part of IBX and has the 
potential to provide a common Firebird API to all FPC database applications.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20161207/279646de/attachment.html>

More information about the Lazarus mailing list