Update: Unterdrückt ADO-Fehler beim Abrufen von in Nonvariant Datentypen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 274423 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Beim Abrufen von Rowsets Werte in nonvariant Datentypen möglicherweise (ActiveX Data Objects) Fehler unterdrückt, die mit den Status des Recordsets, z. B. Benachrichtigungen verknüpft sind, dass der Datensatz von einem anderen Benutzer gesperrt wurde.

Dieses Problem tritt in Microsoft Data Access Components (MDAC) Version (Microsoft Windows 2000-MDAC 2.5 RTM) 2.50.4403.12 und 2.51.5303.5 (Windows 2000-MDAC 2.5 SP1). Dieses Problem tritt nicht in MDAC-Version (MDAC 2.6 RTM) 2.60.6526.3.

Ursache

Geringfügig Codepfad wird ausgeführt, je nachdem, ob die Anwendung in variant Datentypen abgerufen wird. Die Verwendung von Varianten wird in einer internen Kontextobjekt gewrappt, über die Möglichkeit, Fehlerinformationen zurückgegeben. Nonvariants haben keinen dieser Kontext Wrapper und keine Fehlerinformationen zurück.

Lösung

Um dieses Problem zu beheben, installieren Sie das neueste Servicepack für Microsoft Data Access Components 2.5. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
293312INFO: Wie erhalten Sie die neueste MDAC 2.5 Servicepack
Die englische Version dieses besitzt die Dateiattribute (oder höher), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time () angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   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
				

PROBLEMUMGEHUNG

Es gibt keine Möglichkeit, dieses Problem zu umgehen.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals im Microsoft Data Access Components 2.5 Service Pack 2.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Kopieren Sie folgenden Code in ein Visual Basic-Projekt:

    Hinweis: <username>Sie müssen die UID <benutzername> Ändern Wert und die PWD = < sicheres kennwort > Wert auf die richtigen Werte, bevor Sie diesen Code ausführen. Vergewissern Sie sich, dass UID die erforderlichen Berechtigungen für diese Datenbankoperation hat.
    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. Fügen Sie einen Verweis auf Microsoft ActiveX Data Objects 2.5 Library.
  3. Führen Sie den Code, und wählen Sie Ja , wenn Sie aufgefordert werden einen Variant-Wert verwenden. Beachten Sie, dass ein "Timeout abgelaufen" Fehlermeldung zurückgegeben wird, der angibt, dass die Datensätze in der angegebenen Zeit nicht abgerufen werden konnte.
  4. Den Code erneut ausführen, und diesmal wählen Sie Nein , wenn Sie aufgefordert, einen Variant-Wert verwenden. Dieses Mal wird ein Fehler zurückgegeben, die besagt, dass kein aktueller Datensatz vorhanden ist, jedoch keinen Hinweis darauf, dass Ihr Zeitlimit überschritten.

Informationsquellen

Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
247757Update: Verbindung Leck mit parametrisierten Befehl in ADO
264442Update: ADO-Recordset verliert Filter-Eigenschaft bei gemarshallt in Prozeduren
264701Update: ADO Recordset ByRef übergeben Fehlerinformationen zurücksetzen

Eigenschaften

Artikel-ID: 274423 - Geändert am: Sonntag, 23. Februar 2014 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
Keywords: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbado250fix kbbug kbfix kbmdac250fix kbqfe KB274423 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 274423
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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