程序为两层结构,控件关系如下:
DBGrid1--DataSource1--ClientDataSet1--DataSetProvider1--ADOQuery如上,ClientDataSet1 post后,如何获取ClientDataSet1新增/修改/删除的记录?
注意:ClientDataSet1并不需ApplyUpdates到数据库.
DBGrid1--DataSource1--ClientDataSet1--DataSetProvider1--ADOQuery如上,ClientDataSet1 post后,如何获取ClientDataSet1新增/修改/删除的记录?
注意:ClientDataSet1并不需ApplyUpdates到数据库.
解决方案 »
- 为了使开发出来的软件全面支持win2000/xp/2003/vista操作系统,用delphi7还是用delphi2007来开发?
- 怎么通过程序点击另外一个程序的一个菜单?
- 郁闷至极,问一个及其简单的问题
- Excel文件如何转成SQl2000数据表形式
- 讨教一个常用的控件的使用
- 菜鸟问题,简单控件的使用,再线ing。。。。
- MessageDlg的汉化
- Delphi 多摄像头同时显示问题
- 请教:Dephi 中将程序最小化为任务栏中的图标,但我不知道如何加入图标右(或左)键菜单,请高手指点
- [当天结帖,跪求解决] -------------- [使用XMLHTTP方式获取网页源码,GBK乱码]-----------------
- 数据库问题
- 今天收到中国移动的体检通知。一边是公务员,一边是企业,我该如何选择?
多置一个标记字段到ClientDataSet
新增的设置为 0 修改的设置为1,删除为假删除,设置为2
然后filter掉。
反正不用提交到数据库哦
---
Field不是有 OldValue ,NewValue么
写在onChange里?
小错(37388732) 09:10:19
OnChange应该不行的。
小错(37388732) 09:10:51
不知道SetText行不行。或者 AfterPost
procedure TForm3.DataSetProvider1BeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
beginend;
这个事件下面实现....
应该是可以的
然后再Applied 控制不提交。
用ClientDataSet1.Delta来得到ClientDataSet1变动过的记录是可以,但如何知道这些记录那些是修改前的,那些是修改后的,那些是新增/删除的呢?delta没有标记?
to:小错
BeforeUpdateRecord当中可以获知字段的状态,可以知道记录状态吗?
cdsDefTemp.First;
with cdsDefTemp do
while not EOF do
begin if UpdateStatus = usDeleted then
Status:='usDeleted'; if UpdateStatus = usInserted then
Status:='usInserted'; if UpdateStatus = usModified then
Status:='usModified'; if UpdateStatus = usUnmodified then
Status:='usUnmodified';
begin
append;
fieldByName('cid').AsInteger:=12;
fieldByName('cName').AsString:='12';
post; end;
self.ClientDataSet2.Data:=self.ClientDataSet1.Delta;
with self.ClientDataSet2 do
begin
while not eof do
begin
if UpdateStatus = usDeleted then
showmessage('Deleted ');
if UpdateStatus = usInserted then
showmessage('Inserted');
if UpdateStatus = usModified then
showmessage('Modified');
next;
end;
end;
参考provider.pas
function TUpdateTree.DoUpdates: Boolean;