Поиск…


Вступление

Когда вы получаете сообщение об ошибке: «Microsoft Access столкнулся с проблемой и ее необходимо закрыть», часто бывает не так много информации, чтобы помочь вам определить причину ошибки. Ниже приведен ряд шагов, которые можно предпринять для устранения причин ошибок.

замечания

Обязательно удалите другие переменные из уравнения во время тестирования

Коррупция сети

Не загружайте клиента из сети. Поместите его на локальный диск и запустите его оттуда.

Корпоративные сборки

Если вы находитесь в корпоративной среде, использующей «сборку компьютеров» и не добившись успеха в деле декомпиляции, тестирования памяти или удаления двоичных данных, то откажитесь от дальнейшего тестирования, пока ИТ-команда не сможет предоставить пользователю тестовую машину, установлены только Windows, Office и Service Pack.

Все программное обеспечение и обновления должны быть установлены вручную без использования автоматической установки. Не устанавливайте антивирус на этой машине для тестирования.

Поймите, что многие ИТ-отделы просто пытаются использовать подход «один размер-подгонки» со сборками, и их сборки основаны друг на друге. Со временем конфликты программного обеспечения могут привести к сбою или сбоям в доступе.

Плохая энергия

Как упоминалось в примере с памятью - колебания мощности могут вызывать компьютерные ошибки. Если база данных находится в промышленном здании, попробуйте получить питание от кондиционера питания или ИБП, который обеспечивает чистую мощность (от батареи, а не от основного, проходящего через металлический оксидный варистор)

Также проверьте кабель питания, который подключается к панели питания или розетке. Убедитесь, что характеристики манометра и напряжения достаточны. ИТ-отделы часто оставляют силовые кабели подключенными к станции и просто удаляют машину. После многих лет они используют более мощные источники питания, но не отключили кабель. Это имеет значение. Если вы сомневаетесь, принесите новый, более толстый кабель.

Декомпилировать базу данных

Это всегда должно быть вашим первоначальным исправлением. Хорошей политикой является декомпиляция базы данных перед каждой версией.

  1. Создайте ярлык декомпиляции . Это загружает базу данных с помощью переключателя «/ decompile».

    1. Щелкните правой кнопкой мыши файл базы данных. Выберите Копировать
    2. Щелкните правой кнопкой мыши в окне проводника и выберите «Вставить ярлык»
    3. Щелкните правой кнопкой мыши ярлык и выберите «Свойства»
    4. В поле «Цель» перейдите в конец строки и добавьте /decompile
    5. Нажмите «ОК», чтобы закрыть ярлык
  2. Откройте базу данных с помощью Shift.
    Удерживая клавишу shift, дважды нажмите на этот ярлык. Это предотвращает выполнение автоматических прогонов в базе данных. Вы должны перейти прямо в навигационное окно.

  3. Компактность и восстановление базы данных. После загрузки базы данных вам нужно нажать кнопку «Компакт» и «Восстановить».

    1. Найдите кнопку « Компакт» и «Восстановить базу данных» на ленте инструментов .
    2. Удерживайте клавишу Shift. Держите его нажатой, когда вы нажимаете кнопку « Компакт» и «Ремонт» .
  4. Перекомпилировать базу данных

    1. Войдите в окно VBA (Control + G)
    2. Выберите Debug -> Compile из меню

Это полный процесс декомпиляции. Как правило, он должен исправить 99% всех сбоев Access или странных форм поведения.

Проверка памяти компьютера

Если ваши сбои случайны или спорадичны, сделайте этот шаг. Если ваши сбои происходят каждый раз, когда вы запускаете базу данных, то этот шаг не будет устранять проблему (хотя, возможно, причиной является коррупция).

Используйте тестер памяти, который загружается за пределы операционной системы и выполняет несколько проходов. Два популярных варианта: MemTest86 (Commercial) и MemTest86 + (Open Source)

Запустите тест и дайте ему работать в рабочее время. Причина этого в том, что другие факторы в здании, такие как шум на силовых цепях, могут вызвать ошибки памяти, поэтому вы хотите попытаться сохранить переменные одинаковыми.

Если у вас есть ошибки памяти, вам нужно будет определить, связано ли это с плохой памятью в компьютере или каким-то другим фактором. Однако это выходит за рамки настоящего документа.

Удаление двоичных данных из формы

Иногда аварии происходят постоянно в одной форме или отчете или происходят только при печати. Возможно, что двоичные данные в форме / отчете стали поврежденными.

Сохранить объект Form / Report в виде текста Есть две недокументированные функции. Application.SaveAsText и Application.LoadFromText. Эти функции можно использовать для экспорта определений формы / отчета, очистки определения и последующего импорта.

  1. Сделайте резервную копию своей базы данных перед продолжением
  2. Перейдите в окно VBA Immediate (Control + G)
  3. Введите Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" (замените MyForm именем формы / отчета. Используйте acReport, если это поврежденный отчет, который вы исправляете)
  4. Переименуйте исходный элемент формы (например, переименуйте в MyForm.Bak) в окне базы данных

