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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

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.ConnectionDim rs As ADODB.Recordset, rsOtherUser As ADODB.RecordsetDim strConn As String, strSQL As StringDim varData As Variant, intData As IntegerstrConn = "Provider=MSDASQL;Driver={SQL Server};Server=YourServer;Database=Northwind;UID=<user name>;PWD=<strong password>;"strSQL = "SELECT * FROM Customers"Set cnOtherUser = New ADODB.ConnectioncnOtherUser.Open strConnSet rsOtherUser = New ADODB.RecordsetrsOtherUser.Open strSQL, cnOtherUser, adOpenKeyset, adLockPessimistic, adCmdTextrsOtherUser.MoveFirstSet cn = New ADODB.Connectioncn.Open strConncn.CommandTimeout = 10Set rs = New ADODB.Recordsetrs.Open strSQL, cn, adOpenKeyset, adLockPessimistic, adCmdTextIf 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 0Else    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 0End Ifrs.Closecn.ClosersOtherUser.ClosecnOtherUser.Close					
  2. 將參考加入至 Microsoft ActiveX 資料物件 2.5 程式庫。
  3. 執行程式碼,並選擇 [是] 提示使用 Variant 時。請注意,發生逾時過期 」 錯誤訊息會傳回表示指定的時間量無法讀取記錄。
  4. 再次,執行程式碼,這次選擇 提示使用 Variant 時。這次會傳回錯誤訊息指出沒有目前的記錄,但是沒有不會指出您已超過您逾時。
参考
如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
247757FIX: 連線遺漏使用參數化中 ADO 命令
264442FIX: ADO 資料錄集將會遺失篩選屬性,當封送處理同處理序
264701FIX: 傳遞 ADO 資料錄集 ByRef 重設資訊時發生錯誤
努力抑制會抑制錯誤訊息的逾時自設機甲提取

警告:本文已自動翻譯

內容

文章識別碼:274423 - 最後檢閱時間:02/24/2014 03:19:54 - 修訂: 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
意見反應