三层结构客户端无法得到正确的中间层产生的错误讯息~~~ |
答題得分者是:Mickey
|
asrock
一般會員 發表:4 回覆:7 積分:2 註冊:2007-05-16 發送簡訊給我 |
三层结构,socket连接方式,客户登录验证的语句都写在中间层,中间层(应用程序服务器)的验证代码如下:
[code delphi] function TCommons.CheckUser(const cDBName: WideString; const cUserNO, cPWD: WideString): WordBool;safecall; var sSQL:String; ADOQuery:TADOQuery; begin try //{----------------------------------------------------------------------------------------} sSQL:='Select * From tUser Where fNO = ' vartosql(cUserNO) ' and fPassWord = ' vartosql(cPWD) ' and fKindID = 1'; ADOQuery:=GetNewADOQuery; if OpenindicatinnDB(cDBName) then begin aOpenSQL:=TOpenSQL.Create(ADOQuery, sSQL); aOpenSQL.Execute; {*****************************************} if ADOQuery.RecordCount>0 then Result:= True else Result:= false; end else Result:=False; finally FreeExistADOQuery(ADOQuery); aOpenSQL.Free; end; end [/code] 客户端的写法如下: [code delphi] function CheckUser(const cUserNO: WideString; const cPWD: WideString): Boolean;safecall; //检查用户的合法性 begin Result:= poSCN.AppServer.CheckUser(psDBName, cUserNO, cPWD); end; [/code] 大家可以注意看一下,正常运行的情况下,系统运行是没有问题的,但是,如果我把中间层中的判断代码部份: sSQL:='Select * From tUser Where fNO = ' vartosql(cUserNO) ' and fPassWord = ' vartosql(cPWD) ' and fKindID = 1'; 中的数据库字段名称改掉,如fNO改成fNO1,在调试状态会报中间层"列fNO1无效",但是点生成的程序运行时,客户端进入时会报“灾难性故障”,也就是说中间层产生的错误没有正确的传给客户端,要用什么样的方法才可以保证将中间层的错误传给客户端呢,高手指教~~~ 編輯記錄
GrandRURU 重新編輯於 2016-05-15 18:32:08, 註解 無‧
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
你好:
我用 SOAP...應該機制是一樣的吧....提供參考 TSOAPApp = class(TSoapDataModule, ISOAPApp, IAppServerSOAP) ..... protected function HandleCreateException(): Boolean; override; function TSOAPApp.HandleCreateException: Boolean; begin Result := False; // Pass All Exception to End Client end; |
asrock
一般會員 發表:4 回覆:7 積分:2 註冊:2007-05-16 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
asrock
一般會員 發表:4 回覆:7 積分:2 註冊:2007-05-16 發送簡訊給我 |
===================引 用 Mickey 文 章=================== 你目的是希望客戶端收到 "列fNO1无效" 這樣的 Exception 吧.....所以不能讓 Exception Handled 變 True....否則 Exception 的處理止於 AP Server 端. ===================引 用 asrock 文 章=================== 不太理解,但是好像和我上面写的没有什么区别吧~~~~~~ ================================================== 但是我在这里已经有过这样的处理了啊: else Result:=False; |
asrock
一般會員 發表:4 回覆:7 積分:2 註冊:2007-05-16 發送簡訊給我 |
|
asrock
一般會員 發表:4 回覆:7 積分:2 註冊:2007-05-16 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |