vb用ado添加出现错误"操作已被取消",请问为什么?

程序代码如下:
Rs.AddNew
Rs.Fields(0) = Val(txtQQnum.Text)
Rs.Fields(1) = txtQQpassword.Text
Rs.Fields(2) = Val(txtQQBID.Text)
Rs.Fields(3) = txtQQque.Text
Rs.Fields(4) = txtQQans.Text
Rs.Fields(5) = CDate(txtQQdate.Text)
Rs.Fields(6) = Val(txtQQpay.Text)
Rs.Fields(7) = txtQQother.Text
Rs.Update

事件处理程序如何共同工作

无论是否实际使用事件,都必须执行 ConnectionEvent 和 RecordsetEvent 类中的所有事件处理程序。必须执行的工作量取决于所用的编程语言。某些语言,如 Microsoft Visual Basic 可以为您完成所有工作。其他语言,如 Microsoft® Visual C++®,则要求您完成所有工作。而带有 ADO/WFC 的 Microsoft® Visual J++™ 则介于两者之间,该语言为您处理大部分工作。详细信息,请参阅 不同语言的 ADO 事件实例。

虽然由您自己实现事件处理程序的工作量较大,但可以完成用 Visual Basic 这类语言无法进行的工作。例如,在 Microsoft Visual C++ 中,一个 RecordsetEvent 处理程序可以处理多个 Recordset 对象的操作带来的通知。

Will 和 Complete 事件处理程序可以成对或分开使用。

成对的事件处理程序

首先,我们来了解 Will 事件成功时会出现什么情况。
设想 Recordset 对象的成对事件 WillChangeField 和 FieldChangeComplete。在应用程序中开始更改字段值时,将调用 WillChangeField 事件处理程序;可以返回一个用于更改字段的标志。操作完成时,FieldChangeComplete 事件将通知应用程序操作已经结束,而事件处理程序状态操作数则报告操作成功。

下一步,我们来了解 Will 事件取消操作时会出现什么情况。
设想更改其他字段的情况。这时将调用 WillChangeField 事件处理程序。可能因为某种原因您认为更改字段是不可接受的,所以在状态操作数中返回 adStatusCancel。因而操作未能完成。

FieldChangeComplete 事件通知您操作已经结束。事件处理程序状态操作数被设为 adStatusErrorsOccurred;错误参数引用 Error 对象,而 Error 对象的 Number 属性被设为 ADO 值或提供者,从而指示操作已被取消。

多个 Will 和 Complete 事件处理程序可被同一操作调用。当多个 will 事件成功时,请检查出现了什么情况。
设想 Recordset 对象的成对事件 WillChangeField、FieldChangeComplete、WillChangeRecord 和 RecordChangeComplete。开始更改字段值时将调用 WillChangeField 事件处理程序;可以返回一个用于更改字段的标志。

下一步,调用 WillChangeRecord 事件处理程序,再次指示操作应该结束。

注意 所有从属于 ADO 对象的特定实例的 will 事件处理程序通常都将被调用。但是,调用过程没有特定次序。

操作结束时,将调用 FieldChangeComplete 和 RecordChangeComplete 事件处理程序。

多个 Will 和 Complete 事件处理程序可被同一操作调用,但是可以取消挂起的操作。在多个 will 事件的最后一个取消操作时,请检查发生了什么。
再一次想象成对的 WillChangeField、FieldChangeComplete、WillChangeRecord 和 RecordChangeComplete 事件。开始更改字段值时将调用 WillChangeField 事件处理程序;可以返回一个用于更改字段的标志。

下一步,将调用 WillChangeRecord 事件处理程序。也许您认为字段更改本身没有问题,但是它将在记录中创建一个整体错误。返回 adStatusCancel,从而指示更改字段是不可接受的。WillChangeField 事件处理程序已经允许进行操作。

操作被 WillChangeRecord 事件处理程序取消,因此未能完成。FieldChangeComplete 事件处理程序被设置为 adStatusErrorsOccurred 的状态操作数调用;并对错误参数进行适当的设置。

下一步,RecordChangeComplete 事件处理程序被设置为 adStatusErrorsOccurred 的状态操作数调用。匹配的 Complete 事件被 will 事件调用。

多个 Will 和 Complete 事件处理程序可被同一个操作调用,但是可以取消挂起操作。当不同于多个 will 事件的最后一个事件的事件处理程序取消操作时,请检查发生了什么。
再次想象一下前面的同一组成对事件处理程序。开始更改字段值;这时将调用 WillChangeField 事件处理程序,返回 adStatusCancel,从而指示更改字段是不可接受的。操作没有完成;FieldChangeComplete 事件处理程序通知操作已经结束而且状态和错误参数已经进行了适当的设置。

然而,由于第一个 will 事件取消操作,WillChangeRecord(还有 RecordChangeComplete)事件处理程序未被调用。通常,如果 will 事件取消操作,其他 will 事件处理程序将不会被调用。

不成对的事件处理程序

通过返回 status 参数的 adStatusUnwantedEvent 可以关闭任何事件的事件通知。例如,第一个 Complete 事件处理程序被调用时,将返回 adStatusUnwantedEvent,并且您随后只收到 will 事件。

检查操作中将要使用的参数时,单个 will 事件处理程序会很有帮助。您可以修改这些操作参数或者取消操作。

