[fpc-pascal] how to directly access field/record value of TBufDataSet?

Michael Van Canneyt michael at freepascal.org
Tue Oct 1 11:52:11 CEST 2013



On Tue, 1 Oct 2013, Dennis Poon wrote:

>
>
> Michael Van Canneyt wrote:
>> 
>> 
>> On Tue, 1 Oct 2013, Dennis Poon wrote:
>> 
>>> Since TBufDataSet is in-memory, to speed things up, how can I directly 
>>> access the N'th record and M'th field's value as Variant?
>>>> 
>>>> Simply said: You cannot.
>>>> 
>>> 
>>> Can any one suggest an in-memory dataset in fpc/lazarus that allows direct 
>>> access?
>>> 
>>> Does TMemDataset allow it?
>> 
>> No. The architecture of TDataset does not allow this.
>> 
>> The buffer mechanism is quite complicated, and there are quite some layers 
>> to go through.
>> 
>> T(Mem)Dataset is not just an array of records. The records can be at wildly 
>> different locations,
>> the values may or may not be computed. Blobs are stored entirely in 
>> different locations etc.
>> 
>> Michael.
>> 
>
> That is too bad. I used to use TdxMemData from "DevExpress" and it allows 
> such direct access.

Yes, it is possible to construct such a descendent. 
But in the general case it is not possible to provide this mechanism.

Maybe bufdataset can be extended to deliver this, but I would not hold my breath waiting for this.

I also used TdxMemData, but didn't see such mechanism. 
Of course, I never looked for it :)

> The benefit is record can be accessed without CHANGING the current record 
> pointer which will trigger updating of all linked DB controls (that could be 
> time consuming or even confusing to the user).

I understand the benefits.

But if you need such access, then I think that TDataset is not for you.

Michael.



More information about the fpc-pascal mailing list