繁体   English   中英

在Delphi中使用Firebird和UIBQuery将图片存储到Blob

[英]Store Picture to Blob Using Firebird with UIBQuery in Delphi

我有组件:

  • 1个OpenPictureDialog (打开图片)
  • 2 Edit (edtID和edtName)
  • 1个Button (保存记录)

我使用UIBQuery插入了一条新记录,其中包括图片。 这是我的代码:

with UIBQuery1 do
try
  SQL.Clear;
  SQL.Add('INSERT INTO EMPLOYEE');
  SQL.Add('(ID, NAME, PIC)');
  SQL.Add('VALUES');
  SQL.Add('(:ID, :NAME, :PIC)');
  params.AsInteger[0] := StrToInt(edtID.Text);
  params.AsString[1] := edtName.Text;
  // How to give a param for blob here?
  Execute;
  Transaction.Commit;
  bsSkinMessage1.MessageDlg2('Has been saved.','New Record',mtInformation,[mbok],0);
except
  Transaction.RollBack;
  raise;
end;

我成功显示了包括数据库图片在内的记录,但是我不知道将图片一键存储到数据库中的线索。

怎么做呢? 可以在查询中给出图片的参数吗?


请有人知道UIB。

我更改了代码,但遇到访问冲突:

procedure TchfEmployee.btnSaveClick(Sender: TObject);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  Image2.Picture.Bitmap.SaveToStream(ms);
  ms.Position:=0;
    begin
      with UIBQuery1 do
      try
        SQL.Clear;
        SQL.Add('INSERT INTO EMPLOYEE');
        SQL.Add('(ID, NAME, PIC)');
        SQL.Add('VALUES');
        SQL.Add('(:ID, :NAME, :PIC)');
        params.AsString[0] := edtID.Text;
        params.AsString[1] := edtName.Text;
        TBLOBField(Params.ByNameAsString['PIC']).LoadFromStream(ms);
        Execute;
        Transaction.Commit;
        bsSkinMessage1.MessageDlg2('Has been saved.','New Record',mtInformation,[mbok],0);
      except
        Transaction.RollBack;
        raise;
      end;
      try
        UIBDataSet1.Close;
        UIBDataSet1.Open;
       except
        raise;
      end;
    end;
end;

如何使用UIBQuery将TImage精确保存到BLOB? 我真的陷入了沉重的困境。

尝试这个:

...
ParamsSetBlob('PIC', ms);
Execute;
...

看一下UIB源代码。 查找TUIBStatement类。

您需要执行以下操作:

Var
  lStream : TMemoryStream;
Begin
  lStream := TMemoryStream.Create;
  Try
    Image2.Picture.SaveToStream(lStream);
    lStream.Position := 0;
    Query.ParamSetBlob('Pic', lStream);
  Finally
    FreeAndNil(lStream);
  End;
End;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM