我要在SQL Server的Image字段中存储一个200K的JPEG文件,但是出现了“Invalid BLOB length.”的信息,试验后Image字段只能存储22K的JPEG文件,请问各路高手是不是Image字段只能存储22K的JPEG文件?我要存储一个200K的JPEG文件该怎么办?

解决方案 »

  1.   

    image大小为2 147 483 647字节即2GB
    你可以这样写
        jpeg:= TJPEGImage.Create;
         try
           jpeg.LoadFromFile(filename);
           try
             bmp:= TBitmap.Create;
             bmp.Assign(jpeg);
             with ADOQuery_image do
             begin
               edit;
               ADOQuery_imagefield1.Assign(bmp);
             end;
         finally
           bmp.free
         end;
       finally
         jpeg.free
       end;
      

  2.   

    就是呀.SQLServer不会这么差的.只存22K的内容,不可能.
      

  3.   

    恩,BLOB字段可以放2G大小的。显示的话按流的方式读入JPEG数据应该可以的。
      

  4.   

    设置BDE或DATABASE的BLOB SIZE,将其值设的大一些(单位K)默认值较小。
      

  5.   

    我用了3 种方法,代码如下:
    方法1:
    Var
      jpeg: TjpegImage;
      Bmp:TBitmap;
    begin
      jpeg:= TJPEGImage.Create;
      If OPenPictureDialog1.Execute Then
         try
           jpeg.LoadFromFile(OpenPictureDialog1.FileName);
           try
             bmp:= TBitmap.Create;
             bmp.Assign(jpeg);
             with Table1 do
             begin
               Append;
               FieldByName('ImagePhoto').Assign(bmp);
               Post;
             end;
         finally
           bmp.free
         end;
       finally
         jpeg.free
       end;end;方法2:
    Var
      MemSt: TMemoryStream;
    begin
      MemSt := TMemoryStream.Create;
      If OpenPictureDialog1.Execute Then
      Try
        MemSt.LoadFromFile(OpenPictureDialog1.FileName);
        Table1.Append;
        (Table1.FieldByName('Imagephoto') as TBlobField).LoadFromStream(MemSt);    Table1.Post;
      Finally
         MemSt.Free;
      End;
    end;方法3:
    Var
      jpeg: TjpegImage;
      Bmp:TBitmap;
    begin
      jpeg:= TJPEGImage.Create;
      If OPenPictureDialog1.Execute Then
         try
           jpeg.LoadFromFile(OpenPictureDialog1.FileName);
           try
             bmp:= TBitmap.Create;
             bmp.Assign(jpeg);
             with Table1 do
             begin
               Append;
               FieldByName('ImagePhoto').Assign(bmp);
               Post;
             end;
         finally
           bmp.free
         end;
       finally
         jpeg.free
       end;
    end;但是运行到POST时,或是在其他地方使用REFRESH都会报错:Invalid BOLB length.
    BDE 中BLOB SIZE 设置为32K,BOLB BOLB TO CACHE 的设置为64K.请大家给我看看是什么地方不对了,谢谢了.
      

  6.   

    用BDE时因为BDE引擎的问题,而且BDE的设置字段大小是有限制的,因此用BDE时会碰到那样的问题,用ADO就不会了。
      

  7.   

    用image字段肯定没问题,
    1.TMemoryStream ms;
    2.TYourJpegImage.SaveToStream(ms);
    3.TYourBlobField.LoadFromStrem(ms).
      

  8.   

    Sqlserver可以寸2G
    而如果你用BDE那么BDE大小有限制,你可以修改它!
    用ADO好象没有限制(或许有我还没用到这么大)
      

  9.   

    如果是用的BDE
    把Database的
    BLOB SIZE=32
    改成
    BLOB SIZE=10240