关于在多层数据库中自增型字段的疑问!(125分)

  • 主题发起人 主题发起人 Blue
  • 开始时间 开始时间
B

Blue

Unregistered / Unconfirmed
GUEST, unregistred user!
Hi!大家好,初次提问请多关照:)
最近用Delphi在编写多层的数据库程序时,遇到一难题.在应用服务器端
的Paradox表格中索引字段用的是自增类型, 但是在客户端添加数据时自增
字段的值不更新,本来自增字段的值在添加完毕之后应该自动取值的,但是客
户端的Clientdataset并不识别自增型字段,把它当作空值处理,结果在添加
下一条记录时,索引中有两个空值,造成出错.
我希望在客户端能够照常使用自增型字段,不知到哪位大虾能够帮助在下
解决这个问题!这里先行谢过了!
 
换成其他的网络数据库吧。:)
 
你添加一条纪录后,立即回写到AppServer,然后再刷新CLientDataSet。
 
这个个问题还没有遇到过。试一下:
使用客户端纠错: TClientDataSet.EnableConstraints。
 
说清楚些,看能不能不用自增类型字段
 
我在ACCESS中也遇到过类似问题,我建议你不要用此类型
即使能用,许多时候也不稳定,常常算错.还是自己编算法吧!
 
paradox是这样,本人用其作临时表也发现这个问题,
没有办法,我想只能自己控制主键吧.
 
使用D5时,静态字段设为自增长类型就不会出错了
 
AfterInsert中就ApplyUpdate;然后将ClientDataSet Close再Open
 
在TClientDataSet的OnNewRecord事件中,添加代码,检索自增字段的最大值后,
在将其加1大概也能实现自增的功能吧。
 
我也碰过这种问题(access),由于时间紧,没有仔细研究。
最后我改用了ado。
 
如果字段是标识类型,有自增量和初始量,那么在客户端使用:
Insert table(field1[,field...]) values(value1[,value2...])
时,服务器端的该类型应该能够自动生成新的值并写入此记录的此字段中,
当然Insert中不要指定该字段的名,如自增字段名是ID,
则在Insert中不要指定ID此字段。
在SQL Server, Access, Informix, Sybase中均没有出现您所说的错误。
Paradox没试过,应该也是没事的。
 
在问题检索里查查“自增”,“IDENTITY”和“AutoInc”
然后看看原来前辈们的回答就清楚了……
其实这个还不麻烦,偶做过一个多层数据库机构,5层M-D关系
(客户要求的,偶也没办法……:( ),在加上关于其他乱七八糟
的一大堆要考虑的东东,最后研究结果只一句话……不用自增字段,hehe
虽然是一种逃避,但代价是最小的……^_^
 
1.clientdataset applyupdates 以后,refresh 以下;
2.在appserver 里做.
 
自增字段是由数据库自动赋值的,人为赋值时会出错!
 
多人接受答案了。
 
后退
顶部