procedure TForm1.Button1Click(Sender: TObject);
var
  MS: TMemoryStream;
begin
  MS:=TMemoryStream.create;
  Image1.Picture.Bitmap.SaveToStream(MS);
  MS.Position:=0;
  Table1.Append;
 //在数据库中添加一条记录
  table1.FieldByName('picname').AsString:='gmmdfg';
  TBlobField(Table1.FieldbyName('pic')).LoadFromStream(MS);
  Table1.Post;
end; 在存取图像的遇到一个问题是typecast是非法类,为什么,怎么解决?
有没有其他的办法呢?

解决方案 »

  1.   

    你把TMemoryStream换成TFileStream呢?
      

  2.   

    写入Blob字段的方法
    读出、写入借助stream。
    写入:
    var 
    ms:tmemorystream;
    begin
      ms:=TmemoryStream.Create;
      ms.Loadfromfile(“1.jpg”);
     if ms.size>0 then
     begin
       ms.position:=0;
       (Clientdateste1.fieldbyname('dipicture') as Tblobfield).loadfromstream(ms);
     end ;
    end;读出:
     var 
      ms:tstream;
      myjpg:tjpegImage;
    begin
      ms:=clientdataset1.createblobstream(clientdataset1.fieldbyname('dipicture'),bmread);
    if ms.size>0 then
    begin
      ms.position:=0;
      myJpg:=tjpegimage.create;
      myJpg.loadFromstream(ms);
      Image1.Picture.assign(myjpg);//在Image1中显示出来
    end;
    end;
      

  3.   

    上面这个问题已经解决,现在又出现这样一个问题:在SQL server用binary格式存图像遇到这样一个问题,说invalid blob length 如果我在ACCESS里用OLE字段,却没有这个问题,为什么?在SQLserver里面怎么解决?谢谢!@
      

  4.   

    使用image类型还是这个问题,不行啊
      

  5.   

    你是否使用了BDE,如果是,应该修改BDE的Blob Size属性