Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

TADOQuery и BLOB-поле   Найти похожие ветки 

 
BBCHa   (2008-07-04 19:01) [0]

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

D7, база MsSQL.

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


 
Johnmen ©   (2008-07-04 19:13) [1]

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


 
Loginov Dmitry ©   (2008-07-04 19:26) [2]

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


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


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


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


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


 
Johnmen ©   (2008-07-04 19:46) [4]

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


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


> 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"

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


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


> ftGraphic

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


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

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

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


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


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


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

код попытки?


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

Сохранение в БД
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"


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

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


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

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


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

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


 
zorik ©   (2008-07-23 09:31) [13]


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:33) [14]

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


 
Ega23 ©   (2008-07-23 09:45) [15]


> zorik ©   (23.07.08 09:31) [13]


Зачем грузить из файла в стрим, а потом из стрима в BLOBField, если у TBLOBField есть метод LoadFromFile????


 
Ega23 ©   (2008-07-23 09:49) [16]


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


var
 ms : TMemoryStream;
 bmp : TBitmap;
begin
 with Query do
 begin
   if (not Active) or (IsEmty) then Exit;
   ms := TMemoryStream.Create;
   try
     TBLOBField(FieldByName("Photo")).SaveToStream(ms);
     ms.Position := 0;
     bmp := TBitmap.Create;
     try
       bmp.LoadFromStream(ms);
       edPhoto_Worker.Picture.Assign(bmp);
     finally
       bmp.Free;
     end;  
   finally
     ms.Free;
   end;
 end;
end;


 
Anatoly Podgoretsky ©   (2008-07-23 10:21) [17]

Теперь в самый раз вспомнить, что кроме TImage есть и TDBImage


 
zorik ©   (2008-07-23 10:48) [18]


> Теперь в самый раз вспомнить, что кроме TImage есть и TDBImage

Только в случае с bitmap. Стандартный TDBImage, насколько мне не изменяет память, отображает только bitmap


 
Ega23 ©   (2008-07-23 10:51) [19]


> Стандартный TDBImage, насколько мне не изменяет память,
> отображает только bitmap


Изменяет. Не только битмап.


 
zorik ©   (2008-07-23 10:57) [20]


> Ega23 ©   (23.07.08 10:51) [19]

На практике, только что проверил, jpeg у меня не отображался. Использую TJvDBImage (JEDI) -- там все ок. Может где-то в свойствах TDBImage.Picture надо формат задавать и тогда все будет ок. Не знаю )))


 
Ega23 ©   (2008-07-23 11:03) [21]


> На практике, только что проверил, jpeg у меня не отображался.

uses JPEG; ?


 
zorik ©   (2008-07-23 11:06) [22]


> uses JPEG; ?

Да

"Bitmap Image is not valid"


 
Anatoly Podgoretsky ©   (2008-07-23 11:57) [23]


> zorik ©   (23.07.08 09:31) [13]

Так тут еще вопрос, как различать, что в поле, поле то не OLE
А если судить по твоему советуж, то тебе как то все равно это

> zorik ©   (23.07.08 10:48) [18]


 
stas ©   (2008-07-23 12:09) [24]

Ega23 ©   (23.07.08 11:03) [21]
Причем здесь uses jpeg?
нет возможности у стандартного DBImage отображать JPEG.


 
Ega23 ©   (2008-07-23 12:12) [25]


> нет возможности у стандартного DBImage отображать JPEG.


Да? Я просто этой фигнёй не пользовался никогда... А для обычного - достаточно uses jpeg дописать...


 
zorik ©   (2008-07-23 15:07) [26]

Поиск по словах DBImage+JPEG дает много ссылок как с этим боротся -- грузить в Image или же использовать сторонние компоненты. Тут проблема в том, что надо предварительно определить что в блобе: битмап грузится в picture.bitmap, a jpeg в picture.graphic


 
stas ©   (2008-07-23 15:24) [27]

zorik ©   (23.07.08 15:07) [26]
Пиши еще тип в другое поле.


 
zorik ©   (2008-07-23 15:27) [28]


> stas ©   (23.07.08 15:24) [27]

Мне уже неактуально это.

Насорили здесь, а автора вопроса уже давно нет


 
Ega23 ©   (2008-07-23 15:30) [29]


> Пиши еще тип в другое поле.


Зачем???
JPEG должен начинаться с $FFD8, bmp - $424D (в bmp, по-моему, в сигнатуре ещё 3-й байт участвует). Стрим у тебя уже есть. Читаешь 2 байта и смотрищь, чему они равны.


 
piople ©   (2008-07-24 07:38) [30]

1. Через таблицу:
(table1.fieldbyname("ddd") as TBlobField).loadfromfile("dddss");

Для некоторых баз данных через BDE так можно загрузить не более 64k

2. через параметры в квере...
ADOquery1.sql.text:="Insert into myTable (a) Values (:b)";
ADOQuery1.parameters.parseSQL(ADOquery1.sql.text, true);
ADOQuery1.parameters.parambyname("b").LoadFromFile("MyFile");
ADOQuery1.execsql;


 
Ega23 ©   (2008-07-24 10:00) [31]


> Для некоторых баз данных через BDE так можно загрузить не
> более 64k


В настройках алиаса параметр BLOB Size для лохов придуман?


 
piople ©   (2008-07-25 05:24) [32]

Ega23 ©, хз, тебе виднее...


 
Нат   (2008-07-29 18:51) [33]

Стандартный DBImage не умеет работать с jpeg
Универсальное свойство - Picture
Используйте в Image.Picture.LoadFromFile(), Image.Picture.Assign(),
Также LoadFromStream(), CreateBlobStream, SaveToFile

Запрос на сохранение
insert into MyTable ( MyPictureField) values ( :ParamPict);

на удаление
Update MyTable set MyPictureField = null where ID= КлючНужнойЗаписи;


 
Нат   (2008-07-30 00:25) [34]

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625472&n=14



Страницы: 1 вся ветка

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.021 c
6-1201359995
Nucer
2008-01-26 18:06
2009.03.29
SOMAXCONN


15-1233319858
istok
2009-01-30 15:50
2009.03.29
D2009 перестала запускаться...


15-1232360686
XentaAbsenta
2009-01-19 13:24
2009.03.29
Чем выловить и записать на диск весь


15-1232422546
DelphiN!
2009-01-20 06:35
2009.03.29
Неудается завершить пользовательский процес


15-1232784590
Кое кто
2009-01-24 11:09
2009.03.29
Чем читать файл *.RM?