如何在DCOM中封装数据库?(200分)

  • 主题发起人 主题发起人 sdutsyt
  • 开始时间 开始时间
S

sdutsyt

Unregistered / Unconfirmed
GUEST, unregistred user!
我采用面向对象的方法分析系统,提出了一系列类,这些类在实
现阶段对应着数据库中的表。
我想问的问题是如何把数据库中表的一条记录转换成一个对象?
还有就是如何使用DCOM封装这些类以实现对数据库的封装?
 
看看对你有帮助吗?
将Datasets的数据DCOM方式传递
procedure CreateVarArrayFromDataset(var varResultSet: OleVariant;

ADataset : TDataset);

var

m : Integer;

nRecords, nColumns, nCurRec : Integer;

begin

nRecords := -1;

nColumns := -1;



try

{ 生成数组... }

{ 大小为 0..m-1 , m 等于行数. }

nColumns := Max(0, ADataset.FieldCount-1);



{ 每一元素是大小 (0..n) 的数组,n 等于记录数 }

{ 第0个元素存贮显示字段名. }



nRecords := Max(0, ADataset.RecordCount);



varResultSet := VarArrayCreate([0, nColumns, 0, nRecords],

varVariant);



for m := 0 to nColumns do

varResultSet[m, 0] := ADataset.Fields[m].DisplayLabel;



ADataset.First;

nCurRec := 1; { nCurRec记录当前记录号. }

while not ADataset.Eof do begin

{ 赋字段值. }

for m := 0 to nColumns do

varResultSet[m, nCurRec] := ADataset.Fields[m].Value;



ADataset.Next;

Inc(nCurRec);

end;

except

on E: Exception do

raise Exception.Create('CreateVarArrayFromDataset() - ' +

IntToStr(nRecords) +

' rec,'+IntToStr(nColumns)

+'cols,'+E.Message);

end;

end;
 
那怎么把OleVariant中的数据转化为DataSet的记录呢?
 
Brave的方法在葵花宝典中也有,但是具体使用时好像有问题:把结果赋值给ClientDataSet时会出现异常。
前几天我看了一些和ClientDataset有关的源代码,发现了一个很简单的方法:

function TransDataset(var TransCount: integer; ADataset: TDataset): OleVariant;
var
DPW: TDataPacketWriter;
ADate: OleVariant;
begin
try
DPW := TDataPacketWriter.Create;
DPW.PacketOptions := [grMetaData];
DPW.GetDataPacket(ADataSet, TransCount, AData);
finally
DPW.Free;
end;
end;

说明:TransCount是要取得的记录数目,传递时如果为-1代表全部,否则就是
要取得的数目。调用成功后返回实际取得的记录数。
函数的返回值可以直接赋值给ClientDataset.Data
 
多谢各位
 
后退
顶部