Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.046 c
4-1206962512
Kolan
2008-03-31 15:21
2009.03.29
Получить букву подкл/откл флешки.


15-1232519912
TUser
2009-01-21 09:38
2009.03.29
Большой адронный коллайдер и физические исследования на нем


2-1234080517
Max
2009-02-08 11:08
2009.03.29
Открытие новых форм в одном окне?


2-1233646031
pavel_guzhanov
2009-02-03 10:27
2009.03.29
Странно передается параметр в запрос


1-1208355038
KSergey
2008-04-16 18:10
2009.03.29
Int64 и Integer Overflow





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский