业务逻辑扩展为COM+带来的奇怪问题 |
缺席
|
yynsm
一般會員 發表:1 回覆:0 積分:0 註冊:2007-10-12 發送簡訊給我 |
最近我把原来的系统扩展为分布式系统时出现了一个奇怪的问题:
我把原来login模块的业务逻辑封装成com 服务, 在CLIENT调用这个模块不管USERID和PASSWORD怎么输入 SERVER都会判断认为能够login 关于业务逻辑的代码为: [code delphi] function Tloginlogic.check(userid,password:string):boolean; begin with logindb do //logindb是自己写的数据库类 就定义了adoconnection和adoqurey(qry_login) begin qry_login.sql.Clear; qry_login.sql.Add('select * from IdPassword where LoginId="' userid '" and Password="' password '" ') ; qry_login.Open; if logindb.qry_login.RecordCount<>0 then result:=true else result:=false; end; end; [/code] COM 的接口代码为: [code delphi] unit ILogin; {$WARN SYMBOL_PLATFORM OFF} interface uses Windows, ActiveX, Classes, SysUtils, ComObj, JbcarmanagerSvr_TLB, StdVcl; type TLoginObj = class(TTypedComObject, ILoginObj) protected function check(const userId, password: WideString): WordBool; stdcall; {Declare ILogin methods here} end; implementation uses ComServ,Unit_loginlogic; function TLoginObj.check(const userId, password: WideString): WordBool; var mylogin:Tloginlogic; begin mylogin:= Tloginlogic.create(nil); result:= mylogin.check(userId,password); freeandnil(mylogin); end; initialization TTypedComObjectFactory.Create(ComServer, TLoginObj, Class_LoginObj, ciMultiInstance, tmApartment); end. [/code] 现在的问题是不管我输入的userId和Password是否正确 SERVER都会判断为check方法返回true 更奇怪的是 [code delphi] function Tloginlogic.check(userid,password:string):boolean; begin with logindb do //logindb是自己写的数据库类 就定义了adoconnection和adoqurey(qry_login) begin qry_login.sql.Clear; qry_login.sql.Add('select * from IdPassword where LoginId="' userid '" and Password="' password '" ') ; qry_login.Open; if logindb.qry_login.RecordCount<>0 then result:=true //我在这里把result赋值改为false 此方法返回依然是true!!我都不知道这个true怎么来的。。。 else result:=false; end; end; [/code] 这个业务逻辑在没扩展为COM 的时候运行一点问题都没有 但是现在却有这样的问题。。。真实郁闷哦。。。 我用的是DELPHI7。。。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |