![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TADOQuery и BLOB-поле [D7, MSSQL]
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]Конечно можно.