描述:
服务器: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.   

    1.服务端的conmmandtext没变,你刷新,当然按照原来的查询条件查询了.
    2.我们系统的实现方式是:
    在数据库中建立编号命名规则表(sql server).
    结构类似.
    编号ID,编号描述,编号规则,编号目前数值
    1233,  产品编号, CP%0000% ,  3211
    每次读取判断CP%0000%, %内的是通配符.用程序分析,用"编号目前的数值"替换,之后数值+1,不过这样也有个问题,就是客户端增加一条记录 CP0002,但没保存,即未ApplyUpdates(0);//,
    再增加的记录就会变成CP0003了,造成了断号的现象.期待高手参与.