尝试将 .bmp 从 PC 保存到数据库 blob 字段

Trying to save a .bmp from PC to a database blob field

我正在尝试将 .bmp 从我的 PC 保存到包含 blob 字段的数据库。

我目前正在使用此处的代码:

How to insert image into database using TADOQuery Component Only

我创建了一个新表单并在其中添加了必要的组件。

表单如下所示:

Incarca ImagineButton1)按钮的代码是这样的:

procedure TaddImagineForm.Button1Click(Sender: TObject);
begin
    if OpenDialog1.Execute then
    begin
      Image1.Picture.LoadFromFile(OpenDialog1.FileName);
    end;
end;

名为 SalveazaButton3)的按钮的代码是:

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;

应该发生什么(可能是我新手的观点)

到底发生了什么

编辑

感谢 Dsm 在评论中指出我正在使用插入,它会添加一条新记录,而不是更新我选择的记录。 我指的是这一行:dbmodule.comenziQuery.Insert; 需要以某种方式更改代码以更新我正在选择的记录。

对 Delphi/SQL 非常陌生,所以如果我看起来像是在用头撞墙并做相反的事情,我深表歉意。

我正在使用 Rad Studio 10 Seattle,数据库是 MYSQL,数据库组件位于名为 dbmodule 的数据模块上,包含以下内容:TSimpleDataSetTSQLQueryTDataSourceTSQLConnection - 它们是 dbExpress 个组件。

谢谢!

以下代码有效并成功提供了我需要的功能

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.

刚刚将使用查询替换为使用数据集,这似乎已经解决了问题,而且我原来的 post / 问题是错误的,因为我一直在混淆问题。仍然,对任何经历同样的事情的人都有好处。

感谢 Sertac Akyuz