一直未弄清除的问题,主键重复处理。。。简单!请进!(100分)

  • 主题发起人 主题发起人 nulk
  • 开始时间 开始时间
N

nulk

Unregistered / Unconfirmed
GUEST, unregistred user!
在三层中,有两个用户在客户端分别输入(编号是主键)
编号 内容
---- ------
A用户 35 XXXXXX
B用户 35 YYYYYYYY
如何在TDataSetPrider.OnUpdateError或TClientDataSet.OnReconcilError事件中将ID加1变成如下:
编号 内容
---- ------
35 XXXXXX
36 YYYYYYYY
 
这个好像李维书上有详解的,忘了
 
在保存时取最新主键值,锁表在一个事务中完成
 
偶在OnUpdateError中
DataSet.FieldByName('编号').NewValue:=DataSet.FieldByName('编号').Value+1;
Action:=raCorrect;
然后ApplyUpdates(0);程序可以无错误通过。客户端显示数据加了1,
但就是不写到数据库里!
 
处理异常,当异常发生时改变主键的值
 
请详细说说,分不够加!
 
为什么不更新数据库!MIDAS的高手那去了
~~~~~~~~~~~~~~~~~~~~~
偶发现要经过两次ApplyUpdates才可以更新,WHY??
 
ApplyUpdates(-1);
 
也可以在数据库端,进行处理
 
to: CHJ天问
谢谢!但你的方法还是不行
我用了一个方法:一个字 笨!
procedure TForm1.button1Click(Sender: TObject);
begin
if clientdataset1.ApplyUpdates(-1)>0 then
clientdataset1.ApplyUpdates(0);
end;

procedure TForm1.clientdataset1ReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError;
UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
//HandleReconcileError(DataSet, UpdateKind, E);
DataSet.Edit;
DataSet.FieldByName('编号').NewValue:=DataSet.FieldByName('编号').Value+1;
DataSet.FieldByName('内容').NewValue:=DataSet.FieldByName('内容').Value;
DataSet.Post;
DataSet.ApplyUpdates(0);
Action:=raCorrect;
end;
 
在数据库段写个触发器,在新增记录时,自动生成编号,或判断新增编号是否存在,是提示
错误,否是,增填记录。
 
nulk, welldo
ne
 
我同意竹寨的意见,我也是这么作的
 
为什么不想一种方法在前台产生用不重复的key呢?很容易的!千万别用后台的auto key id
 
同意在后台控制key,不过我这里是手工输入的。
to:jovipeng
前台不一定保存的啊,那key必然留下许多空洞,对日后的检查数据完整不好
如:key
1
2
4
6
 
不接受答案。
 
后退
顶部