Auf Access oder einer Jet-Datenbank basierende Programme arbeiten nach Upgrade von Windows NT 4.0 auf Windows 2000 oder Windows XP langsamer

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 891176 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
891176 Slower performance in Access-based or Jet database-based programs after you upgrade from Windows NT 4.0 to Windows 2000 or to Windows XP
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Problembeschreibung

Nach dem Upgrade eines Computers von Microsoft Windows NT 4.0 auf Microsoft Windows 2000 oder Microsoft Windows XP Professional arbeiten Programme, die auf Microsoft Access oder einer Jet-Datenbank basieren, möglicherweise langsamer.

Ursache

Dieses Problem kann auftreten, wenn eine oder mehrere der folgenden Bedingungen vorliegen:
  • Sie verwenden eine geteilte Datenbank, und die Back-End-Datenbankdatei befindet sich in einem Ordner, dessen Name mehr als 8 Zeichen enthält. Beispiel: Die Back-End-Datenbankdatei befindet sich in einem Ordner mit einem Namen etwa folgender Art:
    LangerOrdnername
  • Sie verwenden eine geteilte Datenbank, und der Name der Back-End-Datenbankdatei ist ohne die aus drei Zeichen bestehenden Dateinamenerweiterung ".mdb" länger als 8 Zeichen. Beispiel: Die Back-End-Datenbankdatei hat einen Namen etwa folgender Art:
    LangerDatenbankdateiname.mdb
  • Sie verwenden eine Datenbank, die nicht geteilt ist, und der Name der Datenbankdatei entspricht der 8.3-Namenskonvention, oder die Datenbank ist in einem Ordner mit einem langen Namen gespeichert.
Das Cachekonzept des Arbeitsstationsdiensts in Windows 2000 und höheren Versionen von Windows unterscheidet sich vom Cachekonzept des Arbeitsstationsdiensts in früheren Versionen von Windows.

In Windows 2000 und späteren Versionen von Windows wurde das Cachekonzept des Arbeitsstationsdiensts geändert, um die Datenbankintegrität in einer Mehrbenutzerumgebung zu wahren. Das geänderte Konzept verursacht eine Verzögerung bei API-Aufrufen von Jet zum Abrufen von Informationen über lange Ordner- oder Dateinamen. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
889588 Optimieren der Netzwerkleistung von Office Access und der Jet-Datenbank-Engine mit Windows 2000- und Windows XP-Clients

Lösung

Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. In diesem Artikel wird vorausgesetzt, dass Sie mit der in den Beispielen verwendeten Programmiersprache und mit den zum Erstellen und Debuggen von Prozeduren verwendeten Tools vertraut sind. Die Spezialisten von Microsoft Support Services können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind.

