在三层结构的ActiveForm中使用 ClientDataSet1.ApplyUpdates(0);更新不了的问题!请帮忙(100分)

  • 主题发起人 主题发起人 lerry
  • 开始时间 开始时间
L

lerry

Unregistered / Unconfirmed
GUEST, unregistred user!
其实挺简单的,就是在一个按钮的onclick事件中写入ClientDataSet1.ApplyUpdates(0);
就行了是吧?我看书上的例子就是这么写的,可是为什么在我这里就不行?什么反应也没有!!
我为了能动态从客户端象服务器传SQL语句,把服务器端的程序的ADOQuery的 active设成False
了,有影响吗??请指教!就这点儿分了,全部奉送!!
 
是单表还是多表?
没反应是什么意思?DBGrid上不能显示还是数据库没有更新?
 
我不知道你怎么动态的传SQL语句的。能不能说详细一点?
我用到ApplyUpdate的clientdataset在服务器端都写有SQL语句的。最多也就是传一个参数。
 
ADOQuery1.EnabledBCD:=False試試
 
楼上的朋友,不好意思!这么长时间才看到!是单表,没反应就是没有更新!谢谢了
 
动态传SQL语句的时候就是 首先ActiveForm从ASP页面接收到一个参数值,比如 UserID
然后在Set_UserID中写:
ClientDataSet1.Close ;
ClientDataSet1.CommandText :='select * from ### where 用户标识 ='+ inttostr(Value) ;
ClientDataSet1.Open ;
就这些了!
还有 ghuan:你说的方法我试了,也不行呀?!
 
DBGrid没有更新的话,试试看在applyupdate(0)以后,sleep(1000);
然后clientDataSet.refresh
 
当然close open也行
ADO对数据库的操作需要等一段时间才能在DBGrid中进行更新
 
楼上的朋友,我都试了,可是数据就是改不了!
我的SQL语句是这样写的:
select * from Table1 where Param1 ='+ inttostr(Value) +' and Param2 = (select top 1 标识 from Table2 where .....)
更新时就更新Table1就行,你说这算对但表操作还是对多表操作?
可是我给改成简单的select * from Table1 也不行呀!
做个项目还没开始就给卡到这儿了,急死人了!还能有什么设置对他有影响?比如说服务器
段的什么属性之类的?
 
子查询我没试过。你试试看下面的办法,把与ClientDataSet对应的那个DataSetProvider的ResolveToData属性改成True。
 
改了!还是不行!
 
动态设置SQL语句的话,要更新可能有问题。
别忘了设置Query的prepare属性为True。把SQL语句写在Remote Data Module的Query里。
执行的时候用参数调用。应该也能达到你想要的效果。
而且在ClientDataSet的column Edit中,把要显示的列先选出来。如果动态设置的话,是不能选的。估计是这个问题。
如果还不行,那我也没办法了。
 
你是说不用在client端的commandtext里设置SQL语句,改在server端写个方法在客户端调用吗?
也就是说换一种实现动态SQL的方法是不是?
 
是的。我觉得要从DBGrid直接更新的话,最好在clientDataSet的column编辑的时候就知道有哪些field会被用到。
如果你在客户端写SQL的话,clientDataSet是无法选择field的
 
我现在的做法是先在DBGrid里设定好了字段的,然后再动态传SQL语句获得数据!这难道不算
知道了有哪些field会背用到了吗?而且刚才我做了个小试验,不传任何参数给服务器端
直接打开一个表,都不能更新!这好想不是动态传SQL的问题吧?
 
一张普通的单表都不能更新?太奇怪了吧!
 
我决定什么都重新做再试试!呵呵!不好意思麻烦了你这么长时间!100分送上,十分感谢
不过如果还有问题的话还希望你能多给我指教
 
接受答案了.
 
后退
顶部