"Oleg LOA" ...
>
> "Vlad Horsun" ...
> >
> > "Kovalenko Dmitry" ...
> >>
> >> >     На всякий случай объясню - IBX всегда читает блоб целиком в память. 
> >> > Оно
> >> > определяет р-р блоба с помощью isc_blob_info, выделяет память этого р-ра
> >> > и читает туда блоб. Причём читает именно то кол-во байт, которое вернул
> >> > isc_blob_info,
...
> Чё та я не понял где должен валится IBX?
>
> procedure ReadBlob(hBlobHandle: PISC_BLOB_HANDLE; Buffer: PChar; BlobSize: 
> Long);
> var
>   CurPos: Long;
>   BytesRead, SegLen: UShort;
>   LocalBuffer: PChar;
> begin
>   CurPos := 0;
>   LocalBuffer := Buffer;
>   SegLen := UShort(DefaultBlobSegmentSize);
>   while (CurPos < BlobSize) do

    BlobSize - размер исходного (юникодного) блоба

>   begin
>     if (CurPos + SegLen > BlobSize) then
>       SegLen := BlobSize - CurPos;
>     if not ((isc_get_segment(StatusVector, hBlobHandle, @BytesRead, SegLen,
>                              LocalBuffer) = 0) or
>             (StatusVectorArray[1] = isc_segment)) then
>       IBDatabaseError;

    Вот здесь. Ибо возвращается isc_segstr_eof (он пытается прочитать больше,
чем есть) и BytesRead == 0

--
Хорсун Влад


Ответить