我用的是ADODataset和datasource、dbgrid我做了"插入"、“删除”、“上一条”、“下一条”以及“确定”,但是往往是我进行“插入”之后就是不按“确定”随便点一个“上一条”和“下一条”它就把当前插入的这条数据保存了,请问我如何防止这一点,不然我得“确定”意义不大,而且用户很容易进行误操作。
解决方案 »
- DELPHI求解释
- 求目录服务、订阅服务等演示程序
- 怎样编程实现在桌面上创建一个快捷方式
- 我在用delphi开发数据库中遇到的13个问题,大家帮帮忙啊!很简单的!
- 请问怎么删除当前指针的记录?
- 播放 MPG文件问题,在线等。。。。 谢谢了
- 关于Dream Outbar控件的问题???一定给分
- 如何实现在用TQUERY组件查询得到的数据集中对当前记录进行修改及删除操作?
- 各位大侠,我刚才的[指针问题]的意思是说,我从没用过指针,因此不知何时、何种情况要用指针,并请您举个精辟的例子,谢谢!
- ado连接带密码的access数据库
- 一个极简单的问题 我想在unit3单元中调用Unit1中的对象,怎么声明时总是有问题,应该怎么办
- 请高手帮查个错。ado连数据库问题!耽误不了您多长时间!
adodataset1.prior;
adodataset1.next;
我就是这样写的
这是ADODataset 功能,当你移动记录时,移动前的记录数据自动更新;如果你控制不更新,那你所新增的记录则会放弃掉(即 DBGrid 中不显示);
解决方法:
要使你的“确定”按钮达到预期使用效果,你可以使用临时表存储显示的内容,你怎么新增、修改、删除都可以,因它只是对临时表操作,当你单击“确定”按钮时,则把临时表中的数据正式更新数据库表,单击“取消”按钮时,重新从数据库表把数据装入临时表;
//设为缓存更新模式
adodataset1.LockType := ltBatchOptimistic;
//真正保存到数据库
adodataset1.UpdateBatch(arAll);
//取消所有操作
adodataset1.CancelBatch(arAll);
不客气的说,你完全是在胡说八道!
BoningSword(【浩少】) 说得对!
if MessageBox(Handle, '记录已改变,是否保存?', '是否保存数据', MB_OKCANCEL+MB_ICONQUESTION) = ID_OK then
BtnSave.Click
else
AdoDataSet.Cancel;AdoDataSet.Next;
ADO的BatchUpdate功能和BDE/IDAPI的CachedUpdate非常类似。它的工作原理就是当ADO从数据源取得数据之后,客户端对于所有数据的修改都暂时储存在客户端的缓存中,而不是立刻更新回数据源中。而当客户端决定要把所有的修改更新回数据源时,才调用ADO的方法,把所有的修改更新回数据源中。
注意:
使用BatchUpdate方法来处理数据的好处是客户端和数据源之间不会产生密切的互动,因此可以降低数据源的负荷。此外也可以减少网络的Roundtrip,这在拥有大量客户端的应用系统中是非常有帮助的。此外由于BatchUpdate是把客户端对于数据的修改暂时储存在客户端内存中,因此它对于数据的修改动作非常快速,只在最后把所有的修改更新回数据源时才需要比较多的时间。不过使用BatchUpdate也有一些问题,那就是程序员必须撰写较多的程序代码来处理数据更新错误的情形。这是因为当客户端在修改数据时,可能已经有其他的用户改变了数据源中的数据,因此当客户端把修改的数据更新回数据源时便可能会发生数据冲突或是错误的情形。所以当程序员在使用BatchUpdate时,一定要搭配错误处理程序代码,才能够撰写出安全坚固的应用程序。要使用ADO的BatchUpdate功能,程序员必须在ADOExpress组件中进行一些必要的设定,才能够让ADO进入BatchUpdate的模式。下面就是进入BatchUpdate模式的必要设定:
1 设定CursorType为KeySet或Static。
2 设定LockType为BatchOptimistic。
3 执行的SQL命令必须是Select。
除此之外,CursorLocation也是程序员必须考虑的设定。虽然在Microsoft的文件中说明,BatchUpdate可以使用Server-SideCursor或Client-SideCursor。但是,如果使用BatchUpdate再搭配Server-SideCursor,那么不但无法使用Briefcase模型,在执行效率上也不好。
4 设定CursorLocation为clUseClient。
当ADO进入BatchUpdate模式时,所有对于数据的修改都是暂存在客户端中。当客户端决定把数据真正更新回数据源中时,可以调用TADODataSet、TADOQuery、TADOTable或TADOStoredProc组件的UpdateBatch方法。而UpdateBatch方法接受一个参数,这个参数代表客户端要把哪些修改的数据更新回数据源中。
这句话写在你的保存按钮click事件里面,就是你的那个确定按钮click事件里面;adodataset1.CancelBatch(arAll);
这句话写在你的取消按钮click事件里面;