Wenn Sie eine geteilte Datenbank verwenden, können Sie das geschilderte Problem beheben, indem Sie die bestehenden Jet-Tabellen wieder verknüpfen. Erstellen Sie hierzu Code, der eine Kurzdarstellung des langen Ordnernamens an die Windows-API sendet. Für diese Lösung ist es erforderlich, dass der Dateiname der Back-End-Datenbank der 8.3-Namenskonvention entspricht. Führen Sie zum Erstellen des Codes in der Front-End-Datenbank die folgenden Schritte aus:
  1. Legen Sie einen Verweis auf Microsoft ADO Ext 2.5 (oder eine höhere Version von ADO) fest.
  2. Fügen Sie in einem neuen Modul den folgenden Code ein:
    Declare Function GetShortPathName Lib "kernel32" _
                Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
               ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
    
    Function RefreshLinks()
        On Error GoTo ErrorHandler
        
        'Define the ADOX Catalog object.
        Dim objCat As New ADOX.Catalog 
        'Define the ADOX Table object.
        Dim objTbl As ADOX.Table 
    
        'Database name of the linked table.
        Dim strFilename As String 
        'Path and database name of the linked table.
        Dim strFullName As String 
    
        Dim blnIsMapi As Boolean
        Dim blnIsImex As Boolean
        Dim blnIsTemp As Boolean
        Dim blnLongFileName As Boolean
        Dim blnFailedLink As Boolean
        Const srtImex = "IMEX"
        Const strMapi = "MAPILEVEL="
    
        'Open the catalog.
        objCat.ActiveConnection = CurrentProject.Connection
    
        'Loop through the table collection and update the linked tables.
        For Each objTbl In objCat.Tables
            'Verify that the table is a linked table.
            If objTbl.Type = "LINK" = True Then
                blnIsTemp = objTbl.Properties("Temporary Table") Or Left(objTbl.Name, 1) = "~"
                blnIsImex = (InStr(1, objTbl.Properties("Jet OLEDB:Link Provider String"), srtImex, vbTextCompare) > 0)
                blnIsMapi = (InStr(1, objTbl.Properties("Jet OLEDB:Link Provider String"), strMapi, vbTextCompare) > 0)
    
                If Not blnIsTemp And Not blnIsImex And Not blnIsMapi Then  
                    'Verify that the table is a Jet table.
                    strFullName = objTbl.Properties("Jet OLEDB:Link Datasource")
                    strFilename = Mid(strFullName, InStrRev(strFullName, "\", _
                                Len(strFullName)) + 1, Len(strFullName))
                    'Determine whether the database exists.
                    If DoesFileExist(strFullName) = True Then
                        objTbl.Properties("Jet OLEDB:Link Datasource") = GetShortName(strFullName)  
                    'Update the link by using the short path name.
                    Else
                        MsgBox "Cannot update: '" & objTbl.Name & "'" & String(2, vbCrLf) & "File not found: " & vbCrLf & strFullName
                        blnFailedLink = True
                    End If
                    If InStr(strFilename, ".") > 9 Then blnLongFileName = True
                End If
            End If
        Next
       
        If blnFailedLink = False Then
            If blnLongFileName = True Then
                MsgBox "The table links were successfully updated, but the name of the backend database file does not follow 8.3" & _
                vbCrLf & "Please rename the file, relink the tables, and then run the procedure again.", vbExclamation
            Else
                MsgBox "The links were successfully updated!!! ", vbInformation
            End If
        Else
            MsgBox "The links were not successfully updated." & vbCrLf & "Please verify you table links.", vbExclamation
        End If
    
    ExitHandler:
         Exit Function
    
    ErrorHandler:
        MsgBox Err.Description & " " & Err.Number
        Resume ExitHandler
        
    End Function
    Function GetShortName(ByVal sLongFileName As String) As String
               Dim lRetVal As Long, sShortPathName As String, iLen As Integer
               'Set up a buffer area for the API function call return.
               sShortPathName = Space(255)
               iLen = Len(sShortPathName)
        
               'Call the function.
               lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
               'Remove unwanted characters.
               GetShortName = Left(sShortPathName, lRetVal)
     End Function
    
    Function DoesFileExist(strFileSpec As String) As Boolean
        'Return True if the file that is specified in the
        'strFilespec argument exists.
        'Return False if strFileSpec is not a valid
        'file or if strFileSpec is a directory.
        Const INVALID_ARGUMENT As Long = 53
        On Error GoTo DoesfileExist_Err
        If (GetAttr(strFileSpec) And vbDirectory) <> vbDirectory Then
            DoesFileExist = CBool(Len(Dir(strFileSpec)) > 0)
        Else
            DoesFileExist = False
        End If
    DoesfileExist_End:
        Exit Function
    DoesfileExist_Err:
        DoesFileExist = False
        Resume DoesfileExist_End
    End Function
    
  3. Führen Sie die Funktion RefreshLinks aus. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Visual Basic-Editor im Menü Ansicht auf Direktfenster.
    2. Geben Sie im Direktfenster RefreshLinks ein. Drücken Sie anschließend die [EINGABETASTE].
Die Funktion RefreshLinks durchläuft die verknüpften Jet-Tabellen in einer Datenbank und überprüft die Gültigkeit des Links. Wenn der Link gültig ist, erstellt der Code unter Verwendung der Windows-API-Funktion GetShortPathName einen kurzen Namen, der der 8.3-Namenskonvention entspricht. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
142982 Generierung von "8.3"-Dateinamen aus langen Dateinamen
Anschließend aktualisiert der Code den Link unter Verwendung eines Pfads mit dem neuen kurzen Namen. Wenn der Link auf eine Back-End-Datenbankdatei verweist, die nicht der 8.3-Namenskonvention entspricht, erzeugt der Code eine Meldung mit der Aufforderung, die Back-End-Datenbankdatei umzubenennen.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Hinweis: Unter Windows XP können Sie die Leistung verbessern, indem Sie Microsoft Windows XP Service Pack 2 (SP2) installieren.

Weitere Informationen

Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
209862 Wie erneut Binden von Back-End-Tabellen mit dem allgemeinen Dialogsteuerelement in Access 2000
175512 Wie Bekommen eines kurzen Dateinamen von einem langen Dateiname

Eigenschaften

Artikel-ID: 891176 - Geändert am: Montag, 25. Februar 2008 - Version: 4.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition, wenn verwendet mit:
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Tablet PC Edition
Keywords: 
kbfilesystems kbenv kbtshoot kbhowto kbinfo KB891176
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