Baisse des performances dans en fonction d'accès ou Jet programmes en fonction de base de données après la mise à niveau de Windows NT 4.0 vers Windows 2000 ou Windows XP

Traductions disponibles Traductions disponibles
Numéro d'article: 891176 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Symptômes

Après la mise à niveau votre ordinateur de Microsoft Windows NT 4.0 vers Microsoft Windows 2000 ou Microsoft Windows XP Professionnel, vous pouvez rencontrer baisse des performances dans Microsoft Access, en fonction ou Jet programmes de base de données en fonction.

Cause

Ce problème peut se produire si une ou plusieurs des conditions suivantes sont remplies :
  • Vous travaillez avec une base de données fractionnée, et le fichier de base de données back-end réside sur un dossier qui porte un nom qui est plu de 8 caractères. Par exemple, le fichier de base de données back-end réside sur un dossier qui porte un nom qui est semblable au suivant :
    BigFolderName
  • Vous travaillez avec une base de données fractionnée, et le nom du fichier de base de données back-end est plu de 8 caractères excluant l'extension de fichier .mdb de trois caractères. Par exemple, le fichier de base de données back-end possède un nom qui est semblable au suivant :
    BigDatabaseFileName.mdb
  • Vous travaillez avec une base de données qui est non, et le nom du fichier de base de données ne respecte pas la 8.3 convention d'affectation de noms. Ou la base de données est stocké dans un dossier qui possède un nom long.
La conception de la mise en cache du service station de travail dans Windows 2000 et versions ultérieures de Windows est différente de la conception de la mise en cache du service station de travail dans les versions antérieures de Windows.

Dans Windows 2000 et versions ultérieures de Windows, la structure de mise en cache du service station de travail a été changée en favorisent base de données d'intégrité dans un environnement multi-utilisateur. Cette modification de conception provoque un retard lorsque Jet effectue des appels D'API pour récupérer des informations sur le nom de dossier long ou sur le nom de fichier long. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
889588 Comment faire pour optimiser Office Access et Jet base de données de moteur de performances du réseau avec les clients Windows 2000 et Windows XP

Résolution

Microsoft fournit des exemples de programmation pour illustration uniquement, sans garantie explicite ou implicite. Cela inclut, mais n'est pas limité aux garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils qui sont utilisés pour créer et déboguer des procédures. Les techniciens du support technique Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière, mais ils ne sont pas modifier les exemples en vue de fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques.

Si vous travaillez avec une base de données fractionnées, vous pouvez résoudre ce problème en réassocier vos tables Jet existantes. Pour ce faire, créez le code pour envoyer une représentation courte du nom de dossier long à l'API de Windows. Cette résolution requiert la base de données back-end et nom de fichier qui suit la 8.3 convention d'affectation de noms. Pour créer ce code, procédez comme suit sur la base de données frontale :
  1. Définir une référence à Microsoft ADO Ext 2.5 (ou une version ultérieure d'ADO).
  2. Ajoutez le code suivant à un nouveau module.
    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. Exécutez la fonction RefreshLinks . Pour ce faire, procédez comme suit :
    1. Dans Visual Basic Editor, cliquez sur Fenêtre Exécution dans le menu Affichage .
    2. Dans la fenêtre Exécution, tapez RefreshLinks . Ensuite, appuyez sur ENTRÉE.
La fonction RefreshLinks passe bien que les tables Jet liées dans une base de données et vérifie si le lien est valide. Si le lien est valide, ce code utilise l'API de Windows fonctionne GetShortPathName pour créer un nom court qui suit la 8.3 convention d'affectation de noms. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
142982 Comment Windows génère des noms de fichiers 8.3 à partir de noms de fichiers longs
Ce code met ensuite à jour le lien en utilisant un chemin d'accès qui inclut le nouveau nom court. Si le lien pointe vers un fichier de base de données back-end qui ne respecte pas la 8.3 convention d'affectation de noms, ce code génère un message pour suggérer que vous renommer le fichier de base de données back-end.

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

note Si vous utilisez Windows XP, vous pouvez améliorer les performances en appliquant Windows XP Service Pack 2 (SP2).

Plus d'informations

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
209862 Comment faire pour relier des tables back-end avec le contrôle boîte de dialogue courantes dans Access 2000
175512 Comment obtenir un nom de fichier court à partir d'un nom de fichier long

Propriétés

Numéro d'article: 891176 - Dernière mise à jour: samedi 1 décembre 2007 - Version: 4.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard sur le système suivant
    • Microsoft Windows 2000 Professionnel
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Tablet PC Edition
Mots-clés : 
kbmt kbfilesystems kbenv kbtshoot kbhowto kbinfo KB891176 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 891176
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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