一个在access数据库里读取图片的问题 (100分)

X

xuelu

Unregistered / Unconfirmed
GUEST, unregistred user!
在access数据库里读取图片时,碰到一个问题,不知道该怎么解决,望那位大虾赐教
情况如里:
1。存取的代码如下,在注释掉TJpegImage类型的jpg后,程序就可以进行往数据库里存图片
,但不注释,点击存储按钮时,程序中止。在运行到"dataf.TravelTable.Append;"时,
产生”class EJPEG with messgae'JPEG error #41"
的Debugger Exception Notification对话框.
2.在没有注释的情况下,不能向数据库添加,但是,图片取出来了,能在DBimage1里显示前面存的图片。
3,图片格式以OLE
'''''''''''''''''取图片
vartempstream:TStringStream;
//tempjpeg:TJPEGImage;
begin
try
tempstream:=TStringStream.Create(' ');
TBlobField(dataf.TravelTable.FieldByName('图片')).SaveToStream(tempstream);
tempstream.Position:=0;
// tempjpeg:=TJPEGImage.Create;
// tempjpeg.LoadFromStream(tempstream);
// DBImage1.Picture.Bitmap.Assign(tempjpeg);
finally
tempstream.Free;
// tempjpeg.Free;
end;

'''''''''''''''存储图片

MyJPEG := TJPEGImage.Create;
MyJPEG.Assign(Image1.Picture.Graphic);
MS:=TMemoryStream.create;
MyJPEG.SaveToStream(MS);
MS.Position:=0;
dataf.TravelTable.Active:=true;
dataf.TravelTable.Append;
TBlobField(dataf.TravelTable.FieldByName('图片')).LoadFromStream(MS);
dataf.TravelTable.Post;
application.MessageBox('添加成功','提示',MB_OK +MB_ICONQUESTION);
MyJPEG.Free;

 
建议你用TMemorystream 下面是例子:

var tempStream:TMemoryStream;
JpgPic:TJpegImage;
begin
try
JpgPic:=TJpegImage.Create;
tempStream:=TMemoryStream.Create;
tempStream.clear;
adoquery1.Append;
JpgPic.LoadFromFile(openpicturedialog1.filename);
DBImage.Picture.bitmap.assign(JpgPic);//若你想DBIMAGE显示JPG图像就可这样.
JpgPic.SaveToStream(tempStream);
tblobfield(adoquery1.FieldByName('image')).LoadFromStream(tempStream) ;
adoquery1.Post;
finally
JpgPic.Free;
tempStream.Free;
end;
 
图片是二进制数据,怎么用TStringStream呢?用tmemorystream.
 
不仅试过tmemorystream,还试用了TADOBlobStream,都不行。还是出现同样的问题。运行到那里,程序就中止了

to :cwmdelpher
我是用的两个form,一个加,一个取。在注释取的form时,可以没有问题的加,当把取的代码
取掉注释后,就不行了,只能取。

为什么呢
 
这样试试:
不管怎么样,我觉得应该用TMemoryStream
'''''''''''''''''取图片
vartempstream:TMemoryStream;
//tempjpeg:TJPEGImage;
begin
try
tempstream:=TMemoryStream.Create;
tempstream.Position:=0;
TBlobField(dataf.TravelTable.FieldByName('图片')).SaveToStream(tempstream);
tempjpeg:=TJPEGImage.Create;
tempstream.Position:=0;
tempjpeg.LoadFromStream(tempstream);
DBImage1.Picture.Bitmap.Assign(tempjpeg);
finally
tempstream.Free;
// tempjpeg.Free;
end;

'''''''''''''''存储图片

MyJPEG := TJPEGImage.Create;
MyJPEG.Assign(Image1.Picture.Graphic);
MS:=TMemoryStream.create;
MS.Position:=0;
MyJPEG.SaveToStream(MS);
dataf.TravelTable.Active:=true;
dataf.TravelTable.Append;
MS.Position:=0;
TBlobField(dataf.TravelTable.FieldByName('图片')).LoadFromStream(MS);
dataf.TravelTable.Post;
application.MessageBox('添加成功','提示',MB_OK +MB_ICONQUESTION);
MyJPEG.Free;

不知道这样对不对 只是我觉得 TMemoryStream.position好象有问题 你好好看看!
 
还有 存储图片时别忘了把TMemoryStream释放!
 
还是不行,我想是不是数据库的问题,或是其它的
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
519
import
I
顶部