如何在三层的客户端ApplyUpdates后看到在SQL有Identity属性的关键字字段内容(100分)(100分)

  • 主题发起人 主题发起人 scholar
  • 开始时间 开始时间
S

scholar

Unregistered / Unconfirmed
GUEST, unregistred user!
我是用ADO+SQL+DCOM,在SQL表中有一个字段ManID(int类型),它的属性是Identity,并且
是关键字.如果我用二层的话,当新增一行记录后,它会返回ManID值,即在TDBGrid中可以
看到内容,但是在三层中,在TClientDataSet新增记录并且ApplyUpdates后,并没有返回
ManID值,请问怎样返回该值,我是一定要新增后就可知道该值,我可不想用Refresh.
请各位网友想想办法,谢谢!
 
另外,当Master/Detail两个表中字段都有Identity属性时,如何返回该Identity值.
 
请各位网友想想办法,谢谢!
 
用Refresh.Refreshrecord
 
同意楼上;
三层中只要Refresh即可取回ID,并且三层中如果没刷新的话可能会报无关键字段,找不到记录等相关错误!
 
首先把 DatasetProvider.Option.poPropogateChanges:=True;

然后在DatasetProvider的AfterUpdateRecord事件中写
procedure TForm1.DataSetProvider1AfterUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind);
begin
if UpdateKind=ukInsert then
begin
DstId.CommandText:='select @@Identity as FId ';
DstId.Open;
DeltaDS.FieldByName('MainId').ReadOnly:=False;
DeltaDS.FieldByName('MainId').NewValue:=DstId.FieldByName('FId').AsInteger ;
DstId.Close;
end;
end;

DstId是ADODataset,别忘了设定他的Connection.
 
后退
顶部