你在数据库中存的是BMP格式吗?     ____     ____
     \ p \   / g /
      \ l \_/ n /
       \ a   o /
        \ i s /
         \ n /
          \_/

解决方案 »

  1.   

    是BMP格式的图片存在SQL SERVER数据库的BLOBField字段。因为我开发的是分布式多层应用系统,所以必须得用TClientDastSet控件,但用TClientDastSet控件从应用程序服务器中取出的图片是全是黑的。其实用用QUERY或TABLE取出的图片是正常的,只不过我不能用它们。
      

  2.   

    至少证明了一件事:数据库中的图片数据格式是有效的。
    你可以试一试用TMemoryStream代替Tstream看一看。
      

  3.   

    TBlobStream,TMemorySstream,TStream都试过了,读出来的也都是黑的。
      

  4.   

    既然用TQuery可以而用TClientDataset不行,你试着换一种方法:
    在服务端编写一个方法,返回指定记录的Blob字段(假设为GetBlob):
    function MyServer.GetBlob(Key:KeyType):OleVariant;//KeyType改为正确的类型.
    var
      BlobField:TBlobField;
      BlobStream:TStream;
      PtrData:PByte;
    begin
      ...
      //取得正确的BlobField
      BlobStream := TBlobStream.Create(BlobStream,bmRead);
      Result := VarArrayCreate([0,BlobStream.Size-1],varByte);
      PtrData := VarArrayLock(Result);
      BlobStream.Read(PtrData^,BlobStream.Size);
      BlobStream.Free;
      VarArrayUnlock(Result);
    0Aend;
    在客户端读出来:
    var
      PtrData:PByte;
      VarData:OleVariant;
      MemStream:TStream;
    ...
      VarData := RServer.AppServer.GetBlob(MyKeyData);
      PtrData := VarArrayLock(VarData);
      MemStream := TMemoryStream.Create;
      MemStream.Write(PtrData^,VarArrayHighBound(VarData,1)+1);
      VarArrayUnlock(VarData);
    0A  image1.Picture.Bitmap.LoadFromStream(MemStream);
      MemStream.Free;     ____     ____
         \ p \   / g /
          \ l \_/ n /
           \ a   o /
            \ i s /
             \ n /
              \_/
      

  5.   

    数据流的posion要重新设置为0
    str.posion:=0;