使用ado data控件与access2000库相连,用datagrid控件及textbox控件绑定数据。数据表3个字段:id,name,quantity。id为自动编号数据,name为字符,price为数字。
现象:
1、使用添加按钮添加一条新记录,如price填为非数字字符,保存时经检验,提示出错,跳出保存sub。此时如按取消键以adodc.recorset.cancelbatch方法取消添加记录操作,出现错误提示:“操作已被取消”。失去记录指针(在datagrid中发现记录指针不见了)。
2、如上述过程不做保存处理,直接取消则无问题。
问题:
上述保存过程,并未对recordset做任何操作,怎会出现这样的现象?
请高人指点。谢谢。

解决方案 »

  1.   

    语法
    recordset.CancelBatch AffectRecords
    AffectRecords:可选的 AffectEnum 值,决定 CancelBatch 方法所影响的记录数
    可为下列常量之一:
    adAffectCurrent     仅取消当前记录的挂起更新。 
    adAffectGroup       对满足当前 Filter 属性设置的记录取消挂起更新。使用该选项时,必须
                        将 Filter 属性设置为合法的预定义常量之一。 
    adAffectAll(默认值) 取消 Recordset 对象中所有记录的挂起更新,包括当前 Filter 属性设置
                        所隐藏的任何记录。 
    使用 CancelBatch 方法可取消批更新模式下记录集中所有挂起的更新。如果记录集处于立即更新模式,调用不带 adAffectCurrent 的 CancelBatch 将产生错误。如果调用 CancelBatch 时正在编辑当前记录或添加新记录,则 ADO 首先调用 CancelUpdate 方法取消所有已被缓存的修改,然后取消记录集中挂起的所有更改。有可能在 CancelBatch 调用后,特别是在添加新记录时无法确定当前记录。为此,在 CancelBatch 调用后将当前记录位置设置为记录集中的已知位置是明智的。例如可调用 MoveFirst 方法。如果由于与现行数据冲突(如记录已被其他用户删除)而导致取消挂起更新失败,则提供者将向 Errors 集合返回警告但不终止程序的执行。只有当所有请求的记录都发生冲突时才发生运行时错误。使用 Filter 属性 (adFilterAffectedRecords) 和 Status 属性可以对冲突记录进行定位。