Subject | Re: [IBO] Large BLOB download |
---|---|
Author | Geoff Worboys |
Post date | 2014-10-22T08:23:02Z |
Maik Wojcieszak mw@... [IBObjects] wrote:
Not that it probably matters in this case (although I'm less
familiar with TIBOQuery). Is there any chance you have a
component connected to the field that is loading it?
In general, IBO doesn't load a blob until something requests
it (I rely on this behaviour).
If you don't see obvious reasons in your own code, then put
in breakpoints so that you can see the callstack in Delphi
and see what is calling it. ... Lots of possibilities for
a breakpoint, the easiest might be in IB_Session.pas at the
start of: TIB_SessionBase.SysGetBlobData
or you could try: TIB_Statement.CreateBlobStream
Also, instead of playing with SQLVAR directly, use IBO's
classes. So not this:
blobid := pisc_quad(DS.Fields[0].PSQLVAR^.sqldata)^;
but this:
blobid := TIB_ColumnBlob(DS.Fields[0]).BlobID;
Again, this is unlikely to be a cause of the problem, but it
is bad form to go looking at the technical detail unnecessarily
We put classes around things to try and hide all that.
--
Geoff Worboys
Telesis Computing Pty Ltd
> I’m trying to download a huge blob, about 250MB, from theAre we talking TIB_Query or TIBOQuery?
> firebird database with IBObjects.
>
> It seems the TIBQuery object is loading the BLOB data as
> soon as I open it.
Not that it probably matters in this case (although I'm less
familiar with TIBOQuery). Is there any chance you have a
component connected to the field that is loading it?
In general, IBO doesn't load a blob until something requests
it (I rely on this behaviour).
If you don't see obvious reasons in your own code, then put
in breakpoints so that you can see the callstack in Delphi
and see what is calling it. ... Lots of possibilities for
a breakpoint, the easiest might be in IB_Session.pas at the
start of: TIB_SessionBase.SysGetBlobData
or you could try: TIB_Statement.CreateBlobStream
Also, instead of playing with SQLVAR directly, use IBO's
classes. So not this:
blobid := pisc_quad(DS.Fields[0].PSQLVAR^.sqldata)^;
but this:
blobid := TIB_ColumnBlob(DS.Fields[0]).BlobID;
Again, this is unlikely to be a cause of the problem, but it
is bad form to go looking at the technical detail unnecessarily
We put classes around things to try and hide all that.
--
Geoff Worboys
Telesis Computing Pty Ltd