procedure TForm1.Button1Click(Sender: TObject);
var SQLStr: String;
    Stream: TMemoryStream;
begin
  SQLstr := 'insert into BlobTest (ID,Name,Photo) values (1,'''+Edit1.Text + ''',:Photo)';
  Query1.SQL.Text := SQLstr ;
  Stream := TMemoryStream.Create;
  Image1.Picture.Graphic.SavetoStream(Stream);
  Stream.Position := 0;
  Query1.Params[0].LoadFromStream(Stream,ftBlob);
  Stream.free;
  {Query1.Params[0].LoadFromStream();
   LoadFromFile('C:\Temp\BGCC.JPG',ftBlob);}
  Query1.ExecSQL;  Query1.Close;
end;

解决方案 »

  1.   

    测试通过的,我用的Oracle是:
    Oracle8i Enterprise Edition Release 8.1.7.3.0 - Production
      

  2.   

    我做的多层结构
        ClientDataset1.CommandText:='update Hooker set pict2=:ABlob where id=1');
        ClientDataset1.Params.ParamByName('ABlob').LoadFromFile ('d:\tmp.bmp',ftBlob);
        ClientDataset1.ExecSQL;
    这个我适过了不行啊Tclientdataset好像和TQuery不一样
      

  3.   

    不能使用ClientDataset1.CommandText来插入Blob数据。
    这已实践证明:Delphi BUG你可以使用FieldByName('BlobField').LoadFromStream来插入,
    但对于Oracle,可能要使用如下组件配合:
    TClientDataSet->TDataSetProvider->TTable(not TQuery)->Oracle.