首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

ClientDataSet刷新有关问题

2012-02-06 
ClientDataSet刷新问题描述:服务器:ADOQuery1DataSetProVider1[poAutoRefresh,poAllowCommandText]DataSet

ClientDataSet刷新问题
描述:
服务器:ADOQuery1   DataSetProVider1[poAutoRefresh,poAllowCommandText]
DataSetProvider1.ResolveToDataSet:=true;

客户端:ClientDataSet1
ProviderName为上述DataSetProVider1
ClientDataSet1.FetchOnDemand:=true;

所遇问题:
ClientDataSet1.CommandText:= 'SELECT   *   FROM   表   Where   卡号= ' ' '+ '111 '+ ' ' ' ';
ClientDataSet1.Open;
查询正常
查询之后,ClientDataSet1新增一条卡号为 '222 '记录。
新增后刷新ClientDataSet1,但是刷新后DBEdit中还是显示卡号为111的那条记录
代码如下:
      ClientDataSet1.ApplyUpdates(0);//这里能成功新增记录
      ClientDataSet1.Refresh;//执行这句后界面上又还原成刚查询到的111的那条记录的数据了,我想可能的原因是Refresh方法是在中间层又重新调用了一次我一开始那句CommandText,不知该如何解决这个问题。

如果不刷新记录,也就是不执行ClientDataSet1.Refresh;这句
那么新增一条记录时不会有错,如果想再新增卡号为333的记录就会出现Key   Violation的错误,因为我使用了自动增长列作为主键,如果不刷新就不能得到最新的ID,至使主键重复。


[解决办法]
请看 “巢式结构” 教程
[解决办法]
1.服务端的conmmandtext没变,你刷新,当然按照原来的查询条件查询了.
2.我们系统的实现方式是:
在数据库中建立编号命名规则表(sql server).
结构类似.
编号ID,编号描述,编号规则,编号目前数值
1233, 产品编号, CP%0000% , 3211
每次读取判断CP%0000%, %内的是通配符.用程序分析,用 "编号目前的数值 "替换,之后数值+1,

不过这样也有个问题,就是客户端增加一条记录 CP0002,但没保存,即未ApplyUpdates(0);//,
再增加的记录就会变成CP0003了,造成了断号的现象.

期待高手参与.

热点排行