既然用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 / \_/
你可以试一试用TMemoryStream代替Tstream看一看。
在服务端编写一个方法,返回指定记录的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 /
\_/
str.posion:=0;