ClientDataSet搞什么鬼?(100分)

  • 主题发起人 主题发起人 wrench
  • 开始时间 开始时间
W

wrench

Unregistered / Unconfirmed
GUEST, unregistred user!
D5的 ClientDataSet增加了CommandText属性
可是如果使用带参数的sql语句

Clientdataset.commandtext:='select xxx from xx where x=:P_xx'
ClientData.Params.ParamValues ['P_xx']:=xxxxxx;
ClientData.open;
运行时会出错 --参数p_xx不存在
必须手动写代码将SQL解析,并创建参数后,再给参数赋值,这样才能正确使用
真是奇怪
我看了看DBClient.pas
竟然没有处理SQL语句的参数的代码
可是这样的话,它提供params属性做什么用呢?
而且Params正确创建后,params的值还能正确传到服务器并且正确执行SQL
为什么在给CommandText赋值时,不把参数建立起来了?
是我没找到方法还是本来就是这样的?

 
本来如此.
params的解析是在服务端做的, client只是将params打包成一个variant一并传给服务
端而已. 想偷懒的话用个TQuery输入你的sql, 然后将TQuery.Params assign给
ClientDataSet嘛
 
如果是执行应用服务器端的SQL,那么应该在服务端解析
但是客户端写SQL语句
应该在客户端解决才对啊
不过用个TQuery输入你的sql, 然后将TQuery.Params assign给
ClientDataSet到是个好办法
学到一招
 
如果你要用commandText,那么就必须设置ClientdataSet的option属性中的
AllowCommandText,然后再调用
Clientdataset.commandtext:='select xxx from xx where x=:P_xx'
ClientData.Params.ParamValues ['P_xx']:=xxxxxx;
ClientData.open;
 
接受答案了.
 
后退
顶部