Access中有一表,有一字段(PIC)已经存在图片,该图片是在Access中通过插入对象的方式插入的,我已经在本论坛中查找了以前的贴子,但解决不了我的问题.总是显示不出来.
解决方案 »
- ~~~~~~~有一个Combobox,怎样根据DBGrid里的某字段的值改变Combobox的itemindex
- 求TVicHW32!
- Delphi中的nil转换为数据库中的NULL的随想
- 各位老大救急!这种虚拟光驱文件是由那种软件生成的?高分相赠!急!
- 谁能形象,详细的更我说说TRY...FINALLY的作用呢
- 用TMEMORYSTREAM來讀圖片顯示不出來,你有解決的方法嗎?
- 如何取得richedit中光标所在位置的一个word?(高手提供点思路吧)
- 推荐个稳定成熟的 浏览 pdf 文档的 ocx 或者组件
- vb.net與delphi6各自優缺點是什么
- 请教斑竹,为什么我的提问只能看到前面一部分,而后面还有许多却看不到?
- 问个菜问题!
- 明天,英语四级考试!散分,预祝自己考过!
var adoqTemp:TADOQuery;
ABit:TBitMap;
bs:Tstream;
begin
try
adoqTemp:=TADOQuery.Create(self);
adoqTemp.Connection:=adocMain;
bs:=Tstream.Create;
ABit:=TBitMap.Create;
with adoqTemp do
begin
close;
sql.Text:='select Pic from ThumbImage where kindcode=:kindcode ';
prepared;
parameters.ParamByName('kindcode').Value:=kindcode;
open;
if Recordcount<>1 then
begin
Result:=nil;
exit;
end
else
bs:=CreateBlobStream(FieldByName('Pic'),bmRead);
ABit.LoadFromStream(bs);
Result:=ABit;
end;
finally
FreeAndNil(adoqTemp);
FreeAndNil(bs);
end;
end;
stream: TStream;
JpgImg: TJPEGImage;
...
with AQuery do
begin
....;
//Open之后
stream := CreateBlobStream (FieldByName ('YourAFieldName'));
//...创建JPEG对象
JpgImg.LoadFromStream (stream);
JpgImg.SaveToFile ('YourFileNameOfPicture');
//...消毁JPEG对象
//如下是调用图像(如果你要将它显示在TImage控件上的话)
AImage.Picture.LoadFromFile (YourFileNameOfPicture');
end;
TO:gzhk(gz) ABit.LoadFromStream(bs); 运行到这里时,出现"位图无效"的对话框.
---------------------------
---------------------------
Bitmap image is not valid.
------------------------------------------------------
TO: wangchinaking(助人为乐是快乐之本) 也在LoadFromStream处
我的执行结果是---------------------------
---------------------------
Access violation at address 004C0FA8 in module 'prjTest.exe'. Read of address 8BD88BA7.
---------------------------
确定
---------------------------
不过不是access做的数据库
我想应该差不多不错,读取一般的字段和读取图象字段是不同的
我记得要定义一些内存区代码我一时找不到了
如果你想看看
就给我发个email
我考试完毕后在给你发过去,好不?
(元旦期间可以给你)
[email protected]
qq 39369274
pjpg:tjpegimage;
pic:TMemoryStream;
begin
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
pic.positon:=0;
pjpeg.LoadFromStream(pic);
image.graphi.bmp.assign(pjpeg);
end;
我找到了代码中的一段
这是一个老师给我的
我抄下来的,如果调试不能通过,可能是有个别的单词写错了,你查一下帮助
var bmp:TBitmap
ms:TMemortyStream
begin
bmp:=TBitmap.Create;
ms:TMemoryStream.Create;
Query1.close;
Query1.sql.clear;
Query1.sql.add('insert into DatebaseName(a1,a2) values(:x1,:x2)');
bmp.LoadFromFile(filename);
bmp.SaveToStream(ms);
Query1.parambyname('x1').asstring:=edit1.text;
Query1.parambyname('x2').LoadFromStream(ms,ftblod);
Query1.execSql;
showmessage('图象已经存储');
edit1.text;='';
ms.free;
bmp.free;
Query1.close;
end;
这就可以将一个图象字段存储到数据库中了查看:
(同上面的定义变量对象)
bmp:=TBitmap.create
......
query1.sql.add(select * from DateBaseName where a1;=x1);
query1.parambyname('x1').asstring:=edit2.text;
....
if query1.recordcount<>0 then
begin
TblodField(query1.fieldbyname('x1').savetostream(ms));
ms.position:=0;///*******
bmp.loadfromstream(ms);
Image1.picture.bitmap:=bmp;//窗口中定义了一个image1对象
end;
else
showmessage('没有找到记录');
......省略号的部分表示与插入部分相同的代码你自己好好思考一下
我元旦后可以把整个调试好的程序给你发过去(email附件形式)
end;
var
tempstream:TStringStream;
tempjpeg:TJPEGImage;
begin
try
tempstream:=TStringStream.Create(' ');
TBlobField(adodataset1.FieldByName('photo')).SaveToStream(tempstream);
tempstream.Position:=0;
tempjpeg:=TJPEGImage.Create;
tempjpeg.LoadFromStream(tempstream);
DBImage1.Picture.Bitmap.Assign(tempjpeg);
finally
tempstream.Free;
tempjpeg.Free;
end;
end;
不是啊,就麻烦一点。如果还没有解决 mail :[email protected]
对,保存在字段里面的是OLE对象,而不是单纯的BMP或JPEG格式流.如果简单的从文件加载,保存入数据库再从里读出来是完全OK的.谢谢各位热心帮助! ^_^