怎样在 clientdataset 中 为update 语名动态加载条件参数。

zjingl 2003-10-20 05:07:10
怎样在 clientdataset 中 为update 语名动态加载条件参数。
即 where 后面的参数。请举出详细实例。
...全文
37 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjingl 2003-10-23
  • 打赏
  • 举报
回复
没有人知道吗?
为了这个问题,我已搞了很长一段时间,现在我都快要情神崩溃了.
望各位大侠能伸出援助之手.
hiflower 2003-10-22
  • 打赏
  • 举报
回复
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;
zjingl 2003-10-22
  • 打赏
  • 举报
回复
我的程序代码为:

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'''
即把变量换成定值,则可以更新,不然就没有任何出错提示,也没有更新数据库.
但如果只能是定值,那我的程序又有什么用呢?
hiflower 2003-10-21
  • 打赏
  • 举报
回复
那就是说没有满足条件的记录了。
你的 no 字段是什么类型?你又是怎样传的参数?把你的代码贴出来看看
zjingl 2003-10-21
  • 打赏
  • 举报
回复
to hiflower(花)
我要下班了,麻烦你帮我试一试.
明天再见.
zjingl 2003-10-21
  • 打赏
  • 举报
回复
to hiflower(花)
一条记录都没有更改呢,但却没有提示出错,
不用 no 参数则可以全部记录都更改.
zjingl 2003-10-21
  • 打赏
  • 举报
回复
to hiflower(花)
一条记录都没有更改呢,但不用 no 参数则可以全部记录都更改.
麻烦你帮我试一试.
hiflower 2003-10-21
  • 打赏
  • 举报
回复
不起作用,是所有的记录都被更改了,还是一条记录都没有更改呢,还是更改出错呢?

看看 no 是什么类型,再看看它是不是 oracle 的关键字。

我没用过 oracle,只能猜测了
zjingl 2003-10-21
  • 打赏
  • 举报
回复
to zhangheaaa(竹)
我会试试,不过我还是希望用hiflower(花) 的方法,这样可以灵活些.
zjingl 2003-10-21
  • 打赏
  • 举报
回复
to tiexinliu(铁心刘) hiflower(花)
其实我也试过.不过 no 参数就是不起作用,不知是何原因.
我用的是 oracle8.05+delphi5.0
hiflower 2003-10-20
  • 打赏
  • 举报
回复
ClientDataSet1.CommandText:='UPDATE table1 Set name=:name WHERE no=:no';
ClientDataSet1.Params.ParamByName('name').Value:=xxxxx;
ClientDataSet1.Params.ParamByName('no').Value:=dxxxxx;
ClientDataSet1.Execute;
tiexinliu 2003-10-20
  • 打赏
  • 举报
回复
直接在clientdataset中写也可以:
clientdataset.commandtext:='update table1 set name='+''''+'20'+''''+' where no=:no'
clientdataset1.params.parambyname('no').value:=edit1.text;
clientdataset1.execute;
zhangheaaa 2003-10-20
  • 打赏
  • 举报
回复
我的做法是,在中间层的query或adoquery中写好update语句,带参数,例如:
update table1 set name='20' where no=:no
然后在客户端的clientdataset中添加一个参数,然后在语句中动态赋值:
clientdataset1.params.parambyname('no').asstring:=edit1.text;
clientdataset1.execute;
ld9702 2003-10-20
  • 打赏
  • 举报
回复
为什么没人来回答!俺也学一学。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