Форум: "Базы";
Текущий архив: 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