读书人

关于通信时组包的有关问题

发布时间: 2012-08-10 12:19:33 作者: rapoo

关于通信时组包的问题
最近在做住房公积金的一个项目,但是有一段代码看不懂,请各位指教,我是新手。
请问一下try里面每一个fld的作用机制是怎样的?为什么sLine不断的被赋值,不会影响数据库信息吗?
function GenRtTxnThread.CompTxnDtl( qryData: TADOQuery;
sOutBank,sProtNo: String;
var sLine: String ): Boolean;
var
sTmp: String;
begin
Result := True;

try
// fld 1: 交易种类
sTmp := '100301';//固定填写
sLine := sTmp;

// fld 2: 报文类型
sTmp := '1202';//固定填写
sLine := sLine + sTmp;

// fld 3: 交易序号
sTmp := Format('%16s',[qryData.FieldByName('MsgId').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;

// fld 4: 委托日期
sTmp := trim(qryData.FieldByName('EntrustDate').AsString);
if length(sTmp) <> 8 then
sLine := sLine + FormatDateTime('YYYYMMDD',now)
else
sLine := sLine + sTmp;

// fld 5: 清算日期
sTmp := '00000000';
sLine := sLine + sTmp;

// fld 6: 用户编号
sTmp := Format('%-18s',[qryData.FieldByName('UserNo').AsString]);
sLine := sLine + sTmp;

// fld 7: 收费机构代码
sTmp := Format('%-12s',[qryData.FieldByName('OrgId').AsString]);
sLine := sLine + sTmp;

// fld 8: 机构分支代码
sTmp := Format('%-12s',[' ']);
sLine := sLine + sTmp;

// fld 9: 发起方开户行行号
sTmp := Format('%-12s',[qryData.FieldByName('OrigBank').AsString]);
sLine := sLine + sTmp;

// fld 10: 发起方开户账号
sTmp := Format('%-35s',[qryData.FieldByName('OrigAcc').AsString]);
sLine := sLine + sTmp;

// fld 11: 接收方代码(清算行号)
sTmp := Format('%-12s',[sOutBank]);
sLine := sLine + sTmp;

// fld 12: 接收方分支代码(付款人开户行行号)
sTmp := Format('%-12s',[qryData.FieldByName('OutAccBank').AsString]);
sLine := sLine + sTmp;

// fld 13: 付款人账号
sTmp := Format('%-35s',[qryData.FieldByName('PayerAcc').AsString]);
sLine := sLine + sTmp;

// fld 14: 付款人名称
sTmp := Format('%-60s',[qryData.FieldByName('PayerName').AsString]);
sLine := sLine + sTmp;

// fld 15: 业务种类
sTmp := trim(qryData.FieldByName('TranType').AsString);
sLine := sLine + sTmp;

// fld 16: 合同协议号
sTmp := Format('%-60s',[sProtNo]);
sLine := sLine + sTmp;

// fld 17: 交易货币代码
sTmp := Format('%-3s',[qryData.FieldByName('Currency').AsString]);
sLine := sLine + sTmp;

// fld 18: 金额
sTmp := Format('%15s',[qryData.FieldByName('Amount').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;

// fld 19: 手续费
sTmp := Format('%15s',[qryData.FieldByName('Charge').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;

// fld 20: 附言
sTmp := Format('%-60s',[qryData.FieldByName('Remark').AsString]);
sLine := sLine + sTmp;

// fld 21: 业务处理方流水
sTmp := '0000000000000000';
sLine := sLine + sTmp;

// fld 22: 返回码
sTmp := Format('%-8s',[' ']);
sLine := sLine + sTmp;

// fld 23: 主动缴费标识
sTmp := '0';//非主动缴费
sLine := sLine + sTmp;

// fld 24: 变长定制信息长度
sTmp := '00000000';
sLine := sLine + sTmp;



// fld 25: 密押(MAC)
sTmp := Format('%64s',[' ']);
sTmp := StringReplace(sTmp, ' ', 'C', [rfReplaceAll]);
sLine := sLine + sTmp;

except
on E: Exception do
begin
Result := False;
end;
end;
end;

[解决办法]
应该结合你的业务才能解释这段代码的用途,而这段代码就是就是把fld1~25算出来的sTmp加到sLine后,所以sLine这个字符串的内容就是最后需要的。
[解决办法]
就是根据 qryData 的各个字段,组合出一个字符串sLine

读书人网 >.NET

热点推荐