使用TBlobstream来存取数据,同时TDatabase中的属性BlobSize确定了可以存取的最大Blob字段数据大小,这个值缺省为32,表示32K.你可能需要将它改大一些。 

解决方案 »

  1.   

    invalid blob length 错误,要在BDE Administratro中,相应的数据库别名处设置,
    把BlobSize,和Blobs to cache都调大一些,注意:够用就行,不要调的太大。
    用一个image控件下面是一个简单的例子。JPEG的写入图片
    procedure TForm1.Button1Click(Sender: TObject);
    var ms: TStream;
        bm: TJpegImage;
    begin
    if OpenPictureDialog1.Execute then
      begin
      table1.Open;
      table1.Append;
      bm := TJpegImage.Create;
      bm.LoadFromFile(OpenPictureDialog1.FileName);
      image1.Picture.Graphic := bm;
      Table1.Edit;
      ms := Table1.CreateBlobStream(table1.FieldByName('test'), bmWrite);
      image1.Picture.Graphic.SaveToStream(ms);
      Table1.Post;
      bm.Free;
      end;
      ms.Free;
    end;从数据库中读取图片
    procedure TForm1.Button2Click(Sender: TObject);
    var ms: TStream;
        bm :TjpegImage;
    begin
    if table1.Active then
      begin
      bm := TjpegImage.Create;
      ms := Table1.CreateBlobStream(table1.FieldByName('test'), bmRead);
      bm.LoadFromStream(ms);
      image1.Picture.Assign(bm);
      bm.Free;
      ms.Free;
      end;
    end;
      

  2.   

    foxling(阿飞林)大侠,您以上的程序我试了一下,可以通过,但有一warning,如下:
    [warning]unit1.pas(47):variable 'ms' might not have been initialied
    请问这是什么意思,应该如何解决???
      

  3.   

    把button1结尾处代码
      bm.Free;
      end;
      ms.Free;
    该为
      bm.Free;
      ms.Free;
      end;就行了。