我的客户端用clientdataset dcomconnetion 服务器端用 datesetprovider database
等   with DM.CDS do
   begin
       Close;
       sSql:=' update groups set group_name =:group_name';
       sSql:= sSql+' ,permission=:permission,description=:description';
       sSql:= sSql+' where  group_id = :group_id ';
       CommandText:=sSql;
       Params.ParamByName('group_name').AsString   := GroupEdit.Text;
       Params.ParamByName('description').AsString  := DescriptionEdit.Text;
       Params.ParamByName('group_id').AsInteger    := GroupID  ;
       Params.ParamByName('permission').AsString   := SPermission;
       Execute;
       if (ChangeCount>0) or (State in [dsinsert,dsedit]) then   //ChangeCount =0 我检查过
        begin //
          if Applyupdates(0)>0 then showmessage('¸üгɹ¦ÁË');
        end;
为什么不能更新啊,

解决方案 »

  1.   

    Params.ParamByName('group_id').AsInteger    := GroupID  ;
           Params.ParamByName('permission').AsString   := SPermission;中groupid和SPermission是什么,是怎么的到值的。你可以
    showmessage(DM.CDS.CommandText)来看你的where 条件里的groupid是不是 有数据,
    如果没有,那当然更新不了了。
      

  2.   

    showmessage(DM.CDS.CommandText)  看不到参数的值
      

  3.   

    我是这么做的,希望对你有帮助
    2种方法:
    1  是在客户端ClientDataSet用
    edit
    ...
    post(本地更新)
    Applyupdates(0)提交给应用服务器就行了
    2  是在应用服务器用存贮过程或用SQLQuery来更新
    数值用变量传送给应用服务器
      

  4.   

    niller  谢谢你的答复,但是我现在又的该代码,好麻烦啊,用SQL 为什么查询可以
    UPDATE DELETE 就不行啊?
      

  5.   

    你直接用CDS来更新,其实与我的第一种方法一样
    但你没有向服务器提交呀
    if Applyupdates(0)>0 then showmessage这是干什么?
    你还是应该执行Applyupdates(0)来向服务器提交吧
      

  6.   

    这个问题解决很久了,但是一直忘记了给分,真不好意思,niller上面说的不错
    其实三层结构是当你关闭程序时最后把所有修改的记录放到数据库,而不是象
    两层那样,我在这个问题上折腾了太久.......