Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизВ чём грабли с createBlobStream? Найти похожие ветки
← →
Shirson (2003-04-03 13:33) [0]Есть таблица в 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 дают такой же результат - поток пуст.
В чём грабли?
← →
Johnmen (2003-04-03 13:43) [1]А так ?
var
MS : TMemoryStream;
...
MS:=TMemoryStream.Create;
TBlobField(AdoTable1.FieldByName("name")).SaveToStream(MS);
Кстати, adotable1.Edit; лишнее...
← →
Shirson (2003-04-03 13:56) [2]Попробовал. То же самое :( Поток MS пуст, MS.size=0
← →
Shirson (2003-04-03 14:08) [3]Добавил кусочек, который TBlobField выводит в строковую переменную. В переменной каля-баля появляется, но TBlobField(AdoTable1.FieldByName("name")).SaveToStream(MS) в поток не записывает.
Гремлины?
← →
blackman (2003-04-03 14:21) [4]ms.Position:= 0;
и забирай
← →
Shirson (2003-04-03 14:28) [5]>blackman
position и так равен 0. Поток пустой, нет там ничего.
(твой вариант тоже проверил, понятно дело, нифига).
Прямо наваждение какое-то...
← →
Johnmen (2003-04-03 14:32) [6]>Shirson © (03.04.03 13:56)
>MS.size=0
Непонятки, однако....:)
← →
Shirson (2003-04-03 14:37) [7]>Johnmen
Полные непонятки. После операции загрузки в поток, его длина равна 0. У меня уже мозги кипят, я нифига понять немогу. А ведь гадость какая-то наверняка. Мелкая и незаметная.
← →
Shirson (2003-04-03 15:18) [8]Так что, никто с таким не сталкивался? Или все с BLOB полями как-то иначе работают?
← →
blackman (2003-04-03 15:29) [9]http://yandex.ru/yandpage?q=373064944&p=1&qs=text%3Dblob%26serverurl%3Dblackman.wp-club.net/
← →
Clickmaker (2003-04-03 16:54) [10]var Stream: TADOBlobStream;
Stream := TADOBlobStream.Create(TBlobField(Query.Fields[0]), bmRead);
try
if (Stream.Size > 0) then Что-то.LoadFromStream(Stream);
finally
Stream.Free;
end;
← →
Shirson (2003-04-03 17:54) [11]Спасибо, сделал. Правда обходным путём и крышу почти сорвало :(
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;
А клипборд пустой...
Пора домой, пока окончательно катушки не съехали...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.141 c