怎样在 clientdataset 中 为update 语名动态加载条件参数。
即 where 后面的参数。请举出详细实例。

解决方案 »

  1.   

    我的做法是,在中间层的query或adoquery中写好update语句,带参数,例如:
    update table1 set name='20' where  no=:no
    然后在客户端的clientdataset中添加一个参数,然后在语句中动态赋值:
    clientdataset1.params.parambyname('no').asstring:=edit1.text;
    clientdataset1.execute;
      

  2.   

    直接在clientdataset中写也可以:
    clientdataset.commandtext:='update table1 set name='+''''+'20'+''''+' where no=:no'
    clientdataset1.params.parambyname('no').value:=edit1.text;
    clientdataset1.execute;
      

  3.   

    ClientDataSet1.CommandText:='UPDATE table1 Set name=:name WHERE no=:no';
    ClientDataSet1.Params.ParamByName('name').Value:=xxxxx;
    ClientDataSet1.Params.ParamByName('no').Value:=dxxxxx;
    ClientDataSet1.Execute;
      

  4.   

    to tiexinliu(铁心刘)  hiflower(花)
    其实我也试过.不过 no 参数就是不起作用,不知是何原因.
    我用的是 oracle8.05+delphi5.0
      

  5.   

    to zhangheaaa(竹) 
    我会试试,不过我还是希望用hiflower(花) 的方法,这样可以灵活些.
      

  6.   

    不起作用,是所有的记录都被更改了,还是一条记录都没有更改呢,还是更改出错呢?看看 no 是什么类型,再看看它是不是 oracle 的关键字。我没用过 oracle,只能猜测了
      

  7.   

    to hiflower(花) 
    一条记录都没有更改呢,但不用 no 参数则可以全部记录都更改.
    麻烦你帮我试一试.
      

  8.   

    to hiflower(花) 
    一条记录都没有更改呢,但却没有提示出错,
    不用 no 参数则可以全部记录都更改.
      

  9.   

    to hiflower(花) 
    我要下班了,麻烦你帮我试一试.
    明天再见.
      

  10.   

    我的程序代码为:procedure TForm5.Button6Click(Sender: TObject);
    var
    p,q:Tparam;begin
        with spzlclientdataset do begin
            spzlclientdataset.Close;
            q:=TParam.Create(nil);
            q.Name:='zlnm';
            q.DataType:=ftString;
            params.AddParam(q);
            p:=TParam.Create(nil);
            p.Name:='zlbm';
            p.DataType:=ftString;
            params.AddParam(p);
            spzlclientdataset.Params.ParamByName('zlnm').AsString :='abc';
            spzlclientdataset.Params.ParamByName('zlbm').AsString :='a';
         // CommandText:='UPDATE zjl.spzl Set spzl.zlnm=:zlnm WHERE spzl.zlbm=''a''';
            CommandText:='UPDATE zjl.spzl Set spzl.zlnm=:zlnm WHERE spzl.zlbm=:zlbm';
            spzlclientdataset.execute;
        end;
    end;注意: spzlclientdataset 为 Tclientdataset
    spzl 为数据表,属于 zjl 用户所有,所以要在 spzl 前 加上 zjl.  。  
    如果把 WHERE spzl.zlbm=:zlbm' 换成 WHERE spzl.zlbm=''a'''
    即把变量换成定值,则可以更新,不然就没有任何出错提示,也没有更新数据库.
    但如果只能是定值,那我的程序又有什么用呢?
      

  11.   

    procedure TForm5.Button6Click(Sender: TObject);begin
        with spzlclientdataset do begin
            Close;
         // CommandText:='UPDATE zjl.spzl Set spzl.zlnm=:zlnm WHERE spzl.zlbm=''a''';
            CommandText:='UPDATE zjl.spzl Set spzl.zlnm=:zlnm WHERE spzl.zlbm=:zlbm';
            Params.ParamByName('zlnm').AsString :='abc';
            Params.ParamByName('zlbm').AsString :='a';
            execute;
        end;
    end;