FIX: ADO 隐含错误时获取到 Nonvariant 数据类型

文章翻译 文章翻译
文章编号: 274423 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

症状

获取到 nonvariant 数据类型的行集值,当 ActiveX 数据对象 (ADO) 可能会禁止与记录集如记录被另一个用户锁定的通知的状态相关的错误。

出现此问题是在 Microsoft 数据访问组件 (MDAC) 版本 (Microsoft Windows 2000/MDAC 2.5 RTM) 2.50.4403.12 和 2.51.5303.5 (Windows 2000/MDAC 2.5 SP1)。MDAC 版本中不会出现此问题 2.60.6526.3 (MDAC 2.6 RTM)。

原因

具体取决于是否在应用程序已获取到 variant 数据类型执行略有不同的代码路径。使用的变量被封装在能够返回错误的信息的内部上下文对象。nonvariants 没有此上下文包装,且不会返回错误的信息。

解决方案

若要解决此问题,获取最新的 service pack,对于 Microsoft 数据访问组件 2.5。有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
293312信息: 如何获取最新 MDAC 2.5 服务包
这样的英文版具有文件属性 (或更高版本) 下表中列出。其格式为协调通用时间 (UTC) 列出日期和时间对这些文件。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的日期和时间工具中的 时区 选项卡。
   Date       Version        Size             File name
   ----------------------------------------------------------
   8/29/2000  2.51.5629.0     20,480 bytes    Msader15.dll
   8/29/2000  2.51.5629.0    487,696 bytes    Msado15.dll
   8/29/2000  2.51.5629.0    172,304 bytes    Msadomd.dll
   8/29/2000  2.51.5629.0     57,616 bytes    Msador15.dll
   8/29/2000  2.51.5629.0    184,592 bytes    Msadox.dll
   8/29/2000  2.51.5629.0     57,616 bytes    Msadrh15.dll
   8/29/2000  2.51.5629.0     94,480 bytes    Msjro.dll
				

解决方法

没有此问题的解决方法。

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的问题。 Microsoft 数据访问组件 2.5 Service Pack 2 中,第一次已得到纠正此问题。

更多信息

重现行为的步骤

  1. 下面的代码复制到 vba 项目,请执行以下操作:

    注意您必须更改 UID <username>值和在 PWD = < 强密码 > 值,以正确的值,在运行此代码之前。请确保 UID 具有适当的权限在数据库上执行此操作。
    Dim cn As ADODB.Connection, cnOtherUser As ADODB.Connection
    Dim rs As ADODB.Recordset, rsOtherUser As ADODB.Recordset
    Dim strConn As String, strSQL As String
    Dim varData As Variant, intData As Integer
    
    strConn = "Provider=MSDASQL;Driver={SQL Server};Server=YourServer;Database=Northwind;UID=<user name>;PWD=<strong password>;"
    strSQL = "SELECT * FROM Customers"
    
    Set cnOtherUser = New ADODB.Connection
    cnOtherUser.Open strConn
    Set rsOtherUser = New ADODB.Recordset
    rsOtherUser.Open strSQL, cnOtherUser, adOpenKeyset, adLockPessimistic, adCmdText
    rsOtherUser.MoveFirst
    
    Set cn = New ADODB.Connection
    cn.Open strConn
    cn.CommandTimeout = 10
    Set rs = New ADODB.Recordset
    rs.Open strSQL, cn, adOpenKeyset, adLockPessimistic, adCmdText
    If MsgBox("Use Variant?", vbYesNo) = vbYes Then
        On Error Resume Next
        varData = rs(0)
        If Err.Number <> 0 Then
            MsgBox Err.Description
            Err.Clear
            cn.Errors.Clear
        Else
            MsgBox "No error!"
        End If
        On Error GoTo 0
    Else
        On Error Resume Next
        intData = rs(0)
        If Err.Number <> 0 Then
            MsgBox Err.Description
            Err.Clear
            cn.Errors.Clear
        Else
            MsgBox "No error!"
        End If
        On Error GoTo 0
    End If
    rs.Close
    cn.Close
    
    rsOtherUser.Close
    cnOtherUser.Close
    					
  2. 添加对 Microsoft ActiveX 数据对象 2.5 引用库。
  3. 运行在的代码,并选择 当系统提示您使用一个 variant 类型的值。请注意,"过期超时"的错误消息返回,该值指示该记录可能不读取在指定的时间。
  4. 再次,运行代码,这一次选择 时系统提示您使用一个 variant 类型值。这次被返回错误说明没有当前记录,但您超出了您超时没有指示。

参考

有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
247757使用 ADO 中的参数化的命令的 FIX: 连接泄漏
264442FIX: ADO 记录集丢失时封送的筛选器属性进程内
264701FIX: 传递 ADO 记录集 ByRef 置错误信息

属性

文章编号: 274423 - 最后修改: 2014年2月24日 - 修订: 2.2
这篇文章中的信息适用于:
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
关键字:?
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbado250fix kbbug kbfix kbmdac250fix kbqfe KB274423 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 274423
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com