![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток!
такая проблема, есть dataset, в нем одно поле и оно есть blob с картинкой (gif). картинку надо сохранить на диск. если делать так Код:
procedure TestMacroProc (MName:string; AParams:TObject);
var
FS: TFileStream;
wPrm:TmParams;
ds:Tdataset;
buffer:Variant;
buf:TBlobByteData;
zap:string;
s:string;
begin
img:=Timage.create(nil);
wPrm:=AParams as TmParams;
zap:='select image from dent_teeth_map where map_id='+wPrm.Values[0];
ds:=CreateSQLDataset(zap,true);
ds.Open;
buffer:=ds.GetBlobFieldData(1,buf);
FS:=TFileStream.Create('c:\1.gif', fmCreate); // создаем файл
with FS do
try
Seek(0, soFromBeginning); // перемещаем указатель в начало потока
WriteBuffer(buf, buffer);// записываем целое
finally
Free; // закрываем файл, освобождаем память
end;
ds.close;
end; ![]() |
|
#2
|
|||
|
|||
|
вот, если вдруг надо кому...
Код:
procedure TestMacroProc (MName:string; AParams:TObject);
var
wPrm:TmParams;
ds:Tdataset;
zap:string;
bl:TBLObfield;
begin
wPrm:=AParams as TmParams;
if wPrm.Values[1]=1 then zap:='select image from dent_teeth_map where map_id='+wPrm.Values[0]
else zap:='select template from templates where id=747';
ds:=CreateSQLDataset(zap,true);
bl:= ds.fields[0] as tblobfield;
if wPrm.Values[1]=1 then bl.savetofile('c:\1.gif')
else bl.savetofile('c:\1.txt');
end;creatdataset это нестандартная процедура, но если вы сможете сделать свой то это прокатит) Последний раз редактировалось eldaeron, 09.09.2010 в 18:01. |
|
#3
|
|||
|
|||
|
А что, бросить на формочку один раз компонент и просто указывать ему свойство SQL нельзя??? можно даже 2 бросить и просто выбирать нужный.
А так у тебя память течет - ты создаешь источник данных, но в конце процедуры его не освобождаешь. А про методы чиения/сохранения содержимого BLOB полей в поток/файл вообще-то написано в документации. |
|
#4
|
|||
|
|||
|
фишка как раз в том что формочки никакой нет, это кусок макроса (причем тренировачный, чтоб понять схему работы) В макрос приходят имя_пакта.имя_процедуры в бд и параметры, он делает датасет и сохраняет полученное на диск
ораклом конечно тоже можно выгружать, но только на диск сервера. ложить сервером на паку клиента не вариант. а про про освобождение да ты прав, совсем забыл![]() |