Rendimiento más lento en basado en Access o Jet base de datos de programas basados en después de actualizar desde Windows NT 4.0 a Windows 2000 o a Windows XP

Seleccione idioma Seleccione idioma
Id. de artículo: 891176 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Después de actualizar el equipo desde Microsoft Windows NT 4.0 a Microsoft Windows 2000 o Microsoft Windows XP Professional, puede experimentar un rendimiento más lento en Microsoft Access - basada o programas basados en la base de datos de Jet.

Causa

Este problema puede producirse si uno o más de las siguientes condiciones son verdaderas:
  • Está trabajando con una base de datos división y el archivo de base de datos back-end reside en una carpeta que tiene un nombre que tiene más de 8 caracteres. Por ejemplo, el archivo de base de datos back-end reside en una carpeta que tiene un nombre que es similar al siguiente:
    BigFolderName
  • Está trabajando con una base de datos división y el nombre del archivo de base de datos back-end es más de 8 caracteres excluida la extensión de nombre de archivo .mdb de tres caracteres. Por ejemplo, el archivo de base de datos de back-end tiene un nombre que es similar al siguiente:
    BigDatabaseFileName.mdb
  • Está trabajando con una base de datos no se divide y el nombre del archivo de base de datos no sigue la convención de nomenclatura 8.3. O la base de datos se almacena en una carpeta que tiene un nombre largo.
El diseño de almacenamiento en caché del servicio de estación de trabajo en Windows 2000 y en versiones posteriores de Windows es diferente del diseño de almacenamiento en caché del servicio de estación de trabajo en versiones anteriores de Windows.

En Windows 2000 y en versiones posteriores de Windows, se ha cambiado el diseño de almacenamiento en caché del servicio de estación de trabajo a favorecer integridad en un entorno multiusuario de base de datos. Este cambio de diseño produce un retraso cuando Jet realiza llamadas de API para recuperar información sobre el nombre largo de la carpeta o el nombre de archivo largo. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
889588Cómo optimizar el Office Access y Jet base de datos motor de rendimiento de la red con clientes basados en Windows 2000 y basado en Windows

Solución

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Si está trabajando con una base de datos dividida, puede resolver este problema por volver a vincular las tablas existentes de Jet. Para ello, cree código para enviar una representación corta del nombre larga de carpeta a la API de Windows. Esta solución requiere la base de datos back-end para que un nombre de archivo que sigue la convención de nomenclatura 8.3. Para crear este código, siga estos pasos en la base de datos front-end:
  1. Establecer una referencia a Microsoft ADO Ext 2.5 (o a una versión posterior de ADO).
  2. Agregue el código siguiente a un nuevo módulo.
    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. Ejecute la función RefreshLinks . Para ello, siga estos pasos:
    1. En el Editor de Visual Basic, haga clic en ventana Inmediato el menú Ver .
    2. En la ventana Inmediato, escriba RefreshLinks . A continuación, presione ENTRAR.
La función de RefreshLinks bucles aunque las tablas de Jet vinculadas en una base de datos y comprueba si el vínculo es válido. Si el vínculo es válido, este código utiliza la API de Windows funcione GetShortPathName para crear un nombre corto que sigue la convención de nomenclatura 8.3. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
142982Cómo Windows genera los nombres de archivo 8.3 de nombres de archivo largos
Este código, a continuación, actualiza el vínculo mediante una ruta de acceso incluye el nuevo nombre corto. Si el vínculo apunta a un archivo de base de datos back-end que no sigue la convención de nomenclatura 8.3, este código genera un mensaje para sugerir que cambie el nombre el archivo de base de datos back-end.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Nota Si utiliza Windows XP, puede mejorar el rendimiento mediante la aplicación Microsoft Windows XP Service Pack 2 (SP2).

Más información

Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
209862Cómo volver a vincular tablas de servidor con el control del diálogo común en Access 2000
175512Cómo obtener un nombre de archivo corto de un nombre de archivo largos

Propiedades

Id. de artículo: 891176 - Última revisión: sábado, 01 de diciembre de 2007 - Versión: 4.3
La información de este artículo se refiere a:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition sobre las siguientes plataformas
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Tablet PC Edition
Palabras clave: 
kbmt kbfilesystems kbenv kbtshoot kbhowto kbinfo KB891176 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 891176

Enviar comentarios

 

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