FIX: ADO 抑制錯誤時擷取到 nonvariant 資料型別

文章翻譯 文章翻譯
文章編號: 274423 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

徵狀

當成 nonvariant 資料型別擷取資料列集值,ActiveX 資料物件 (ADO) 可能會抑制與資料錄集如記錄被另一個使用者鎖定的通知狀態相關的錯誤。

之所以發生這個問題在 Microsoft 「 資料存取元件 (MDAC) 版本 2.50.4403.12 (Microsoft Windows 2000/MDAC 2.5 RTM) 和 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 知識庫 」 中的發行項]:
293312INFO: 如何取得最新的 MDAC 2.5 Service Pack
Hotfix 的英文版具有檔案屬性 (或更新) 中如下表所列。這些檔案的日期和時間為 Coordinated Universal Time (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. 將下列程式碼複製到 Visual Basic 專案:

    附註您必須變更 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 知識庫 」 中 「 文件:
247757FIX: 連線遺漏使用參數化中 ADO 命令
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
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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