在 Access 為主或噴墨資料庫為基礎程式至 Windows 2000 或 Windows XP 從 Windows NT 4.0 升級之後緩慢的效能

文章翻譯 文章翻譯
文章編號: 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 Ext 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 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition?應用於:
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Tablet PC Edition
關鍵字:?
kbmt kbfilesystems kbenv kbtshoot kbhowto kbinfo KB891176 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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