コンポーネントがあります:
- 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に正確に保存するにはどうすればよいですか? 私は本当に重度の立ち往生しています。