急!!! 通过ClientDataSet更新数据的奇怪现象 ( 积分: 10 )

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
真是奇怪,使用ClientDataSet维护数据不成功;
我是这样做的。
步骤1:设置连接:
ClientDataSet.close;
ClientDataSet.ProviderName := 'DataSetProvider1';
ClientDataSet.RemoteServer:=SocketConnection1;
ClientDataSet.CommandText:='select A,B,C from table1';
ClientDataSet.open;
步骤2:更新数据

ClientDataSet.Edit
ClientDataSet.FieldByName('A').AsString:='OK';
ClientDataSet.FieldByName('B').AsString:='NO';
ClientDataSet.FieldByName('C').AsString:='YEAS';
ClientDataSet.Post;
ClientDataSet.ApplyUdate(0);
步骤3:刷新数据
ClientDataSet.close;
ClientDataSet.ProviderName := 'DataSetProvider1';
ClientDataSet.RemoteServer:=SocketConnection1;
ClientDataSet.CommandText:='select A,B,C from table1';
ClientDataSet.open;
结果发现新数据却没有修改成功!

但是如果我直接在BbGrid上修改数据,然后用ClientDataSet.ApplyUdate(0) 更新,就能修改成功!
请大侠们指点迷津;
 
真是奇怪,使用ClientDataSet维护数据不成功;
我是这样做的。
步骤1:设置连接:
ClientDataSet.close;
ClientDataSet.ProviderName := 'DataSetProvider1';
ClientDataSet.RemoteServer:=SocketConnection1;
ClientDataSet.CommandText:='select A,B,C from table1';
ClientDataSet.open;
步骤2:更新数据

ClientDataSet.Edit
ClientDataSet.FieldByName('A').AsString:='OK';
ClientDataSet.FieldByName('B').AsString:='NO';
ClientDataSet.FieldByName('C').AsString:='YEAS';
ClientDataSet.Post;
ClientDataSet.ApplyUdate(0);
步骤3:刷新数据
ClientDataSet.close;
ClientDataSet.ProviderName := 'DataSetProvider1';
ClientDataSet.RemoteServer:=SocketConnection1;
ClientDataSet.CommandText:='select A,B,C from table1';
ClientDataSet.open;
结果发现新数据却没有修改成功!

但是如果我直接在BbGrid上修改数据,然后用ClientDataSet.ApplyUdate(0) 更新,就能修改成功!
请大侠们指点迷津;
 
步骤2:更新数据

ClientDataSet.Edit
ClientDataSet.FieldByName('A').AsString:='OK';
ClientDataSet.FieldByName('B').AsString:='NO';
ClientDataSet.FieldByName('C').AsString:='YEAS';
ClientDataSet.Post;
ClientDataSet.ApplyUdate(0);
把这段改一下吧
步骤2:更新数据

ClientDataSet.CommandText:='update .....';
ClientDataSet.Post;
ClientDataSet.ApplyUdate(0);
 
楼上的兄弟,用sql语句什么问题都能解决,但是这样开发效率太低了,五年前,我都用sql语句来更新数据。但是,觉得能够用简单的方法为什么不用呢。
其实,
我这里的
步骤2:更新数据 具体是这样做的,
1、ClientDataSet.Edit;
2、弹出一个维护的界面,上面都是dbedit,每个dbedit关联好字段;
3、对需要修改的dbedit进行修改;
4、ClientDataSet.post;
5、ClientDataSet.ApplyUdate(0);
 
步骤3:刷新数据 中可以不用重新设置连接,ClientDataSet有个事件就是Refresh,可以实现刷新功能。
 
感谢楼上各位朋友的鼎力帮助,其实,
ClientDataSet.ApplyUdate(0);

ClientDataSet.ApplyUdate(-1);
都可以,不过我不清楚这里0和-1 有什么区别?

还有一个关键的问题,就是上面我举的例子太简单了,正常情况下。
我们显示的数据一般都是从多个表中获取,
比如:ClientDataSet.CommandText:='select T1.A,T2.B,T3.C.. from table1 T1,Table2 T2,Table3 T3 where ...';
通过DbGrid显示数据,当我们在DbGrid上作任意的添加修改删除操作后,
通过
ClientDataSet.ApplyUdate(0);
提交给服务器,不过一般情况下,我们可以只是想提交Table1表的信息,对其他表不做处理,
不知道这个问题该如何实现?
说白了,就是利用ClientDataSet 实现多表操作单表更新的问题。
 
http://www.fm201.com/down.htm
相关的 源码 这儿有 希望能对你有帮助
 
0:出現錯誤就停下來.
-1:出現錯誤忽略,再嘗試更新下一個記錄.
 
你可以设置不需要更新的字段的ProviderFlags:=[]
0:提交时不充许错误,有错误即停止更新
-1:充许无限多的错误
 
后退
顶部