使用ODAC控件连接oracle数据库向blob字段存取照片,代码如下:
存入照片
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
try
with pjpg do
begin
LoadFromFile(opd1.FileName);
CompressionQuality:=50; //压缩比例
Compress;
SaveToStream(pic);
end; //end with
pic.Position:=0;
qryInsert.Params[22].LoadFromStream(pic,ftBlob);
finally
FreeAndNil(pic);
FreeAndNil(pjpg);
qryInsert.ExecSQL;
DM_HR.hrsession.Commit;
end;
读取照片
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
try
tblobfield(qrySD.FieldByName('PHOTO')).savetoStream(pic);
pic.Position:=0;
with pjpg do
begin
LoadFromStream(pic);
end;
imgPhoto.Picture.Assign(pjpg);
finally
FreeAndNil(pic);
FreeAndNil(pjpg);
end;
使用上述代码
1、用ODAC存取照片到oracle:
用这种控件此段代码将照片存入oracle数据库中
不报错
但是从数据库读出报错:jpeg error #42
经查是 JPEG Error #42 = JERR_INPUT_EOF: Premature end of input file
2、用BDE方式存取照片到oracle:
同样的代码
使用BDE方式访问数据库存取照片没有问题
3、用BDE方式存照片到oracle中,而用ODAC空间读取照片:
而用BDE方式将照片存入oracle
用ODAC控件读取照片(也是用上述代码)
没有问题
可以正确读出
估计是存储的时候,odac控件将照片存坏了
请问是不是这个原因?是ODAC控件的bug吗?
存入照片
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
try
with pjpg do
begin
LoadFromFile(opd1.FileName);
CompressionQuality:=50; //压缩比例
Compress;
SaveToStream(pic);
end; //end with
pic.Position:=0;
qryInsert.Params[22].LoadFromStream(pic,ftBlob);
finally
FreeAndNil(pic);
FreeAndNil(pjpg);
qryInsert.ExecSQL;
DM_HR.hrsession.Commit;
end;
读取照片
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
try
tblobfield(qrySD.FieldByName('PHOTO')).savetoStream(pic);
pic.Position:=0;
with pjpg do
begin
LoadFromStream(pic);
end;
imgPhoto.Picture.Assign(pjpg);
finally
FreeAndNil(pic);
FreeAndNil(pjpg);
end;
使用上述代码
1、用ODAC存取照片到oracle:
用这种控件此段代码将照片存入oracle数据库中
不报错
但是从数据库读出报错:jpeg error #42
经查是 JPEG Error #42 = JERR_INPUT_EOF: Premature end of input file
2、用BDE方式存取照片到oracle:
同样的代码
使用BDE方式访问数据库存取照片没有问题
3、用BDE方式存照片到oracle中,而用ODAC空间读取照片:
而用BDE方式将照片存入oracle
用ODAC控件读取照片(也是用上述代码)
没有问题
可以正确读出
估计是存储的时候,odac控件将照片存坏了
请问是不是这个原因?是ODAC控件的bug吗?
我也这样用过,没问题,存入取出都没问题