服务端:
 TSQLConnection->TSQLQuery->TDataSetProvider
TDataSetProvider.poAllowCommandtext:=True;客户端:
 TRoDataSnapConnection->TClientDataSet客户端程序代码:
try
TClientDataSet.close;
TClientDataSet.commandtext:=' select month,salary/0 from tbsalary ';
TClientDataSet.open
except
 E: .....
 showmessage(E.message);
end;客户端的异常是可以捕获.
如何同时能够把服务端的TSQLQuery的open异常捕获到.
请教各位大虾

解决方案 »

  1.   

    在服务器的接口中,定义方法的中增加一个err参数,让它返回访问错误字符:
    function TTServer.RunQurey(const SQL: WideString;
      out err: WideString): WordBool;
    begin
      Result:=False;
      try
        ADOQuery.close;
        ADOQuery.sql.text:=SQL;
        ADOQuery.open;
        Result:=True;
      except
        on E:Exception do
        begin
          err:=E.Message;
        end;
      end;
    end;
      

  2.   

    sql的执行不在服务端,直接在客户端执行的.
    TClientDataSet.commandtext:=' select month,salary/0 from tbsalary ';
    TClientDataSet.open
    客户端执行错误的语句,服务端关联的控件TSQLQuery能够发生生异常并且能够捕获这个异常
      

  3.   

    sql语句只在客户端执行,
    客户端程序代码:
    try
    TClientDataSet.close;
    TClientDataSet.commandtext:=' select month,salary/0 from tbsalary ';
    TClientDataSet.open
    except
     E: .....
     showmessage(E.message);
    end;
    服务端不执行sql语句,只连接数据库.当客户端执行错误的sql语句时,跟它相关连的服务端控件TSQLQuery能发生异常并能捕获
      

  4.   

    楼上说“服务端不执行sql语句,只连接数据库”有误。
    服务器与客户端的连接,数据传递都是通过SQL语句执行的!
    因而,要把服务器端执行SQL语句时的出错,传递回客户端。
      

  5.   

    回楼上的话:
    服务器端程序代码里不写sql语句,sql语句写在客户端程序代码中,sql语句程序代码的执行也是写在客户端.当出现异常,希望能在服务端能捕获
      

  6.   

    回楼上的话:
    服务器端程序代码里不写sql语句,sql语句写在客户端程序代码中,sql语句程序代码的执行也是写在客户端.当出现异常,希望能在服务端能捕获
      

  7.   

    问题一:
        是的客户端的SQL代码,是在服务器端执行的。一般执行SQL错误出现需要在客户端(执行SQL者)显示。这时,可用1楼的代码,它向客户端返回err字符。 
        如果错误代码不在客户端,而是服务器端显示的话。可修改1楼的代码,它不向客户端返回err字符,直接在服务器端显示即可。 问题二:
        服务器端程序代码看么不写sql语句呢?服务器端是数据库处理的中间层,可以预定SQL程序代码。同时,不少客户端的SQL是传送至服务器端不执行的呀。
      

  8.   

    不是说我为什么不把SQL语句写在服务端,是因为系统是以前写的,很多地方sql语句是写在客户端的.现在想把异常在服务端捕获到,因为有些异常导致服务端崩溃.