TClientDataSet的刷新问题!!!(200分)

  • 主题发起人 主题发起人 zlshj
  • 开始时间 开始时间
Z

zlshj

Unregistered / Unconfirmed
GUEST, unregistred user!
使用TClientDataSet在表中增加几条记录,然后提交调用ApplyUpdate(0)。由于该表中有自增字段ID,所以想刷新重新获得ID的值,调用TClientDataSet.Refresh,这时不但没有该值,连新增加的记录也没有了。
请教各位有没有好的TClientDataSet的高效的刷新方法,来获得最新的值(包括AutoInc Field和Default value)。
我知道可以使用将TADODataSet和TClientDataSet先Close再Open的方法,但是这实在是没有效率,而且不能重新定位到原来的那条记录。
 
好像TClientDataSet根本就不能真正的提交到实际数据库中去,必须借助TDataSetProvider才可以
 
我都是為這個問題煩惱,不過我想你的原因是可能你之前用過查詢所造成的.
 
用TClientDataSet一直連接后臺, 並且直接用ApplyUpdate更新你也敢用?
學習可以, 商業應用千萬別, 自已寫函數吧. 這是我用三層做了兩個大型全省級的系統的經驗.
 
to:hcm0790
如果这些问题都要自己写代码,那么Delphi的优势是什么呢?
 
to takashiki:
我是这样连接的:
TADODataSet->TDataSetProvider->TClientDataSet
 
如果
你仅仅是为了要获得最新的“ID”,
那么
你为什么不直接到库里去取当前的最大“ID”呢?
还要去刷新干吗?
 
to xyzhou7:
如果是多个用户的情况,取最大的ID肯定有问题。
 
那么你在保存的时候取ID,应该不会有问题!
如果
你需要在每个用户读ID的时候就给他分配一个新的ID,
那么
你应该自己建立一张表来保存最新ID号,写一个函数在取ID的时候将ID加 1,
这样感觉怎样?
 
我用delphi6+ADO+Clientdataset+SQLServer
Refresh后,马上能看见自增Id
完全没有楼主说的问题

 
提交不对
用ApplyUpdate(-1)
 
楼主,你ApplyUpdates以后数据库里记录实际新增了吗?
还有试下TDatasetProvider.Options.poAutoRefresh:=True;
 
hcm0790说的没错,自己参考delphi的iapp帮助是很容易做出协调函数的,将
函数取来的数据附给Tclientdataset不是很简单,delphi的优势都可利用。
如果一定要用Tclientdataset.Refresh,shiningplus说的没错,
我是用delphi7+ADO+Clientdataset+SQLServer Refresh后,马上能看见自增Id.
TDatasetProvider.Options.poAutoRefresh:=True
 
to:hcm0790
用TClientDataSet一直連接后臺, 並且直接用ApplyUpdate更新你也敢用?
`~~~~~~~~~~~~~~~~
为什么不敢用呢?会出现什么样子的错误呢?我也是这么做的阿。
是不是会出现多用户操作时数据出错呢?还是另有更危险的问题
望赐教,我赶快改!
 
to glpttlb:
如果一定要用Tclientdataset.Refresh,shiningplus说的没错,
我是用delphi7+ADO+Clientdataset+SQLServer Refresh后,马上能看见自增Id.
TDatasetProvider.Options.poAutoRefresh:=True
好像不行,刷新之后,连新加的记录都没了,不知道为什么?
 
好像只有在TClientDataSet.ResolveToDataSet = true时,刷新才可以看到ID
 
我的做法和hcm0790相同,也是有做了两个B/S系统的经验,用TClientDataSet的ApplyUpdate方法更新数据的做法,即使正确地更新了数据,但这样做出的程序有架构上的缺陷(业务逻辑放在客户端,没有了多层系统的一个重要优点,结果导致系统维护性差)。
 
其实ClientDataset的Refresh方法也是调用了Close和Open的方法。你调用后新增的数据看不到,可能和你取数据的方法有关系,因为Refresh的时候,它会用你取数据的SQL语句重新到数据库中检索一次,如果这个SQL语句取不出你的新增数据,Refresh后也不会看到新增的数据
 
同意楼上,你加的记录不符合你sql查询条件
 
后退
顶部