三层架构的分布式系统中,用AdoConnection+DatasetProvider+AdoQuery做服务器,用DCOMConnection+ClientdataSet作客户端。在应用服务器中,设置AdoQuery的SQL为“Update tUser Set usrDept= :pusrDept,usrClass= :pusrClass Where usrID= :pUsrID”,Parameters中的参数正常;在客户端,使用了ClientdataSet连接,在ClientdataSet中设置“Params”有三个参数:pusrDept,pusrClass,pUsrID;与服务器端的一样;设置一个按钮,其代码如下:
  ClientDataSet2.Params.ParamByName('pusrID').Value := Trim(Edit1.Text);
  ClientDataSet2.Params.ParamByName('pusrDept').Value := Trim(Edit2.Text);
  ClientDataSet2.Params.ParamByName('pusrClass').AsString := Trim(Edit3.Text);  ClientDataSet2.Execute;
程序能运行,可是为什么不能起作用,根本没有执行更新作用。请高手指教!是不是设置什么特殊参数?
只要Select语句,就能正常运行,为什么Update的语句就不能?

解决方案 »

  1.   

    ClientDataSet2.Execute; //仅仅更新本地
    ClientDataSet2.ApplyUpdates(MaxErrs); //才将数据更新至服务器。
      

  2.   

    谢谢老者!
    现在出现了以下问题:如果我打开ClientDataset2.Open,就提示出错:ADOQuery2:Commandtext does not return a result set.
    如果我没有打开ClientDataSet2,就提示出错:ClientDataset2: cannot perform this operation on a closed dataset.
    究竟还要设置哪些东西呢?谢谢高手了!
      

  3.   

    ClientDataSet2只需到服务端取回数据,做了修改后用ClientDataSet2.ApplyUpdates(MaxErrs); 告诉服务端,它就知道更新哪些东西了
    换句话说,就是不用你写UPDATE语句去更新
      

  4.   

    因为是三层架构,所以我想把一些SQL语句放在服务器处理,所以才把Update语句写在ADOQuery里,究竟要怎么去实现这个呢?不想在客户端写SQL语句,不想服务器端返回数据集,不行吗?高手给详细指点一下。谢谢!
      

  5.   

    ADOQuery2你是不是用的ADOQuery2.open
    你试试ADOQuery2.execsql。
      

  6.   

    不行的,在AdoQuery2是在服务器端,在客户端不能调用