我用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错,这是何原因,麻烦各位大哥帮忙看看,小弟万分感谢!

解决方案 »

  1.   

    LoadFromStream前加Stream.Position:=0另:DBImage是感知控件,不用转换就能显示了
      

  2.   

    不执行SQL提交,以with ClientDataSet1 do
      begin
      Append;
      FieldByName('imgid').Asstring := 1;
      TBlobField(FieldByName('imgsize')).LoadFromFile(FileName);
      Post;
      end;
    这样子提交到数据库问题少些,数据库字段为IMAGE类型
      

  3.   

    to kaikai_kk
    LoadFromStream前加Stream.Position:=0我加了这句保存没问题但用DBImage1直接连接数据库读取图片出却还是出Stream read error错,麻烦再帮看看,万分感谢!
    to case5166
    呵,因为某种原因我必须要用sql语句来实现,麻烦再帮看看,万分感谢!
      

  4.   

    TBlobField(ClientDataSet1.Params.ParamByName('_card_image1')).LoadFromFile();用这个试试,不知道可不可行
      

  5.   

    DBImage1.Picture.Graphic.SaveToStream(Stream); // 将图片保存到内存流中
    DBImage1有没有图片?改成添加用Image,显示用DBImage(DBImage只显示bmp)取图片是怎么取的?DBImage不用写代码,只关联datasource,dataset即可
      

  6.   

    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)来做就会报错,麻烦再帮看看,万分感谢
      

  7.   

    没人知道吗?
    我现在用的是ADOQuery1+DataSetProvider1+ClientDataSet1来操作的,我原来直接用ADOQuery1来操作是可以保存图片的,但加了DataSetProvider1+ClientDataSet1后就保存不了了是不是要设置DataSetProvider1里的什么属性呀,麻烦各位大哥帮看看,小弟万分感谢