分布式系统开发,如何传递客户端数据?只要能给出比较理想的解决方法,300分送上,决不食言。(10分)

  • 主题发起人 主题发起人 nsj
  • 开始时间 开始时间
N

nsj

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1481747
 
可以用DataClient来进行传送。
 
有很多种方法呀!我的方法如下,不知道怎么样!
我用记录型数据:
1、定义
{ 职员基本信息结构 }
TClerkBasicInformation=record
ENO:string[8];
//编号
NAM:string[20];
//姓名
ROT:string[10];
//籍贯
SEX:string[1];
//性别
IDN:string[20];
//身份证号
FAD:string[30];
//家庭地址
ZIP:string[6];
//邮政编码
FTL:string[15];
//家庭电话
NAD:string[30];
//现在住址
NTL:string[15];
//联系电话
BTH:string[14];
//出生日期
CPL:string[6];
//婚姻状况
FDY:string[14];
//到职日期
TYP:string[8];
//上班方式
HIS:string[200];
//个人经历
end;
2、设置
{设置要提交的职员基本信息}
procedure SetClerkBasicInformation;
begin
with ClerkManageForm,ClerkBasicInformationdo
begin
ENO:=edtENO.Text;
NAM:=edtNAM.Text;
ROT:=edtROT.Text;
SEX:=inttostr(cbSEX.Items.IndexOf(cbSEX.Text));
IDN:=edtIDN.Text;
FAD:=edtFAD.Text;
ZIP:=edtZIP.Text;
FTL:=edtFTL.Text;
NAD:=edtNAD.Text;
NTL:=edtNTL.Text;
BTH:=edtBTH.Text;
CPL:=cbCPL.Text;
FDY:=datetostr(dtpFDY.Date);
TYP:=cbTYP.Text;
HIS:=mmHIS.Text;
end;
end;
3、提交
var
V:OleVariant;
P:Pointer;
RMSG:string;
begin
SetClerkBasicInformation;
if ClerkBasicInformation.ENO<>'' then
begin
V:=VarArrayCreate([0,SizeOf(ClerkBasicInformation)-1],varByte);
P:=VarArrayLock(V);
try
Move(ClerkBasicInformation,P^,SizeOf(ClerkBasicInformation));
finally
VarArrayUnLock(V);
end;
RMSG:=dmClient.DCOMConnection1.AppServer.AddClerkBasicInformation(V)
MessageBox(Handle,Pchar(RMSG),'提示',Mb_IconInformation);
end
else
MessageBox(Handle,'编号不能为空','提示',Mb_IconInformation);
服务端获取如下:
function TKLPOS.AddClerkBasicInformation(
SClerkInfo: OleVariant): WideString;
var
P:Pointer;
ClerkBasicInformation: TClerkBasicInformation;
ENO:string;
NAM:string;
ROT:string;
SEX:string;
IDN:string;
FAD:string;
ZIP:string;
FTL:string;
NAD:string;
NTL:string;
BTH:string;
CPL:string;
FDY:string;
TYP:string;
HIS:string;
SQL:widestring;
begin
P:=VarArrayLock(SClerkInfo);
try
Move(P^,ClerkBasicInformation,SizeOf(ClerkBasicInformation));
ENO:=ClerkBasicInformation.ENO;
NAM:=ClerkBasicInformation.NAM;
ROT:=ClerkBasicInformation.ROT;
SEX:=ClerkBasicInformation.SEX;
IDN:=ClerkBasicInformation.IDN;
FAD:=ClerkBasicInformation.FAD;
FTL:=ClerkBasicInformation.FTL;
ZIP:=ClerkBasicInformation.ZIP;
NAD:=ClerkBasicInformation.NAD;
NTL:=ClerkBasicInformation.NTL;
BTH:=ClerkBasicInformation.BTH;
CPL:=ClerkBasicInformation.CPL;
FDY:=ClerkBasicInformation.FDY;
TYP:=ClerkBasicInformation.TYP;
HIS:=ClerkBasicInformation.HIS;
//准备SQL语句
SQL:='insert into BMAN(BNENO,BNNAM,BNROT,BNSEX,BNIDN,BNFAD,BNZIP,BNFTL,BNNAD,BNNTL';
SQL:=SQL+',BNBTH,BNCPL,BNFDY,BNTYP,BNHIS) values('+ENO+','+Quotedstr(NAM)+','+Quotedstr(ROT)+',';
SQL:=SQL+Quotedstr(SEX)+','+Quotedstr(IDN)+','+Quotedstr(FAD)+','+Quotedstr(ZIP)+','+Quotedstr(FTL)+','+Quotedstr(NAD)+','+Quotedstr(NTL)+','+Quotedstr(BTH)+','+Quotedstr(CPL)+','+Quotedstr(FDY)+',';
SQL:=SQL+Quotedstr(TYP)+','+Quotedstr(HIS)+')';
fnOpenSQL('Select BNENO from BMAN where BNENO='+Quotedstr(ENO));
if adoOpenSQL.RecordCount>0 then
begin
result:='编号已存在,请重新指定!';
exit;
end;
try
fnExecSQL(SQL);
result:='操作成功';
except
result:='出现错误';
end;
finally
VarArrayUnLock(SClerkInfo);
end;
end;
 
自定义数据集
可以用楼上的方法
也可以用XML
 
如果是进行数据库的数据传送,请参照,李维先生写的“分布式多层应用-系统篇”!
如果是自定义数据的传送,可以采用楼上的做法自定义数据结构传送!
 
直接传递CLIENTDATASET的DELTA,在传输前经过加密与压缩,以加快速度,服务器端利用方法
来接收并更新即可
 
后退
顶部