博主自写的三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子。
效果图如下:
例子源码下载:http://Delphi盒子上还未审核。现在已审核!下载地址为:http://sd.2ccc.com/downloads/simples/database/xieyunc_RDMRecordDemo.rar
csdn已审核了:http://download1.csdn.net/down3/20070320/20145824710.rar
关键代码:
/*================================================ 单元名称:Comm 单元功能:定义了一个记录类型TARec,这一文件Server和Client中都要引用 作者:小宇飞刀(http://xieyunc.blog.163.com/) 修改日期:2007-03-20 13:56:39 ================================================*/ unit Comm; interface uses SysUtils,Variants; type TARec=Record //自定义的记录类型 Name:ShortString; Age:ShortInt; end; function RecordToVariant(value:TARec):OleVariant; //有问题,好象只能传递第一个成员的值 function VariantToRecord(value:OleVariant):TARec; //有问题 function RecordToVariant2(aRec:TARec):OleVariant;//Writed by 小宇飞刀(xieyunc) function VariantToRecord2(vData:OleVariant):TARec;//Writed by 小宇飞刀(xieyunc) implementation // TARec ---> Variant function RecordToVariant(value:TARec):OleVariant; var P:Pointer; ii:Integer; begin ii := sizeof(TARec); Result := VarArrayCreate([0,ii],varByte); P := VarArrayLock(Result); Move(value,P^,sizeof(P)); VarArrayUnlock(Result); end; // OleVariant ----> TARec function VariantToRecord(value:OleVariant):TARec; var P:Pointer; ii:Integer; begin ii := sizeof(TARec); P:= VarArrayLock(value); Move(P^,Result,ii); VarArrayUnlock(value); end; function RecordToVariant2(aRec:TARec):OleVariant;//Writed by 小宇飞刀(xieyunc) begin Result:=VarArrayCreate([0,1],VarVariant); Result[0] := aRec.Name; Result[1] := aRec.Age; end; function VariantToRecord2(vData:OleVariant):TARec;//Writed by 小宇飞刀(xieyunc) begin if VarIsArray(vData) then begin Result.Name := vData[0]; Result.Age := vData[1]; end; end; end.