1

コンポーネントがあります:

  • 1 OpenPictureDialog(画像を開く)
  • 2 Edit(edtID & edtName)
  • 1 Button(レコードを保存するため)

以前UIBQueryは、1 つのセクションに写真を含む新しいレコードを挿入していました。これが私のコードです:

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 に答える