请教各位高人:怎样从三层结构中(MIDAS)的数据库中提取BLOB字段的值?急!!! TBlobField(ClientDataSet1.FieldByName('Data')).SaveToFile('xxxx.xxx')不行吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (Query2.FieldByName('Name') as TBlobField).SaveToStream(MyStream); MIDAS在使用ClientDataset的BlobField时会有些问题,不要用它去获得数据.在服务程序的TypeLibrary中为服务接口加一个方法,返回值为Varaint;function MySvr.GetBlob:OleVariant;var PtrData: PByte; DataLen: Integer; BlobStream:TBlobStream;begin BlobStream := TBlobStream.Create(FieldByName('blob_value') as TBlobField, bmRead); DataLen := BlobStream.Size; Result := VarArrayCreate([0,DataLen-1],varByte); PtrData := VarArrayLock(Result); BlobStream.Position := 0; BlobStream.Read(PtrData^,DataLen); VarArrayUnlock(Result); BlobStream.Free;end;客户端:var VtData:OleVariant; PtrData:PByte; MemStream:TMemoryStream; DataLen:Integerbegin VtData :=DCOMConnection1.AppServer.GetBlob; DataLen := VarArrayHighBound(VtData,1)+1; MemStream := TMemoryStream; PtrData := VarArrayLock(VtData); MemStream.Write(PtrData^, DataLen); VarArrayUnLock(VtData); MemStream.Position := 0 ; //此时数据就在MemStream中. ...end;此外,我觉得你应该用OleContainer.SaveToStream把数据存到数据库中,这样就可以用OleContainer.LoadFromStream直接读取数据,不需要文件了.不过我没试过直接把文件存进去能不能用OleContainer.LoadFromStream直接读取,你可以试试 如何将多个表导出到EXCEL,里不同的工作表? 在于一个sql语句的问题 站在2008门口, 发点分吧. 谁知道installshield for d5,d6,d7在哪儿下载啊,谢谢 delphi http访问问题,高手进(急) 在线急~!如何设置progressbar? 请问用sql语句查询时如何使排序结果按规定顺序显示 如何在 delphi 中使用 OCX???? 用Indy组件接收邮件问题 关于qq中发送聊天内容的屏蔽字 Lotus Notes教程 为什么打ADO的补丁,打了1后,再打2,却提示要我先打1,然后一看,ADO控件全没有了。
在服务程序的TypeLibrary中为服务接口加一个方法,返回值为Varaint;
function MySvr.GetBlob:OleVariant;
var
PtrData: PByte;
DataLen: Integer;
BlobStream:TBlobStream;
begin
BlobStream := TBlobStream.Create(FieldByName('blob_value') as TBlobField, bmRead);
DataLen := BlobStream.Size;
Result := VarArrayCreate([0,DataLen-1],varByte);
PtrData := VarArrayLock(Result);
BlobStream.Position := 0;
BlobStream.Read(PtrData^,DataLen);
VarArrayUnlock(Result);
BlobStream.Free;
end;客户端:
var
VtData:OleVariant;
PtrData:PByte;
MemStream:TMemoryStream;
DataLen:Integer
begin
VtData :=DCOMConnection1.AppServer.GetBlob;
DataLen := VarArrayHighBound(VtData,1)+1;
MemStream := TMemoryStream;
PtrData := VarArrayLock(VtData);
MemStream.Write(PtrData^, DataLen);
VarArrayUnLock(VtData);
MemStream.Position := 0 ;
//此时数据就在MemStream中.
...
end;此外,我觉得你应该用OleContainer.SaveToStream把数据存到数据库中,这样就可以用OleContainer.LoadFromStream直接读取数据,不需要文件了.不过我没试过直接把文件存进去能不能用OleContainer.LoadFromStream直接读取,你可以试试