三层结构,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无效",但是点生成的程序运行时,客户端进入时会报“灾难性故障”,也就是说中间层产生的错误没有正确的传给客户端,要用什么样的方法才可以保证将中间层的错误传给客户端呢,高手指教~~~

解决方案 »

  1.   

    delphi 区太安静了~~~~~~~~~~~
      

  2.   

    KBMMW 企业版2.61,支持PHP,Java,Delphi,IsAPI,.Net等一切常用的开发环境。一般可以支持1000多个客户端同时并发,速度是其他三层工具的3-6倍有需要联系我。QQ:188368090
      

  3.   

    何必这么麻烦哟,中间件不理想。
    看看这个中间件,你会发现太省力了:http://www.quickburro.com
      

  4.   

    用这样的方式行不行啊?你试试on E: Exception do
            raise E.Message 这样行不行啊?就是说,客户端错误时,将作异常处理你觉得呢?
    我没有试过,不知道行不行。