1

我有组件:

  • 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?我真的陷入了困境。

4

2 回答 2

0

您需要执行以下操作:-

Var
  lStream : TMemoryStream;
Begin
  lStream := TMemoryStream.Create;
  Try
    Image2.Picture.SaveToStream(lStream);
    lStream.Position := 0;
    Query.ParamSetBlob('Pic', lStream);
  Finally
    FreeAndNil(lStream);
  End;
End;
于 2013-08-01T09:52:45.973 回答
0

尝试这个:

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

看看 UIB 源代码。寻找 TUIBStatement 类。

于 2013-08-01T09:37:10.347 回答