使用DBImage存图片,ora-01410错误?(100分)

  • 主题发起人 主题发起人 liliromy
  • 开始时间 开始时间
L

liliromy

Unregistered / Unconfirmed
GUEST, unregistred user!
使用DBImage存图片:
begin
if OpenDialog1.Execute then
begin
if not (Table1.State in [dsInsert, dsEdit])
then Table1.Edit;
DBImage1.Picture.LoadFromFile(OpenDialog1.FileName);
Table1.Post;
end;
end;
图片存入了,可是总报错ora-01410,'无效的RAWID'.怎么回事?
 
oracle 8?
有bug
update bde to 5.1.1
delphi +patch
oracle 8.0-->oracle 8.0.6
oracle 8i-->oracle 8.1.6
 
以下代码可以针对bmp和jpg两种格式,使用的是image不是dbimage,字段"pic"为image类型
在D5+SQL SERVER7下调试通过

procedure TForm1.save_image_BitBtnClick(Sender: TObject);
var
filename,ls_filehz_name:string;
StringStream1:TStringStream;
jpeg1:TJPEGImage;
begin
if OpenDialog1.FileName<>'' then
begin
filename:=OpenDialog1.FileName;

query1.close;
query1.sql.Clear;
query1.sql.add('insert into t_image values(:pic_type,:pic)');

//取得打开的图象文件的后缀名
ls_filehz_name:=copy(ExtractFileExt(filename),2,3);

query1.ParamByName('pic_type').Asstring:=ls_filehz_name;

//当图象文件格式为bmp时
if ls_filehz_name='bmp' then
begin
query1.ParamByName('pic').Assign(Image1.Picture);
query1.ExecSQL;
end;

//当图象文件格式为jpg时
if ls_filehz_name='jpg' then
begin
StringStream1:=TStringStream.create('');
jpeg1:=Tjpegimage.Create;
jpeg1.Assign(Image1.Picture);
jpeg1.SaveToStream(StringStream1);
Query1.Parambyname('pic').AsBlob:=StringStream1.DataString;
Query1.ExecSql;
StringStream1.Free;
jpeg1.free;
end;
end;
end;
 
sorry,jqw的方法我看不明白.因为本人实在太菜.
不过,我现在用的确实是ora8,bde是5.01.
lipingcool,用你的方法可以存入数据,
但用image读数据时,
大于100kb的图像只有一部分显示出来:
var ms:tstream;
ms:=qry.createblobstream
(qry.FieldByName('map'),bmread);
Image1.picture.bitmap.loadfromStream(ms);
 
这个问题我也碰到了,但还没时间研究.
看过一些文章,有一种方法是把图片文件分解为小于36KB
的二进制流传输到库中!
 
>>sorry,jqw的方法我看不明白.因为本人实在太菜.
>>不过,我现在用的确实是ora8,bde是5.01.
老弟,别埋汰我啦.
我的意思是将bde,delphi,oracle都升级
www.inprise.com/bde
www.inprise.com/delphi
www.oracle.com

>>lipingcool,用你的方法可以存入数据,
>>但用image读数据时,
>>大于100kb的图像只有一部分显示出来:
使用vclzip控件
 
我找到了一个图片控件,问题解决了。
谢谢两位!
 
多人接受答案了。
 
后退
顶部