Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В чём грабли с createBlobStream? [D6, MSSQL]


Shirson ©   (2003-04-03 13:33:00) 

Есть таблица в MSSQL8, в которой поле Doc типа image.
Записываю в него данные без проблем.
Эти данные в isqlw я вижу (0xD0CF11E0A1B11A.... и т.д.)
А вот когда пытаюсь эти данные загрузить в поток, поток оказывается пустой.


var:
TS:TStream;
pBuff:PByte;
begin
adotable1.Open;
adotable1.Edit;
TS:=AdoTable1.createBlobStream(AdoTable1.FieldByName("Doc"),bmRead);
GetMem(pBuff,TS.size);
...


TS - пустой.
TS.size равно 0.
BDGrid, подключенный к AdoTable1, строку с (BLOB) показывает.
Варианты с AdoQuery и adodataset дают такой же результат - поток пуст.

В чём грабли?


Shirson   (2003-04-03 17:54:00) [1]

Спасибо, сделал. Правда обходным путём и крышу почти сорвало :(

TBF:=TBlobField(adoquery1.fields.FieldByName("Doc"));
MS:=TMemoryStream.Create;
TBF.SaveToStream(MS);
l:=ms.Size;
ms.SaveToFile("C:\4\SQL2_49156.cpb");

Вот когда стрим записал себя в файл (нормально), а l оказалось равным нулю - крышу у меня сорвало окончательно и бесповоротно. Причём, что самое обидное, когда захотел поделиться сорванной крышей с народом, всё заработало нормально... т.е. size стал не нулевым :( Это просто гониво какое-то.

Ладно, с этим хоть разобрался. Теперь, вот, пытаюсь этот поток сбросить в clipboard...

ms.Read(pbuff,l);
ClipBoard.Open;
MH:=GlobalHandle(pBuff);
Clipboard.SetAsHandle(49156,MH);
ClipBoard.Close;

А клипборд пустой...
Пора домой, пока окончательно катушки не съехали...


Clickmaker   (2003-04-03 16:54:00) [2]

var Stream: TADOBlobStream;

Stream := TADOBlobStream.Create(TBlobField(Query.Fields[0]), bmRead);
try
if (Stream.Size > 0) then Что-то.LoadFromStream(Stream);
finally
Stream.Free;
end;


blackman   (2003-04-03 15:29:00) [3]

http://yandex.ru/yandpage?q=373064944&p=1&qs=text%3Dblob%26serverurl%3Dblackman.wp-club.net/


Shirson   (2003-04-03 15:18:00) [4]

Так что, никто с таким не сталкивался? Или все с BLOB полями как-то иначе работают?


Shirson   (2003-04-03 14:37:00) [5]

>Johnmen

Полные непонятки. После операции загрузки в поток, его длина равна 0. У меня уже мозги кипят, я нифига понять немогу. А ведь гадость какая-то наверняка. Мелкая и незаметная.


Johnmen   (2003-04-03 14:32:00) [6]

>Shirson © (03.04.03 13:56)
>MS.size=0

Непонятки, однако....:)


Shirson   (2003-04-03 14:28:00) [7]

>blackman

position и так равен 0. Поток пустой, нет там ничего.
(твой вариант тоже проверил, понятно дело, нифига).

Прямо наваждение какое-то...


blackman   (2003-04-03 14:21:00) [8]

ms.Position:= 0;
и забирай


Shirson   (2003-04-03 14:08:00) [9]

Добавил кусочек, который TBlobField выводит в строковую переменную. В переменной каля-баля появляется, но TBlobField(AdoTable1.FieldByName("name")).SaveToStream(MS) в поток не записывает.
Гремлины?


Shirson   (2003-04-03 13:56:00) [10]

Попробовал. То же самое :( Поток MS пуст, MS.size=0


Johnmen   (2003-04-03 13:43:00) [11]

А так ?

var
MS : TMemoryStream;
...
MS:=TMemoryStream.Create;
TBlobField(AdoTable1.FieldByName("name")).SaveToStream(MS);


Кстати, adotable1.Edit; лишнее...


Наверх

Титульная страница Поиск, карта сайта Написать письмо