Subject Re: [IBO] IBodataset vs IBX
Author Jason Wharton
There are huge differences between the two.

Here's what doesn't work properly in IBX (AFAIK):

1) RecordCount just tells records in buffer rather then meaningful
information about your query.
2) Refresh doesn't refresh the dataset. You have to Open and Close the
dataset to truly refresh it. This means you are stuck having to keep track
of your current record and Locate() back to it. Can't use bookmarks to
accomplish this either.
3) Bookmarks are an arbitrary integer that are invalid upon closing the
dataset, which makes them nearly useless and unable to use them across
4) Closing a dataset can cause uncommitted updates to be committed or
rolledback unexpectedly.
5) Calculated fields are not buffered and thus require recalculation for
every buffer load/access.
6) Filtered, FindFirst, FindNext, FindPrior and FindLast simply don't work.
7) Filter simply doesn't work.
8) SetRange capability does not exist.
9) CachedUpdates are tenative and don't work with master-detail,
parameterized queries, etc.
10) Unable to release transaction when a dataset is open, thus long running
transactons that kill server performance.
11) Dataset buffers are very inefficient and use large amounts of memory.
(Jeff did say he planned to rewrite this part. Not sure if he ever did. It
surely needed it.)
12) Many more... Need I say more?

In IBO here is what contrasts that:

1) RecordCount intelligently returns the count of actual rows for the query
whether it is knowing all records are in the buffer and returning the simple
count or it will parse together a query and have the server tell how many
records without bringing them to the client if the buffer isn't full.
2) Refresh in IBO does a true refresh and takes care of maintaining your
current record position. This is also somewhat configurable. It is also
integrated into all the other features that allow a high degree of
efficiency, like horizontal dataset refinement.
3) Bookmarks are configurable and persistent in IBO. This means you can
store them and their validity persists and you are also able to use them
between datasets if they are value compatible.
4) IBO makes sure that uncommitted changes are recognized and doesn't not
make any arbitrary assumptions for you. You are in full control of what is
committed or rolled back. No nasty surprises.
5) IBO keeps track of and buffers calculated fields so that they are only
determined as necessary making it efficient to scroll through records.
6) These methods are fully implemented and work in conjunction with the
Filtered setting.
7) IBO parses the Filter string into actual SQL that is put into the WHERE
clause so that filtering is handled by the server and not the client.
8) Fully implemented in TIBOTable. It also works together with all other
features of the dataset unlike even the BDE would do.
9) CachedUpdates are designed in a way that allows you to open close
datasets, change filters, use master-detail, etc. and the cached updates are
kept track of properly. You don't just have them going away unexpectedly if
you make a wrong turn.
10) IBO has gone to extensive effort to allow transactions to be released
when not needed. Thus, with little exception, you are in full control of
whether a transaction is kept around or not. You are allowed to have a
dataset open and transactions can be released. IBO takes care of
establishing the context again if necessary. Usually it just tries to fetch
records using idle cpu cycles so that the cursor can be released on the
server. Other things it will do is refresh the dataset and allow the
transaction to be released, while it is transparent to the user.
11) IBO dataset buffers are VERY efficient. All whitespace is trimmed and a
simple compression is applied to keep the amount of memory used by buffers
to an absolute minimum. I used a very efficient buffering technique that
keeps things dynamic and tight. There are even advanced abilities to
configure the buffers to refine vertically or horizontally. (If you don't
know what this means, it's really unimportant... just know its there if you
feel the need for it.)
12) There are so many other very nice features at your disposal. All
designed to allow you as a developer to simply get to know your tools more
and more each day and eliminate the need to bloat your application with lots
of code you have to maintain yourself. Most of what anyone will need is
already integrated into IBO and you just need to learn how to unleash it.

I'm sure there are more things that could be added to this list, but this
ought to suffice for now...

Jason Wharton