В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Производительность в основе Access или программы Jet на основе базы данных после обновления с Windows NT 4.0 до Windows 2000 или Windows XP

Поддержка Office 2003 завершена

8 апреля 2014 г. корпорация Майкрософт прекратила поддержку Office 2003. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:891176
Проблема
После обновления операционной системы Microsoft Windows NT 4.0 для Microsoft Windows 2000 или Microsoft Windows XP Professional, падает производительность Microsoft Access — или Jet приложений на основе базы данных.
Причина
Эта проблема может возникнуть, если один или нескольких из следующих условий:
  • При работе с разделением базы данных и файл базы данных для базы данных находится в папке, имя которого содержит более 8 символов. Например, файл базы данных сервера находится в папке, которая имеет имя, похожее на следующее:
    BigFolderName
  • При работе с разделением базы данных и имя файла базы данных сервера содержит более 8 символов, за исключением .mdb трехзначное расширение имени файла. Например, файл базы данных сервера имеет имя, похожее на следующее:
    BigDatabaseFileName.mdb
  • При работе с базой данных, не разбивается и имя файла базы данных не соответствует 8.3, соглашение об именах. Или база данных хранится в папке, которая имеет длинное название.
Кэширование структуры службы рабочей станции в Windows 2000 и более поздних версиях Windows отличается от структуры кэширования службы рабочей станции в более ранних версиях Windows.

В Windows 2000 и более поздних версиях Windows кэширования структуру службы рабочей станции был изменен на предпочитать базы данных проверки целостности в многопользовательской среде. Это изменение макета вызывает задержку при Jet делает вызовы API для получения сведений об имени папки длинные или о длинное имя файла. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
889588Как оптимизировать Office Access и Jet ядро сетевой производительности базы данных с клиентами Windows 2000 и Windows XP
Решение
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и или подразумеваемых. Включая, но не ограничивая, подразумеваемые гарантии товарности или пригодности для использования в определенных целях.. В данной статье предполагается, что вы знакомы с языком программирования предложенном в примере, а также с средствами, которые используются для создания и отладки.. Сотрудники службы поддержки Майкрософт могут объяснить возможности конкретной процедуры, но не выполнять модификации примеров для обеспечения функциональных возможностей или создания процедур соответствующих определенным требованиям..

При работе с разделением базы данных, можно устранить эту проблему, повторное связывание существующих таблиц 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 LongFunction 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 IfExitHandler:     Exit FunctionErrorHandler:    MsgBox Err.Description & " " & Err.Number    Resume ExitHandler    End FunctionFunction 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 FunctionFunction 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 IfDoesfileExist_End:    Exit FunctionDoesfileExist_Err:    DoesFileExist = False    Resume DoesfileExist_EndEnd Function
  3. ЗапускаRefreshLinksфункция . Чтобы сделать это, выполните следующие действия:
    1. Щелкните в редакторе Visual BasicОкно интерпретациинаПредставлениеменю.
    2. В окне интерпретации, типRefreshLinks. Затем нажмите клавишу ВВОД.
RefreshLinksфункция циклы хотя Jet таблиц в базе данных и проверяет, действителен ли ссылка. Если ссылка является допустимым, данный код использует Windows API функцияGetShortPathNameсоздать короткое имя, которое следует за 8.3, соглашение об именах. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
142982Как Windows создает имен файлов в длинные имена файлов 8.3
Этот код обновляет ссылки, используя путь, включающий новое краткое имя. Если ссылка указывает на файл базы данных сервера, не соблюдаются 8.3, соглашение об именах, этот код создает сообщение для предложения для переименования файла базы данных сервера.
Статус
Корпорация Майкрософт подтвердила, что это является проблемой в продуктах Майкрософт, которые перечислены в разделе «Данная статья применима к».

ПримечаниеПри использовании Windows XP, может повысить производительность путем применения Windows XP с пакетом обновления 2 (SP2).
Дополнительная информация
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
209862Как связать таблицы базы данных с общий элемент управления диалогового окна в Microsoft Access 2000
175512Как получить короткое имя файла из длинного имени файла
ACC2007 Acc2002 Acc2003 Microsoft Access XP Jet NT4 NT4.0 Win2000 WinXP

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 891176 — последний просмотр: 09/17/2011 10:39:00 — редакция: 3.0

Microsoft Office Access 2007, Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition, Microsoft Access 2000 Standard Edition, Microsoft Access 97 Standard Edition

  • kbfilesystems kbenv kbtshoot kbhowto kbinfo kbmt KB891176 KbMtru
Отзывы и предложения