描述:
服务器: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,至使主键重复。
服务器: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,至使主键重复。
解决方案 »
- 在program单元中定义了一个全局变量,如何在其它单元引用它?(非unit单元文件定义)
- IBM的电池一个月没用,突然打开不能充电了,是什么原因??
- 请教如何实现双击PageControl中的某一TabSheet时将其Free.
- 有没有什么方法在Delphi程序里调用用C写的代码?
- 怎样才能把存储进数据库中的AutoCAD文件还原成.dwg文件?
- delphi中怎么删除数组中的重复数据
- 急~~~~~请问怎么样把图片(bmp\jpg)插入到richedit控件中?
- 哪里有ADO2.7下载,请给完全的地址,谢谢!
- 关于局域网内读Mac号的问题
- 关于用DELPHI开发后台数据库为DB2的应用程序?
- delphi常量值的保密问题?
2.我们系统的实现方式是:
在数据库中建立编号命名规则表(sql server).
结构类似.
编号ID,编号描述,编号规则,编号目前数值
1233, 产品编号, CP%0000% , 3211
每次读取判断CP%0000%, %内的是通配符.用程序分析,用"编号目前的数值"替换,之后数值+1,不过这样也有个问题,就是客户端增加一条记录 CP0002,但没保存,即未ApplyUpdates(0);//,
再增加的记录就会变成CP0003了,造成了断号的现象.期待高手参与.