Skip to main content
Thoughts from David Cornelius

Multiple Installs of Firebird


As a Delphi developer, you might be working with the popular and free Firebird database engine. There are several versions and if you have multiple clients or applications, including some legacy ones that are in maintenance mode, there might be a need to have multiple instances of the Firebird servers installed side-by-side. If you're like me, you might forget which versions are listening on which ports and so use a utility like CurrPorts to remind you. But if you don't use a particular database service very often, it might not be started--or not even installed on the machine on which you're working. If you also have InterBase running, there might be conflicting or generic service names like "gdb" which doesn't tell you which engine it's for nor which version. This confusion can be reduced if you make a few configuration file changes and install the Firebird services yourself. Here's how.

Using the Vault API


Nearly two years ago, Idera acquired apilayer, a collection of various cloud-based APIs. Idera being Embarcadero's parent company (and Embarcadero being the publisher of my favorite development tool, Delphi), I was interested to see what this was all about and looked at the handful of APIs available. One caught my eye and I made a note to come back and check it out more when the time was right.

Delphi Debates: Assigned


As a Delphi MVP, I was surveyed on my stance of the use of FreeAndNil. In that questionnaire was included a question about the use of Assigned(). Really? Is that debated as well? I couldn't find anything on the internet debating this except for an old discussion on StackOverflow. I use this function frequently and as I looked more deeply at what it does, I'm even more confident of its use.

Delphi Debates: FreeAndNil


When freeing an object in Delphi, simply calling its Free method calls the object's destructor and releases the memory allocated to the instance of the object. But it doesn't change the address of the referencing variable which, therefore, still points to the place in memory where the object existed. The released memory can be quickly reused by other objects or resources and if you try to access the object again without re-creating it, you could get an Access Violation or some other error or worse yet, unpredictable behavior.

Delphi's Find in Files Trick


You've probably used Delphi's Find in Files feature to search for an identifier or library function through multiple folders of source code. If you have backups of your source or multiple projects with copied or similar sets of routines and check the "Include subdirectories" checkbox, the search results could contain a lot of duplicates taking extra time to wade through them all. Wouldn't it be nice if there was a way to fine-tune the folders being searched?

There is!

Switching From UniDAC to FireDAC


Since upgrading my Delphi subscription from Professional to Enterprise, I've been slowly replacing third-party database components with FireDAC since the Enterprise edition comes with many more databases supported. One of the ones I've used a lot is Devart's UniDAC. UniDAC is a great database component suite. I've used them for many years, they have an excellent support forum, and frequent updates. I just don't want to pay for duplicate functionality--well, mostly duplicate; there are some advantages to using UniDAC but they're not deal-breakers for me.
Subscribe to