Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2010, 13:44   #1
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию сохранение blob на диск

Доброго времени суток всем!
такой вопрос. есть бд Oracle есть программа которая с ней общается. к программе можно подключать bplки с макросами и вызывать их с параметрами. вопрос в следующем. в бд есть таблица с blob полем (картинка). программой мы можем получить это поле, но не можем его сохранить(не хватает стандартного функционала), как следствие необходимо дописать bpl который макросом будет сохранять переданный ему blob на диск.( грубо говоря, пришла переменная с blobом, мы ее приняли и сохранили на диск) никогда с таким не сталкивался, поэтому не знаю даже с чего начать... может кто подскажет где почитать или пример поглядеть...
eldalex вне форума Ответить с цитированием
Старый 06.09.2010, 13:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
необходимо дописать bpl
Исходники этой библиотеки у тебя есть?
Если нет то... Напряги Оракл PLSQL или на его встроенной яве вытаскивай из поля в файл.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2010, 13:56   #3
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию

ораклом можно сохранить на диск, но только на диск сервера... а нужно на диск клиента...

есть пример создания макроса
Пример макроса "TEST_MACRO", который выводит все переданные ему параметры.

1. test_unit.pas
Код:
unit test_unit;
interface
implementation
uses MacroMngr, Dialogs, icCommon, SysUtils, Forms, Controls;
procedure TestMacroProc (MName:string; AParams:TObject);
var wPrm:TmParams;
begin
  wPrm:=AParams as TmParams;
  showmessage('Вызван макрос '+MName+' с параметрами:'#10+wPrm.Text);
end;
initialization
  RegisterMacro ('TEST_MACRO',@TestMacroProc);
finalization
  UnregisterMacro ('TEST_MACRO',@TestMacroProc);
end.
2. test.dpk
Код:
package test;
{$R *.RES}
{$ALIGN ON}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $00400000}
{$DESCRIPTION 'Тест'}
{$IMPLICITBUILD ON}
requires
  rtl4;
contains
  test_unit;
end.
потом все это компилится и подключается к базе. все в принципе понятно, приходят параметры. их можно потрогать, и обработать. вопрос в том, как обработать blob чтоб сделать из него image?

Последний раз редактировалось Stilet; 06.09.2010 в 14:00.
eldalex вне форума Ответить с цитированием
Старый 06.09.2010, 14:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но только на диск сервера
Ну насколько я знаю можно передать координаты клиента, и если сервер оракла под администратором запущен, то на диск клиента он подключится сможет, но ты прав, идея не самая лучшая.

Вопрос в том как эти поля получаются. Может ли твой макрос увидеть компонент, работающий с данными из BLOB?

В принципе можно попробовать обратится к компоненту уже после загрузки картинки. Если это TImage и находится он на форме некой, можно попробовать описать Form1.Image. и обратится к его методам, либо же попробовать через FindVCL найти этот компонент на форме.

Однако я бы лучше либо переписал программу, либо к автору обратился. ИМХО с плагинами в таком случае дело иметь опасно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2010, 14:19   #5
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию

программу переписать не получится, все изменения вносятся как раз такими bplями во избежании краха всей системы иногда конечно правятся и основные модули, которые тоже такие же bpl, но редко...
к компоненту обратиться не получится, ибо его как такового нет. картинка нигде не отображается. данные будут выбираться селектом в курсор и на каждую строку курсора будет вызываться этот макрос, параметрами будет передаваться поле курсора (blob) и имя файла... ладно, будем думать
eldalex вне форума Ответить с цитированием
Старый 06.09.2010, 15:10   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Допустим. А сам запрос тебе известен?
В Макросе можно описать свое ADOQuery, запросить это BLOB поле, и получив его сохранить - это тупость, но раз такой случай может пройти.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2010, 15:45   #7
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию

сам запрос известен select * from dent_tmp_teeth вернет 32 записи вида image, name.
нашел такое вот в нете:

В данном примере, объект Table1Bitmap типа TBLOBField - BLOB-поле таблицы dBASE. Данный TBLOBField-объекты был создан с помощью редактора полей (Fields Editor). Если редактор полей для создания TFields для полей таблицы не используется, получить доступ к полям можно с помощью метода FieldByName или свойства Fields, оба они являются членами компонентов TTable или TQuery. В случае ссылки на BLOB-поле таблицы с помощью одного из приведенных членов, перед использованием метода Assign указатель на поле должен быть прежде приведен к типу объекта TBLOBField. Для примера:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(TBLOBField(Table1.Fields[1]));
end;
я правильно понял что мы тут в Image запихиваем blob поле таблицы?
как думаете, проканает если прописать img: TImage. создать и сделать то же самое только вместо поля запихать параметр?
блин,проверить не могу компилятор не настроен
но если чисто теоретически смотреть на вопрос?

Последний раз редактировалось Stilet; 06.09.2010 в 16:00.
eldalex вне форума Ответить с цитированием
Старый 06.09.2010, 16:05   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я правильно понял что мы тут в Image запихиваем blob поле таблицы?
Фактически да, но в твоем случае (как я понял) у тебя нет доступа к Image программы, куда пишется картинка из поля.

Раз тебе известен запрос, то выполни его:
Код:
var ado:TADOQuery;  i:integer;
begin
 ado:=TADOQuery.Create(nil);
 ado.ConnectionString:=ConnectString;
 ado.SQL.Text:='select image from dent_tmp_teeth where name='Чему-то'';
 ado.Open;
 if not ado.Eof then begin
  TBLOBField(ado.Fields[0].AsBlob).SaveToFil('Имя Файла');
 end;
 ado.Close;
 ado.Free;
Запихнув в эти свои макросы. И пусть несмотря на то что там творится в программе, макрос отдельным персональным запросом получит свою порцию никотина )
Оно конечно быдлокодерство, но... Я лично другого в твоей ситуации при таких условиях не вижу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2010, 07:23   #9
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию

спасибо, сегодня с новыми силами попробую ченить сваять если получится, то отпишу сюда как сделал, вдруг кому понадобится
eldalex вне форума Ответить с цитированием
Старый 07.09.2010, 08:28   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Океюшки. Кстати у мя подобная проблема - я плюнул на эти навороты, решил заново старые проекты переписать, дешевле выйдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BLOB поле artemavd БД в Delphi 17 09.08.2016 02:13
загрузка сохранение изображения в blob поле Lokos БД в Delphi 1 24.02.2010 06:50
tvarbytesfield vs Blob Spot БД в Delphi 2 19.01.2010 12:04
Из Memo в BLOB artemavd БД в Delphi 52 31.07.2009 20:32
BLOB в string _andrews_ БД в Delphi 0 20.04.2007 12:05