|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
сохранение blob на диск
Доброго времени суток!
такая проблема, есть 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
|
|||
|
|||
фишка как раз в том что формочки никакой нет, это кусок макроса (причем тренировачный, чтоб понять схему работы) В макрос приходят имя_пакта.имя_процедуры в бд и параметры, он делает датасет и сохраняет полученное на диск ораклом конечно тоже можно выгружать, но только на диск сервера. ложить сервером на паку клиента не вариант. а про про освобождение да ты прав, совсем забыл
|