另外一种情况是,打开 Complete 事件通知,当第一个 will 事件处理程序被调用时,返回 adStatusUnwantedEvent。您随后将只收到 Complete 事件。

单个 Complete 事件处理程序是管理异步操作的有效工具。每个异步操作都具有相应的 Complete 事件。

例如,充填很大的 Recordset 对象要花很长时间。如果应用程序编写恰当,则可以启动 Recordset.Open(...,adAsyncExecute) 操作并继续其他处理程序。最终您一定会在 ExecuteComplete 事件充填 Recordset 时收到通知。

单个事件处理程序和多个对象

Microsoft Visual C++ 这类程序语言的灵活性使得一个事件处理程序可以处理多个对象的事件。例如,应用一个 Disconnect 事件处理程序可以处理多个 Connection 对象的事件。如果一个连接结束,Disconnect 事件处理程序即会被调用。因为事件处理程序参数 object 被设置到相应的 Connection 对象,您可以判断出引起事件的连接。

因为 Visual Basic 只能使一个对象与一个事件相关联,此技术不能应用于该语言。

多个事件处理程序和单个操作

要让一个 ADO 对象及其操作与多组事件相关联是可能的,但是不太有用。例如,每次执行专门的字段有效性编辑时,可以创建多个 WillChangeField 事件。如果字段将要更改,某个 will 事件可能会使字段值的某个部分有效,而另一个 will 事件则会使另一部分有效。

此技术之所以不太有用,是因为通过单个事件处理程序易于执行或调用所有的编辑程序。但为了完整起见,我们才在此提到这一思想。

______________________________________________________
请把你的代码写全,否则谁也不知道你在这之前写了什么(按照现有代码,不会出错)以上内容仅作参考

参考资料:MSDN

温馨提示:内容为网友见解,仅供参考
无其他回答

vb用ado添加出现错误"操作已被取消",请问为什么?
FieldChangeComplete 事件通知您操作已经结束。事件处理程序状态操作数被设为 adStatusErrorsOccurred;错误参数引用 Error 对象,而 Error 对象的 Number 属性被设为 ADO 值或提供者,从而指示操作已被取消。多个 Will 和 Complete 事件处理程序可被同一操作调用。当多个 will 事件成功时,请检查出现了什么情...

VB连接无法用于此操作,在此上下文中它可能已被关闭或无效
将此行:Set ADOcn = New Connection 换成:set ADOcn =courrentproject.connection ADOcn.Open strAccess ' j将此行删除 这是打开位于其他文件内的数据库用的语句 Form1.Show End Sub 将Rs.Open "select 学号 from 测试 where 学号=" & Trim$(Text1) & " "换成:'因为没有连接名称,...

在做vb连接数据库时出现 错误 提示"加载DLL错误怎么回事"
最常见的问题是 vb的project文件引用 ado组件的引用信息失效了,或者还有别的引用实效。方法,点击菜单 项目-〉引用,找到打勾的 microsoft activeX Data Objects xxxx Library,去除选择,保存项目,然后重新再把它加进来,在编译。如果有其他的引用上提示有错误的同样去掉他们重新加,或者可能你的vb环境没...

VB ADO 记录正常保存却提示对象关闭不允许操作
Adodc1.CommandType = adCmdText

vb中利用adodc控件插入新纪录插入记录,主键重复后会提示错误然后退出系 ...
一是用On error goto 跳出错误 二是在录入之前 进行一次判断 把SOuce语句改为 "select * from 学号表 where 学号='12345'"再判断Recordcount是否大于0 如果大于0则表示存在 ,提示弹出错误 这里有一个Recordset对像的代码 参考 Dim rs As New ADODB.Recordset rs.Open "select * from 学号表...

VB中使用ado控件的问题,急~~~``
在VB中使用ADO控件时,通常会在窗体的Load事件代码中添加WITH END WITH语句以简化对象的创建和管理。具体到您提供的代码示例,以下是详细的解析和解释。WITH ADODC1 语句用于声明和初始化ADODC1对象。这里的ADODC1是您所使用的ADO Data Control的实例名,用于与数据库进行交互。Adodc1.ConnectionString = ...

有关VB中ADO 的AddNew的问题
两个原因,一是你的表是不是只有一个字段,提交的时候其他字段为空了!二是没有用adodc1.refrsh

VB录入数据时出现.text未找到方法错误
VB中用 ADO 访问 Access 数据库连接字符串应该这样:'连接Access数据库 connect_string="Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source="+App.Path & "\\Database12.mdb "cnn.Open connect_string strSQL = "Select * From 读者管理"sn.Open strSQL,cnn, ...

vb判断数据库连接用state,如果是连接失败,还没有判断就已经提示出错了...
SQLState 和 NativeError 属性,提供来自 SQL 数据源的信息。出现提供者错误时,Error 对象将被放在 Connection 对象的 Errors 集合中。ADO 支持由单个 ADO 操作返回多个错误,以便显示特定提供者的错误信息。要在错误处理程序中获得丰富的错误信息,可使用相应的语言或所在工作环境下的错误捕获功能,然后...

VB使用adodc 控件出现灾难性故障
没有运行库吧。VB和调用ADO空间写出来的程序必须要有运行库(除非在代码内用类实现)。而你现在重装了系统,没有VB运行库。所以运行以前使用用VB写的调用ADODC控件的程序会出错。完整的安装VB就好了。

相似回答