"Dmitri Kuzmenko" ...

> >>Тут мне мягко намекнули, что код примера из FAQ для работы с blob не
работает.
> >>Что ж вы... молчите :-) Получается, я как партизан все еще пишу
> >
> > Гм, а какого хрена он не работает?
>
> я вот тоже так подумал, потом полез в код, и выяснилось (для IBX .09)
>
> что IBDataSet.CreateBlobStream

    Возвращает TStream у которого просто нет упомянутых методов.
И никогда не было. Так что вот это

var B: TIBBlobStream;
begin
   B:=IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('BLB') as TBlobField,
bmRead);

просто не должно компилироваться ни с каким датасетом и ни в какой
версии Дельфи

> создает внутри себя
>   1. tibblobstream, но помещает его в список открытых блобов датасета
>   2. ibDSblobstream, который является примитивной надстройкой поверх
TStream, причем
>      внутри себя использующая тот самый IBBlobStream.
>      нафига он нужен, я пока не понял
>   3. возвращает указатель на ibDSblobstream
>
> и тю-тю. у ibDSblobsteam нет методов savetofile, load..., и ссылка
> на внутренний ibblobstream является приватной, без "выхода наружу".
>
> нахера это сделано, если в IBX ibDSblobstream БОЛЬШЕ НИГДЕ НЕ ИСПОЛЬЗУЕТСЯ,
> кроме ibcustomdataset.pas, я не знаю. Причем ЭТО есть даже в
> IBX от D7 с датой 09.08.2002...

    TIBDSBlobStream не есть тупая оболочка над TIBBlobStream.
Посмотри на его Destroy и Write к примеру. А вот то, что дорогой
джефф не потрудился сделать 4 элементарных метода у TIBDSBlobStream,
это да - я не могу объяснить. Вернее могу, но не буду :)

    Впрочем жить это не мешает, т.к. TIBDSBlobStream полностью
совместим с TStream, будучи его наследником :) А большего от
результата TxxxDataSet.CreateBlobStream и не требуется

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


Ответить