使用ODAC访问Oracle9i数据库,保存blob类型的图片文件出错,请高手指点: ( 积分: 150 )

  • 主题发起人 主题发起人 delnew
  • 开始时间 开始时间
D

delnew

Unregistered / Unconfirmed
GUEST, unregistred user!
//读取图片文件
S:= TMemoryStream.Create;
s.LoadFromFile(od.filename);
S.Position := 0;
//写入图片到Oracle
try
sSql:='insert into water (bh,lx,photo) values ('''+'A001'+''','''+lx+''',:photo)';
OraSQL1.SQL.Clear;
OraSQL1.Params.Clear;
OraSql1.SQL.Add(sSql);
OraSQL1.Params[0].ParamType:=ptInput;
OraSQL1.Params[0].LoadFromStream(s,ftBlob);
OraSQL1.Execute;
except
on e:exception do
begin
s.Free;
screen.Cursor:=crdefault;
application.MessageBox(pchar(e.Message),'提示',16);
exit;
end;
end;

====================================
请问我上面的语句有什么问题? OraSQL1.Execute执行不成功
请问大家使用ODAC是如何保存blob类型的数据的?
多谢
 
使用强制类型转换,赋值时把图片字段转为blob类型
例如:tblobfield(picquery.FieldByName('obj_image1')).LoadFromStream(strm2);
 
如果你要直接使用sql进行insert,可以这样使用:
insert into water(bh, lx, photo) values('A001', 'AAA', empty_blob())
returning photo into :photo;

delphi中写:
OraSql1.Prepare;
OraSql1.Params[0].DataType := ftOraBlob;
OraSql1.Params[0].ParamType := ptInputOutput;
OraSql1.Params[0].AsOraBlob.LoadFromStream(Stream);
OraSql1.Execute;
 
多人接受答案了。
 
后退
顶部