完全可以的,如果要访问与数据库操作相关的函数,注意TADOCONNECTION之类的连接控件不要放在ServerContaintUnit1容器中,直接在ServerMethodsUnit1自已初始化,这样的话,ServerMethodsUnit1完全剥离了,做到了与其他文件无关性,比如下面这个例子,就调用了uServerMethods中的CheckFeeRecord和AddFeeRecord接口: unit uCheckBankLog;
function GetBankConfig:Boolean; function GetBankAccountsFileName(const dt:TDate):string;//获取银行对帐单文件名 function SplitBankRecord(const TxtStr:string;out custsn,buyer_id,xiaoqu_id,room_id,je:string):Boolean; function CheckBankRecord(const dt_zdrq:TDate;const Memo1:TMemo=nil):Boolean;overload; //检查某一帐单日期下的所有帐目 function CheckBankRecord(const fn:string;const Memo1:TMemo=nil):Boolean;overload; function BankAccountFileExists(const dt:TDate):Boolean; function BankAccountIsChecked(const dt:TDate):Boolean; function GetCheckBankAccountTimeInterval:Cardinal;
... //对帐接口服务器中的对帐函数,对交易方(如银行、支付宝)推送过来的交易日志文件,进行逐一对帐 function CheckBankRecord(const fn:string;const Memo1:TMemo=nil):Boolean;overload; var sList:TStrings; txtStr,fn_checked,fn_errored:string; custsn,buyer_id,xiaoqu_id,room_id,je:string; i: Integer; vobj: TServerMethods; KeyNumberStr,sRult,ss:string; begin Result := True; fn_checked := fn+'.checked'; fn_errored := fn+'.errored'; if not FileExists(fn) then Exit;
sList := TStringList.Create; KeyNumberStr := GetKeyNumber; vobj := TServerMethods.Create(nil); try try sList.LoadFromFile(fn); for i := 0 to sList.Count-1 do begin txtStr := sList[i]; if not SplitBankRecord(txtStr,custsn,buyer_id,xiaoqu_id,room_id,je) then begin uSrvParamReadWrite.LogInfo(fn+':'+txtStr+'字段解析失败!'); Exit; end; ss := custsn+'|'+buyer_id+'|'+xiaoqu_id+'|'+room_id+'|'+je;
//if not fd_tmp.Locate('custsn;buyer_id;xiaoqu_idroom_id;tranamt',([bank_custsn,bank_buyer_id,bank_xiaoqu_id,bank_room_id,bank_je]),[]) then if vobj.CheckFeeRecord(buyer_id,xiaoqu_id,room_id,je,custsn,LeftStr(custsn,3),KeyNumberStr)<>'0' then //对帐失败 begin sRult := vobj.AddFeeRecord(buyer_id,xiaoqu_id,room_id,je,custsn,LeftStr(custsn,3),KeyNumberStr); //ss := custsn+'|'+je+'|'; if sRult='0' then //充值成功 begin ss := ss+'冲正成功'; end else begin ss := ss+'冲正失败'; LogInfo(fn_errored,ss+sRult); //Result := False; end; end else ss := ss+'交易正常'; LogInfo(fn_checked,ss); if Memo1<>nil then Memo1.Lines.Add(ss); Application.ProcessMessages; end; //end ... for ... except end; finally FreeAndNil(sList); FreeAndNil(vobj); end; end;
----------------------------------------------
-