写了一个小程序。按“编辑”按钮后可以编辑dbgrid中的数据,dbgrid中的需要换算的其它数据也会随着编辑而及时的改变。然后,按下“取消”后我想恢复到以前的数据状态。
但我的程序现在不能实现。谁懂请赐教。谢谢!!!
但我的程序现在不能实现。谁懂请赐教。谢谢!!!
解决方案 »
- 高分求如何激活远程Com对象,不够再加分
- 如何让Label控件拥有BevelInner属性
- 哪儿有delphi函数或类速查方面的电子书下载?
- 怎让当鼠标在Image组件中移动时不触发MouseMove事件,在线等待....
- SQL Server 中如何解决此问题(急!!!!!!!!在线等待,分不够再给!!!!!!!!!!)
- 分割线
- 请高手详细给小弟讲一下Delphi中项目组的使用方法?项目组中各项目的窗体可以相互调用吗?
- delphi7+windows7如何控制word
- fastreport 4.0 + delphi
- 哪有这本书卖《DELPHI第三方控件大全》
- 高分!!!求助!!
- label.caption或edit.text不能用adoquery赋值
procedure TdfForm.sb_editClick(Sender: TObject);
var i:integer;
begin
dm.df.Edit;
dm.df.Open;
dm.xswh.Open;
dbgrid1.ReadOnly:=false;
sb_save.Enabled:=true;
sb_cancel.Enabled:=true;
sb_edit.Enabled:=false;
end;
“取消”按钮click事件如下:
procedure TdfinforForm.sb_cancelClick(Sender: TObject);
begin
dm.df.Cancel;
dbgrid2.ReadOnly:=true;
dbgrid1.ReadOnly:=true;
sb_save.Enabled :=false;
sb_cancel.Enabled :=false;
sb_edit.Enabled :=true;
end;
其次,数据源采用支持事务的数据源连接器具备上述前提条件后,在编辑之前打开事务,比如调用StartTransaction之类的方法,进入事务状态,然后进行编辑,取消时调用RollbackTransaction类似的方法,如果确定无误,则调用如CommitTransaction之类的方法提交。
回滚事务(取消操作):RollbackTransaction
提交事务:CommitTransaction
其实你说的这种效果不一定要事物,一般的数据集应该可以实现你的要求,
比如:需要换算的其它数据你可以做成一个计算字段,如果需要存储你可以作成一个data型字段,
在编辑你需要的数据后,然后计算后把值赋给那个字段即可.
如果全部取消,数据集.cancel 就可以,
如果提交,数据集.post(或数据集.update)举个例子:
如果你用的是AdoDataSet控件,把LockType属性设置为ltOptimistic,也就是批量提交数据保存.
取消:ADODataSet1.CancelUpdates;
提交:ADODataSet1.UpdateBatch(arall);
如有其他需要换算的字段,且是计算字段类型的话,在 ADODataSet1的 oncalcFields事件中编写换算代码.
如果不是计算字段并且也需要换算的话,可以在该字段的 Onchange 中编写代码如果还有问题,请继续讨论