線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2011
推到 Plurk!
推到 Facebook!

三层结构客户端无法得到正确的中间层产生的错误讯息~~~

答題得分者是:Mickey
asrock
一般會員


發表:4
回覆:7
積分:2
註冊:2007-05-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-17 09:33:55 IP:221.194.xxx.xxx 訂閱
三层结构,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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-17 10:17:12 IP:218.163.xxx.xxx 訂閱
你好:

我用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-17 10:35:30 IP:221.194.xxx.xxx 訂閱
不太理解,但是好像和我上面写的没有什么区别吧~~~~~~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-17 11:02:12 IP:218.163.xxx.xxx 訂閱
你目的是希望客戶端收到 "列fNO1无效" 這樣的 Exception 吧.....所以不能讓 Exception Handled 變 True....否則 Exception 的處理止於 AP Server 端.
===================引 用 asrock 文 章===================
不太理解,但是好像和我上面写的没有什么区别吧~~~~~~
asrock
一般會員


發表:4
回覆:7
積分:2
註冊:2007-05-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-17 11:17:44 IP:221.194.xxx.xxx 訂閱

===================引 用 Mickey 文 章===================
你目的是希望客戶端收到 "列fNO1无效" 這樣的 Exception 吧.....所以不能讓 Exception Handled 變 True....否則 Exception 的處理止於 AP Server 端.
===================引 用 asrock 文 章===================
不太理解,但是好像和我上面写的没有什么区别吧~~~~~~

==================================================

但是我在这里已经有过这样的处理了啊:
else
Result:=False;
asrock
一般會員


發表:4
回覆:7
積分:2
註冊:2007-05-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-17 11:22:01 IP:221.194.xxx.xxx 訂閱
我是新手,刚学,老大不要笑我
asrock
一般會員


發表:4
回覆:7
積分:2
註冊:2007-05-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-17 11:29:19 IP:221.194.xxx.xxx 訂閱
Mickey 老大,能不能帮我改一下,我真的不知道怎么改了,你给出的代码中定义的:
TSOAPApp = class(TSoapDataModule, ISOAPApp, IAppServerSOAP)
改成我能用的不知道如何改了
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-17 15:11:29 IP:218.163.xxx.xxx 訂閱
我跟你用的架構不同...恐怕難幫上忙...只時提個觀念...搞不好完全不能用....

所以...等等有緣人唄...KTop...熱心的人很多...^^
===================引 用 asrock 文 章===================
Mickey老大,能不能帮我改一下,我真的不知道怎么改了,你给出的代码中定义的:
TSOAPApp = class(TSoapDataModule, ISOAPApp, IAppServerSOAP)
改成我能用的不知道如何改了
系統時間:2017-12-16 20:41:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!