-
Знатоки, подскажите! Возможно ли запихать SQL - запросом содержимое TImage (bmp, jpg) в базу и вытянуть опять же SQL-запросом обратно???
D7, база MsSQL.
Заранее пасибо.
-
Конечно можно.
-
> Возможно ли запихать SQL - запросом содержимое TImage (bmp, > jpg) в базу и вытянуть опять же SQL-запросом обратно???
Насчет SQL не знаю, может в MSSQL как-то и можно. В Delphi традиционно это делается с помощью методов SaveToStream() и LoadFromStream() класса TBlobField (здесь возможны и другие варианты).
-
> Johnmen © (04.07.08 19:13) [1] > Конечно можно.
А можно как то по подробнее???
-
Берём содержимое TImage, запихиваем его в параметр параметрического запроса, выполняем запрос. Выполняем запрос на вытягивание желаемого, наполняем содержимое TImage вытянутым.
-
> 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" Знатоки, кто-нибудь, помогите разобраться???
-
> ftGraphic
не надо так, используй ftBlob
-
Использовал. После записи бмп в базу Query.Parameters[2].DataType := ftBlob;
Query.Parameters[2].LoadFromFile ('D:\photo.bmp', ftBlob); При попытке визуализации картинки появилаась ошибка "Bitmap image is not valid"
-
> При попытке визуализации картинки появилаась ошибка "Bitmap > image is not valid"
код попытки?
-
Сохранение в БД 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"
-
В принципе проблема не в визуализации, а в сохранении, потому как даже если я подключаюсь к таблице TADOTable, и к нему цепляю DBImage - при переходе на введенную строку вылезает та - же ошибка... Т. е. видимо это проблема сохранения.
-
Кто нибудь смог сохранить??
-
В Firebird я так делал: (FieldByName('photo') as TBlobField).LoadFromFile(AFileName)
-
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 © (23.07.08 09:31) [13]
Зачем грузить из файла в стрим, а потом из стрима в BLOBField, если у TBLOBField есть метод LoadFromFile????
-
> Визуализация сохраненной картинки > 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;
-
Теперь в самый раз вспомнить, что кроме TImage есть и TDBImage
-
> Теперь в самый раз вспомнить, что кроме TImage есть и TDBImage
Только в случае с bitmap. Стандартный TDBImage, насколько мне не изменяет память, отображает только bitmap
-
> Стандартный TDBImage, насколько мне не изменяет память, > отображает только bitmap
Изменяет. Не только битмап.
|