基于访问的或 $ 喷墨基于数据库的程序后您从 Windows NT 4.0 升级到 Windows 2000 或升级到 Windows XP 中的性能下降

文章翻译 文章翻译
文章编号: 891176 - 查看本文应用于的产品
展开全部 | 关闭全部

症状

Microsoft Windows 2000 或 Microsoft Windows XP 专业人员从 Microsoft Windows NT 4.0 升级您的计算机后,您可能会遇到较慢的性能,在 Microsoft Access-基于或 Jet 基于数据库的程序。

原因

可能出现此问题,如果一个或多个下列条件,则请执行以下操作:
  • 您正在使用一个拆分数据库和后端数据库文件所在的文件夹具有大于 8 个字符的名称。例如对于该后端数据库文件所在的文件夹具有与以下内容类似的名称:
    BigFolderName
  • 您正在使用一个拆分数据库和后端数据库文件的名称的长度超过 8 个字符,不包括三个字符.mdb 文件扩展名。例如对于该后端数据库文件都有一个与以下内容类似的名称:
    BigDatabaseFileName.mdb
  • 您正在使用的不拆分数据库和数据库文件的名称不遵循 8.3 命名约定。或数据库存储在具有长名称的文件夹。
$ 工作站服务在 Windows 2000 和更高版本中的缓存设计是 windows 的 windows 的不同的缓存的 $ 工作站服务在早期版本设计的。

在 Windows 2000 和更高版本的 Windows 中,缓存设计的工作站服务已被更改为支持数据库在多用户环境中的完整性。此设计更改会导致延迟,当 Jet 进行 API 调用来检索有关的长文件夹名或长文件名信息。 有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
889588如何优化 Office 访问和 Jet 数据库引擎的网络性能与基于 Windows 2000 的和基于 Windows XP 的客户端

解决方案

Microsoft 提供的编程示例只,用于说明不附带任何明示或暗示保证。这包括,但不限于对适销性或针对特定用途的适用性的暗示的担保。本文假定您熟悉演示了正在使用的编程语言以及用于创建和调试过程的工具。Microsoft 支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您的具体要求。

如果您正在使用拆分数据库,可以通过重新链接现有的 Jet 表来解决此问题。若要执行此操作创建发送到 Windows API 的长文件夹名称的一个短的表示形式的代码。此解决方案要求您具有遵循 8.3 命名约定的文件名的后端数据库。若要进行此代码,请按照在前端数据库中的下列步骤操作:
  1. Microsoft ADO 分机 2.5 (或更高版本的 ADO) 中,设置的引用。
  2. 将下面的代码添加到新模块。
    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. 运行 RefreshLinks 函数。若要这样做,请按照下列步骤操作:
    1. 在 Visual Basic 编辑器中在 视图 菜单上单击 立即窗口
    2. 在立即窗口中键入 RefreshLinks。然后,请按 ENTER。
RefreshLinks 函数循环通过链接的 Jet 表,在数据库中,并验证是否为有效的链接。是否有效链接此代码使用 Windows API 函数 GetShortPathName 创建遵循 8.3 命名约定的短名称。 有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
142982Windows 如何生成的 8.3 文件名的长文件名
此代码然后更新链接,通过使用包括新的短名称的路径。如果链接指向不遵循 8.3 命名约定的后端数据库文件,该代码将生成一条消息,建议您重命名后端数据库文件。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

注意如果您使用 Windows XP,您可以通过应用 Microsoft Windows XP Service Pack 2 (SP2) 来提高性能。

更多信息

有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
209862如何重新使用常见的对话框控件,在 Access 2000 中的后端表的链接
175512如何获得的长文件名的短文件名

属性

文章编号: 891176 - 最后修改: 2007年12月1日 - 修订: 4.3
这篇文章中的信息适用于:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 标准版
  • Microsoft Access 2000 标准版
  • Microsoft Access 97 标准版?当用于
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional Edition
    • Microsoft Windows XP Tablet PC Edition
关键字:?
kbmt kbfilesystems kbenv kbtshoot kbhowto kbinfo KB891176 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 891176
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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