Очистка файла формы / отчета

  1. Откройте экспортированный файл (например, MyForm.txt) в блокноте

  2. Удалите строку «Контрольная сумма =» (должна быть в строке 3)

  3. Очистить двоичные данные

    1. Определите бинарные блоки данных. Просмотрите файл, и вы увидите строки, начинающиеся с «Parameter = Begin». После этих строк вы будете иметь строки закодированных двоичных данных. Наконец, двоичный блок заканчивается строкой, состоящей только из «Конец». Блок Binary Data включает в себя первую строку (с инструкцией Begin) и все строки до последней строки (включая конечную инструкцию).

      Примечание. Все эти блоки должны отображаться до определения форм управления

    2. Удалите бинарные блоки данных для следующих параметров:

      • NameMap
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. Ищите другие проблемы. Пока вы открываете файл, прокрутите остальную часть файла и найдите все, что бросается в глаза, особенно в коде модуля VBA внизу. Вы будете искать все, что торчит из остального, и может быть коррупцией.

  5. Сохраните файл.

Загрузите форму / отчет обратно в Access и Test

  1. Загрузите форму обратно в Access.
    • В Access перейдите в непосредственное окно (Control + G)
    • Тип Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • Декомпиляция / компактный ремонт / перекомпиляция (см. Другой пример в документации)
    • Откройте форму / отчет для тестирования. Надеюсь, теперь все работает.
    • Удалите старую коррумпированную форму (например, MyForm.bak)

Предотвратить эту коррупцию в будущем

Наиболее распространенной причиной коррумпированных двоичных данных в отчете / форме является то, что несколько компьютеров / пользователей используют один и тот же файл клиента базы данных вместо своей собственной отдельной копии. Вот почему каждый пользователь должен иметь свой собственный файл клиента на своем рабочем столе, который они запускают.

Удалите поля «OLE Object»

Если у вас есть изображения или другие данные, хранящиеся в самом доступе как объекты OLE, то вы должны найти лучший подход. Когда данные OLE хранятся, они сохраняются в соответствии с программным обеспечением (и версией программного обеспечения) на компьютере, где он хранится. Когда другой компьютер переходит к отображению данных OLE Object в форме, но не содержит точного программного обеспечения / версии, это часто приводит к сбою приложения.

Если вы храните данные изображения, то лучше всего сохранить имя файла и вместо этого сохранить изображения в стандартном местоположении. Более новые версии доступа имеют встроенные средства управления, чтобы сделать это возможным.

Восстановить всю базу данных

Это большая работа, поэтому сделайте это в крайнем случае после исчерпания всех других вариантов. Это нужно делать только в том случае, если проблема возникает для разных пользователей на разных компьютерах. Если это не происходит для всех пользователей, то, скорее всего, это не коррумпированный контейнер базы данных.

Подобно шагам по удалению двоичных данных, вы собираетесь с нуля восстанавливать свою базу данных. Этот процесс немного ритуалистичен, но если сделать тщательно с осторожностью, чтобы не «сохранить» любую возможную коррупцию, то этот процесс очень эффективен.

Создайте новый контейнер базы данных доступа.

  • В Access на вкладке «Файл» вы можете выбрать «Создать». Создайте новую, пустую базу данных в формате ACCDB.

Переместить все объекты в новый контейнер

Не используйте функции импорта / экспорта в Access для перемещения объектов, а не просто нажать и перетащить. Это может скопировать поврежденные элементы в новый контейнер.

Таблицы:

  • Для каждой таблицы в старом контейнере доступа создайте новую таблицу в новом контейнере.
  • С точки зрения дизайна скопируйте / вставьте определения полей.
  • Проверьте свойства таблицы, чтобы убедиться, что они совпадают в обеих базах данных
  • Переместите все макросы данных (см. Раздел «Макросы», как это сделать)
  • Чтобы переместить данные, экспортируйте старые данные в XML или CSV, а затем импортируйте их из этого формата.

Запросы:

  • Загрузите каждый запрос в представление SQL.
  • Скопируйте / Вставьте текст SQL.
  • Вставьте в новую базу данных.
  • Сравните свойства запроса, чтобы убедиться, что они совпадают.

Формы / отчеты:

  • Для каждой формы / отчета используйте функцию Application.SaveAsText для экспорта форм / отчетов в текстовый файл.
  • Удалите двоичные данные (см. « Удаление двоичных данных из документации по форме», чтобы ознакомиться с этим процессом)
  • Используйте функцию Application.LoadFromText для повторной передачи объектов в новую базу данных

макрос

У вас есть три способа перемещения макросов.

  1. Воссоздайте каждый макрос вручную в новом контейнере базы данных.
  2. Используйте метод Application.SaveAsText / Application.LoadFromText с параметром acMacro .
  3. Копировать / Вставить Определения макросов для каждого макроса
    • Выберите All (Control + A), чтобы выбрать все макроэлементы. Затем скопируйте (Control + C).
    • Откройте пустой документ «Блокнот» и «Вставить» (Control + V) «Макро XML».
    • Создайте новый пустой макрос в новом контейнере базы данных.
    • В блокноте, выберите весь текст (Control + A). Затем Копировать (Control + C)
    • В пустом макросе Paste (Control + V). Должен появиться макрос. Сохрани это.

Модули

  • Для каждого модуля выберите весь код (Control + A) и вставьте (Control + V) в новый контейнер базы данных.
  • Обязательно проверьте свойства базы данных (в окне VBA, перейдите в Инструменты -> Свойства клиента)

Макросы данных

Для каждого Маска данных используйте методы SaveAsText / LoadFromText.

  1. Войдите в окно VBA Immediate (Control + G)
  2. Тип Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" (Замените MyTableName именем таблицы, содержащей макросы данных)
  3. Просмотрите файл о любых признаках коррупции
  4. В новом контейнере базы данных загрузите определение с помощью Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"

Как уже упоминалось ранее, это много работы, но у него есть результаты. Этот метод также следует использовать при перенастройке базы данных Access 97 в 2000 или в базу данных Access 2000 до 2003 года.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow