Frank,
Ah, sorry about the missing link for more info; I usually try to include one and simply blipped it.
IAE, dbi functions are BDE API functions and are documented in a different Help file than the main ones linked into your Delphi help. They're actually documented in \Program Files\Common Files\Borland Shared\BDE\BDE32.HLP. The topic for dbiRegisterCallback contains a Delphi example.
While I understand your point about legitimate but inefficient, the problem is that this is a case of "It hurts when I do this."
Having gone through some hairy conversions of my own, I understand that it's necessary to study the tables and to find the proper links between the various sources. In this case, much depends on the type of environment you're working in, the design of the source files, the actual location of the data wrt to your workstation, and the configuration you're working with.
Example: In one Paradox project, a client was working with tables on a WAN. There were a few hundred thousand records and he was using a simple SELECT * FROM Table WHERE ID=SomeValue type of query to locate one record. It would take seven minutes.
We noticed that ID did not have a secondary index, so we added on and then created a form that used a TTable and setRange to locate the target record. This took less than one second.
We used similar techniques to reduce a query-based processing system that took 40 hours to run with one that ran in less than three.
High performance applications with large Paradox datasets are possible, but they take longer to develop and debug.
You might think about breaking your queries into separate operations. For example, instead of combining pattern match selection with joins, using multiple queries can frequently improve overall performance (e.g. match the pattern and then do the joins on the result set with a separate query).
This provides a nice upgrade path, for it's generally pretty easy to replace selection queries with setRanges, which in turn provide even better performance.
Finally, you can also try tuning your BDE, though I've personally not needed to do this in my applications. However,
offers some interesting advice, so YMMV.
Hope this helps...
-- Lance