一个用DBImage1读取图片出Stream read error错的问题

yangzong20 2012-03-13 09:57:39
我用ClientDataSet1来insert一张bmp图片进数据库代码如下

var
Stream:TMemoryStream;
begin



try
Stream := TMemoryStream.Create; // 创建内存流
DBImage1.Picture.Graphic.SaveToStream(Stream); // 将图片保存到内存流中
ClientDataSet1.close;
ClientDataSet1.CommandText :='Insert into student (image1) values(:_card_image1)';
ClientDataSet1.Params.ParamByName('_card_image1').LoadFromStream(Stream,ftBlob); // 读取保存的内存图
ClientDataSet1.Execute;
finally
Stream.Free; // 释放内存流
end;


因为我必须要用Insert语句来实现插入图片的方法所以我找到了这个方法,但奇怪的是我保存的时候没出错,但是用DBImage1读取图片出Stream read error错,这是何原因,麻烦各位大哥帮忙看看,小弟万分感谢!
...全文
248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangzong20 2012-03-20
  • 打赏
  • 举报
回复
没人知道吗?
我现在用的是ADOQuery1+DataSetProvider1+ClientDataSet1来操作的,我原来直接用ADOQuery1来操作是可以保存图片的,但加了DataSetProvider1+ClientDataSet1后就保存不了了是不是要设置DataSetProvider1里的什么属性呀,麻烦各位大哥帮看看,小弟万分感谢
yangzong20 2012-03-13
  • 打赏
  • 举报
回复
to kaikai_kk
DBImage1.Picture.Graphic.SaveToStream(Stream); // 将图片保存到内存流中
DBImage1有没有图片?改成添加用Image,显示用DBImage(DBImage只显示bmp)

在DBImage1里是有图片的我是通过
if OpenDialog1.Execute() then
begin
DBImage1.Picture.LoadFromFile(OpenDialog1.FileName);
end;

来添加图片,而且添加的都是bmp图片,添加的时候没报错,而且我用DBImage是直接关联数据库的,没写任何代码
我用access(OLE 对象)来做是显示正常的,但换成sql server(image)来做就会报错,麻烦再帮看看,万分感谢
kaikai_kk 2012-03-13
  • 打赏
  • 举报
回复
DBImage1.Picture.Graphic.SaveToStream(Stream); // 将图片保存到内存流中
DBImage1有没有图片?改成添加用Image,显示用DBImage(DBImage只显示bmp)

取图片是怎么取的?DBImage不用写代码,只关联datasource,dataset即可
我看见佛 2012-03-13
  • 打赏
  • 举报
回复
TBlobField(ClientDataSet1.Params.ParamByName('_card_image1')).LoadFromFile();

用这个试试,不知道可不可行
yangzong20 2012-03-13
  • 打赏
  • 举报
回复
to kaikai_kk
LoadFromStream前加Stream.Position:=0

我加了这句保存没问题但用DBImage1直接连接数据库读取图片出却还是出Stream read error错,麻烦再帮看看,万分感谢!


to case5166
呵,因为某种原因我必须要用sql语句来实现,麻烦再帮看看,万分感谢!

我看见佛 2012-03-13
  • 打赏
  • 举报
回复
不执行SQL提交,以

with ClientDataSet1 do
begin
Append;
FieldByName('imgid').Asstring := 1;
TBlobField(FieldByName('imgsize')).LoadFromFile(FileName);
Post;
end;
这样子提交到数据库问题少些,数据库字段为IMAGE类型
kaikai_kk 2012-03-13
  • 打赏
  • 举报
回复
LoadFromStream前加Stream.Position:=0

另:DBImage是感知控件,不用转换就能显示了

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