我要加入图片到XQXXB表中去
var
picture1:Tpicture;
begin
picture1:=Tpicture.Create;
  If OpenPictureDialog1.Execute Then
  begin
  picture1.LoadFromFile(OpenPictureDialog1.FileName);
  XQXXB.FieldByName('照片').Assign(picture1);
  end;
添加后保存老是报错:invaild blob length
sqlserver 存储图片的字段是用的image 类型
是bde的问题还是sqlserver的问题
用ado连接好象就没有这样的问题
请问该如何解决才好

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/3697/3697056.xml?temp=.8283502
      

  2.   

    //测试通过
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MfileStream : Tfilestream;
      MStringStream : TStringStream;
      XQXXB : Tadoquery;
    begin
      If OpenPictureDialog1.Execute Then
      begin
        try
          XQXXB:=Tadoquery.Create(self);
          XQXXB.Connection:=ADOConnection1;
          MfileStream.Create(OpenPictureDialog1.FileName,fmOpenRead);
          MStringStream:=TStringStream.Create('');
          MStringStream.CopyFrom(MfileStream,MfileStream.Size);
          XQXXB.SQL.Add('Insert into XQXXB ( 照片 ) values (:zhaopian)');
          XQXXB.Parameters.ParamByName('zhaopian').LoadFromStream(MStringStream,ftBlob);
          XQXXB.ExecSQL;
        finally
          freeandnil(MfileStream);
          freeandnil(XQXXB);
          freeandnil(MStringStream);
        end;
      end;
    end;
      

  3.   

    我是 用 的bdetable 不是ado 
      

  4.   

    那我的在post的时候,为什么会显示invaild  blob  length ,好象是bde有个选项是设置可存储图片大小的不
     
      

  5.   

    XQXXB.ParamByName('图片').LoadFromFile(OpenPictureDialog1.FileName, ftBlob);//试试吧
      

  6.   

    XQXXB.ParamByName('zhaopian').LoadFromStream(MStringStream,ftBlob);
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var 
    MyJPEG : TJPEGImage;
    MS: TMemoryStream;
    begin
    MyJPEG := TJPEGImage.Create;
     try
        with MyJPEG do
        begin
          Assign(Image.Picture.Graphic);
          MS:=TMemoryStream.create;
          SaveToStream(MS);
          MS.Position:=0;
                    Table1.Edit;
                     TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
                     Table1.Post;
                     messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);          
        end;
      finally
        MyJPEG.Free;
      end;
    end;
      

  8.   

    //读取
    procedure TForm1.Button1Click(Sender: TObject);
    var tempstream:TStringStream;
       tempjpeg:TJPEGImage; 
    begin
       try
            tempstream:=TStringStream.Create(' ');     
            TBlobField(Query1.FieldByName('Image')).SaveToStream(tempstream);            
            tempstream.Position:=0;
            tempjpeg:=TJPEGImage.Create;
            tempjpeg.LoadFromStream(tempstream);
            DBImage1.Picture.Bitmap.Assign(tempjpeg);
      finally
            tempstream.Free;
            tempjpeg.Free;
      end;
    end;