三层结构,socket连接方式,客户登录验证的语句都写在中间层,中间层(应用程序服务器)的验证代码如下:<br />
<textarea class="delphi" rows="10" cols="60" name="code">
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
</textarea>客户端的写法如下:
<br />
<textarea class="delphi" rows="10" cols="60" name="code">function CheckUser(const cUserNO: WideString; const cPWD: WideString): Boolean;safecall; //检查用户的合法性
begin
Result:= poSCN.AppServer.CheckUser(psDBName, cUserNO, cPWD);
end;
</textarea>
大家可以注意看一下,正常运行的情况下,系统运行是没有问题的,但是,如果我把中间层中的判断代码部份:
sSQL:='Select * From tUser Where fNO = ' + vartosql(cUserNO) + ' and fPassWord = ' + vartosql(cPWD) + ' and fKindID = 1';
中的数据库字段名称改掉,如fNO改成fNO1,在调试状态会报中间层"列fNO1无效",但是点生成的程序运行时,客户端进入时会报“灾难性故障”,也就是说中间层产生的错误没有正确的传给客户端,要用什么样的方法才可以保证将中间层的错误传给客户端呢,高手指教~~~
<textarea class="delphi" rows="10" cols="60" name="code">
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
</textarea>客户端的写法如下:
<br />
<textarea class="delphi" rows="10" cols="60" name="code">function CheckUser(const cUserNO: WideString; const cPWD: WideString): Boolean;safecall; //检查用户的合法性
begin
Result:= poSCN.AppServer.CheckUser(psDBName, cUserNO, cPWD);
end;
</textarea>
大家可以注意看一下,正常运行的情况下,系统运行是没有问题的,但是,如果我把中间层中的判断代码部份:
sSQL:='Select * From tUser Where fNO = ' + vartosql(cUserNO) + ' and fPassWord = ' + vartosql(cPWD) + ' and fKindID = 1';
中的数据库字段名称改掉,如fNO改成fNO1,在调试状态会报中间层"列fNO1无效",但是点生成的程序运行时,客户端进入时会报“灾难性故障”,也就是说中间层产生的错误没有正确的传给客户端,要用什么样的方法才可以保证将中间层的错误传给客户端呢,高手指教~~~
解决方案 »
- 用XML保存了菜单层次关系,怎么读取后,动态生成菜单
- 再求問關於QRCompositeReport的用法
- 怎么样才能做到我聊了qq,而老板又不知道(知情者请进,高分相送)
- 请教高手:如何在richedit里面显示图片啊?
- 如何备份和还原Sql server 2000数据库?
- delphi6中的Corba问题,请高手帮忙。
- 如何打印条形码????
- “gz”什么意思
- 在adoquery加dbgrid中想批量提交数据,除了在locktype中设为:itbatchoptimstic外,在保存(即提交)事件中应该如何写?请到另一帖中挂号拿分>>>
- 本地数据库
- 如何让varArrayof函数的参数动态赋值
- ★★据说95明天上午要看他自己★★
看看这个中间件,你会发现太省力了:http://www.quickburro.com
raise E.Message 这样行不行啊?就是说,客户端错误时,将作异常处理你觉得呢?
我没有试过,不知道行不行。