我正在尝试将.bmp从我的PC保存到包含blob
字段的数据库。
我目前正在使用此处的代码:
How to insert image into database using TADOQuery Component Only
我已经创建了一个新表单,并在那里添加了必要的组件。
TButton
,1 TOpenDialog
和1 TImage
Button3
且ModalResult
设为mrOk
Button1
Button2
,已勾选Cancel
属性且ModalResult
设为mrAbort
Incarca Imagine ( Button1 )按钮的代码如下:
procedure TaddImagineForm.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
end;
名为 Salveaza ( Button3 )的按钮代码为:
procedure TaddImagineForm.Button3Click(Sender: TObject);
var
Field: TBlobField;
Stream: TStream;
begin
if dbmodule.comenziQuery.Active and (Image1.Picture.Graphic <> nil) then
begin
dbmodule.comenziQuery.Insert;
Field := TBlobField(dbmodule.comenziQuery.FieldByName('pscreen')); // ensure it ís a blob
Stream := dbmodule.comenziQuery.CreateBlobStream(Field, bmWrite);
try
Image1.Picture.Graphic.SaveToStream(Stream);
finally
Stream.Free;
dbmodule.comenziQuery.Post;
end;
end;
end;
TSQLQuery
(名为 comenziQuery )位于Data module
,以及我正在使用的其他内容(如DataSource
, DataSet
,SQLConnection
等等。)数据模块名为 dbmodule mediumblob
类型。会发生什么(可能是我的新手观点)
blob
字段现在应包含我之前使用TOpenDialog
选择的.bmp,按 Incarca Imagine 按钮实际上是什么
修改
感谢评论中的Dsm,他指出我正在使用插入,这会添加一条新记录,而不会更新我正在选择的记录。
我指的是这一行:dbmodule.comenziQuery.Insert;
需要以某种方式更改代码以更新我正在选择的记录。
对于Delphi / SQL来说,这是一个非常新的东西,所以如果看起来我正在敲打墙壁并做正好相反的话,我会道歉。
我正在使用 Rad Studio 10 Seattle ,数据库为MYSQL
,数据库组件位于名为dbmodule的数据模块上,并包含以下内容:TSimpleDataSet
, TSQLQuery
,TDataSource
,TSQLConnection
- 它们是dbExpress
组件。
谢谢!
答案 0 :(得分:0)
以下代码有效并且成功提供了我需要的功能
procedure TaddImagineForm.Button3Click(Sender: TObject);
var
Field: TBlobField;
Stream: TStream;
begin
dbmodule.comenziDataSet.Active := True;
if (Image1.Picture.Graphic <> nil) then
begin
dbmodule.comenziDataSet.Edit;
Field := TBlobField(dbmodule.comenziDataSet.FieldByName('pscreen')); // ensure it ís a blob
Stream := dbmodule.comenziDataSet.CreateBlobStream(Field, bmWrite);
try
Image1.Picture.Graphic.SaveToStream(Stream);
finally
Stream.Free;
dbmodule.comenziDataSet.Post;
end;
end;
end;
end.
刚刚使用DataSet替换了Query并且似乎解决了它,我的原始帖子/问题也是错误的,因为我一直在混淆问题。对于经历同样的人来说,这仍然是好事。
感谢Sertac Akyuz