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

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

TADOQuery и BLOB-поле [D7, MSSQL]


Страницы:   1 2

BBCHa ©   (2008-07-04 19:01:00) 

Знатоки, подскажите!
Возможно ли запихать SQL - запросом содержимое TImage (bmp, jpg) в базу и вытянуть опять же SQL-запросом обратно???

D7, база MsSQL.

Заранее пасибо.


zorik   (2008-07-23 09:33:00) [21]

Сори, недочитал, что надо запросом


zorik   (2008-07-23 09:31:00) [22]


var
 m: TMemoryStream;
 jpg: TJpegImage;
begin
  jpg:=TJpegImage.Create;
  m:=TMemoryStream.Create;
try
  try
    jpg.LoadFromFile(OPD.FileName);
    jpg.SaveToStream(m);
    m.Position:=0;
    with Query do
    begin
       Edit;
       (FieldByName('photo') as TBlobField).LoadFromStream(m);
       Post;
    end;
 except
    on E:Exception do
      raise Exception.Create(...);
 end;
finally
 jpg.Free;
 m.Free;
end;

-- со старого проєкта


zorik   (2008-07-23 09:26:00) [23]

В Firebird я так делал:
(FieldByName('photo') as TBlobField).LoadFromFile(AFileName)


Zergost   (2008-07-23 08:46:00) [24]

Кто нибудь смог сохранить??


BBCHa   (2008-07-06 18:55:00) [25]

В принципе проблема не в визуализации, а в сохранении, потому как даже если я подключаюсь к таблице TADOTable, и к нему цепляю DBImage - при переходе на введенную строку вылезает та - же ошибка... Т. е. видимо это проблема сохранения.


BBCHa   (2008-07-06 18:24:00) [26]

Сохранение в БД
Query := TADOQuery.Create(Self);
Query.Connection := frDM.ADOConnection;
i := MaxValueFieldTable(frDM.ADOConnection, 'Workers', 'ID_Worker') + 1;
Query.SQL.Text := 'INSERT INTO Workers ' +
                         '(ID_Worker, Name_Worker, Adress, Phone, ID_Special, ID_Cvalific, Time_Work, Comment, ' +
                         'Status_Worker, Status_Record, ModifyComment, YB_Worker, DateCreate, Photo, ID_User) ' +
                         'VALUES ' +
                         '(' +
                         IntToStr(i) + ', ' +
                         '''' + frWorkersService.edName_Worker.Text + ''',' +
                         '''' + frWorkersService.edAdress_Worker.Text + ''',' +
                         '''' + frWorkersService.edPhone_Worker.Text + ''',' +
                         frWorkersService.edSpecial_Worker.Value + ',' +
                         frWorkersService.edCvalific_Worker.Value + ',' +
                         IntToStr(frWorkersService.edYB_Worker.Value) + ',' +
                         '''' + frWorkersService.edComment_Worker.Text + ''',' +
                         '0,1,'''',' +
                         ':YB, :Dat, :Ph,' +
                         frWorkersService.edUser_Worker.Value +
                         ')';
Query.Parameters[0].DataType := ftDate;
Query.Parameters[0].Value := frWorkersService.edHB_Worker.Date;
Query.Parameters[1].DataType := ftDate;
Query.Parameters[1].Value := Date;
Query.Parameters[2].DataType := ftBlob;
Query.Parameters[2].LoadFromFile (frWorkersService.edPhoto_Worker.Hint, ftBlob);
Query.ExecSQL;


Визуализация сохраненной картинки
frWorkersService.edPhoto_Worker.Picture.Assign(TBlobField(Query.FieldByNam e('Photo')));

В этом месте происходит ошибка "Bitmap image is not valid"


Правильный^Вася   (2008-07-06 18:19:00) [27]


> При попытке визуализации картинки появилаась ошибка "Bitmap
> image is not valid"

код попытки?


BBCHa   (2008-07-06 16:35:00) [28]

Использовал.

После записи бмп в базу
Query.Parameters[2].DataType := ftBlob;
Query.Parameters[2].LoadFromFile ('D:\photo.bmp', ftBlob);


При попытке визуализации картинки появилаась ошибка "Bitmap image is not valid"


Правильный^Вася   (2008-07-06 15:34:00) [29]


> ftGraphic

не надо так, используй ftBlob


BBCHa   (2008-07-06 01:27:00) [30]


> Johnmen ©   (04.07.08 19:46) [4]
> Берём содержимое TImage, запихиваем его в параметр параметрического
> запроса, выполняем запрос.
> Выполняем запрос на вытягивание желаемого, наполняем содержимое
> TImage вытянутым.


На счет второго абзаца разобрался,
Form1.Image1.Picture.Assign(TBlobField(Query.FieldByName('Photo')));

А вот с первым, по поводу "запихиваем" - не получается.

Пробую так:
Query.Parameters[2].DataType := ftGraphic;
Query.Parameters[2].Assign (Form1.Image1.Picture.Bitmap);

В этом случае в базу что то записывается, но при запросе содержимого прога его не понимает и выдает чистый Image.

Если так:
Query.Parameters[2].DataType := ftGraphic;
Query.Parameters[2].LoadFromFile ('D:\photo.bmp', ftGraphic);

или
Table.Edit;
TBlobField(Table.FieldByName('Photo')).LoadFromFile('D:\Photo.bmp');
Table.Post;


опять же ,все вроде выполняется, но при попытке загрузить картинку из базы, даже через DBImage возникает ошибка "Bitmap image is not valid"

Знатоки, кто-нибудь, помогите разобраться???


Johnmen   (2008-07-04 19:46:00) [31]

Берём содержимое TImage, запихиваем его в параметр параметрического запроса, выполняем запрос.
Выполняем запрос на вытягивание желаемого, наполняем содержимое TImage вытянутым.


BBCHa   (2008-07-04 19:42:00) [32]


> Johnmen ©   (04.07.08 19:13) [1]
> Конечно можно.


А можно как то по подробнее???


Loginov Dmitry   (2008-07-04 19:26:00) [33]

> Возможно ли запихать SQL - запросом содержимое TImage (bmp,
> jpg) в базу и вытянуть опять же SQL-запросом обратно???


Насчет SQL не знаю, может в MSSQL как-то и можно. В Delphi традиционно это делается с помощью методов SaveToStream() и LoadFromStream() класса TBlobField (здесь возможны и другие варианты).


Johnmen   (2008-07-04 19:13:00) [34]

Конечно можно.


Страницы:   1 2

Наверх

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