Это старая тема, но она показалась одним из лучших результатов в Google, поэтому я подумал, что дам ответ. Какие шаги вы можете предпринять, когда получите «Доступ столкнулся с проблемой и нужно закрыть». Обычно в журнале событий вы увидите:
Faulting application name: MSACCESS.EXE, version: 15.0.4869.1000, time stamp: 0x57e12b41
Faulting module name: MSACCESS.EXE, version: 15.0.4869.1000, time stamp: 0x57e12b41
Exception code: 0xc0000005
Это может быть неприятно для устранения неполадок. Ниже приведен список действий, которые я принимаю, от наименее инвазивных до самых инвазивных. Я не просто изобретаю эти исправления - за те годы, которые я лично видел, каждое исправление решает проблему.
Decompile Database
Вы указали, что политика декомпилировать каждый выпуск. Хорошая политика - но делайте это явно после КАЖДОГО времени, когда вы получите сообщение об ошибке. Причина в том, что вы можете устранить основную проблему, но не замечаете из-за поврежденного контейнера.
- Я создаю ярлык, который загружает базу данных с помощью переключателя «/ decompile».
- удерживайте нажатой клавишу shift при двойном нажатии на этот ярлык, чтобы любые автопрограммы пропускались, и вы переходите прямо в навигационное окно.
- После загрузки базы данных вам нужно будет нажать кнопку «Компакт» и «Восстановить». При перезагрузке базы данных снова удерживайте нажатой клавишу.
- Теперь перейдите и скомпилируйте код и сохраните. Это процесс, который я использую для декомпилирования.
Тест памяти компьютера
Особенно, если аварии не ограничивается одной или двумя машинами - это сделать.
Проверьте средства просмотра событий. Есть ли еще несколько сообщений «Ошибка», описывающих сбой приложения, а модуль сбоев отличается? Если это так, то хорошо, что если это не коррумпированные окна, вы смотрите на проблему с памятью.
Я уверен, что есть много замечательных тестеров памяти, но я рекомендую вам использовать надлежащий тест, который поймает сброшенные бит. MemTest86 - это старое, но приятное. Существует current version и некоторые одинаково хорошие forks.
Запустите тест и дайте ему работать в рабочее время. У меня была плохая власть в здании, причиной ошибок памяти, поэтому сохраняйте переменные одинаковыми.
Удалить двоичные данные из формы
Иногда аварии происходят в одной форме или отчете. Если это поврежденные двоичные данные, то сбои должны происходить на разных компьютерах с разными пользователями. Если это так, выполните следующие шаги. (Только для продвинутых пользователей)
В ближайшем окне сохранить объект как текст.
Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\ MyForm.txt"
Переименовать элемент оригинальной формы (например, переименовать MyForm_Bak)
- Откройте экспортированный файл в блокноте
- Удалить строку "Checksum =" (должно быть в строке 3)
- Очистить двоичные данные
- аблюдая файл.
- Будут линии, начинающиеся с «Параметр = Начало» и имеющие строки закодированных двоичных данных, заканчивающиеся линией, состоящей из «Конец»
- Когда вы найдете одну из этих строк, вам необходимо (включительно) удалите все строки с начала до конца.
- Параметры вы должны удалить являются: NameMap, PrtMip, PrtDevMode, PrtDevNames, PrtDevModeW, PrtDevNamesW
- Все эти блоки должны отображаться перед определениями контроля формы
- В то время как у вас есть файл открыт, прокрутите остальную часть файла и искать все, что бросается в глаза, особенно в коде модуля VBA внизу.
- Сохраните файл
В Access, на немедленном окне, загрузите форму обратно в
Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\ MyForm.txt"
Декомпилировать/Компактный ремонт/перекомпиляция
- Открыть форму и, надеюсь, все будет работать лучше.
Избавиться от «OLE Object» полей
Если у вас есть изображения или другие данные, хранящиеся в самом Access, то вы должны найти лучший подход. Когда данные OLE хранятся, они хранятся в соответствии с программным обеспечением (и версией программного обеспечения) на компьютере, который его хранит. Когда другой компьютер переходит к отображению данных OLE Object в форме, но не имеет точного программного обеспечения/версии, установленной - вы нередко заканчиваете сбой.
Если вы храните данные изображения, то лучше всего сохранить имя файла и вместо этого сохранить изображения в стандартном местоположении. Более новые версии доступа имеют встроенные средства управления, чтобы сделать это возможным.
Перестроить всю базу данных
Это много работы, так что я бы сохранить это, когда вы исчерпали все другие варианты. Это нужно сделать только в том случае, если проблема возникает для всех пользователей. Если это не происходит для всех пользователей, то это не коррумпированная база данных.
Как и в случае удаления двоичных данных, вы собираетесь восстановить базу данных с нуля. К тому времени, как я достиг этого шага, я нахожусь в полностью параноидальном режиме. Возможно, это немного ритуально, но я делаю все тщательно, без каких-либо коротких сокращений и большой осторожности, чтобы не «сохранять» коррупцию прямым копированием или импортом/экспортом. Как моя последняя позиция, я не думаю, что это никогда не решило проблему. К счастью, мне не приходилось делать это со времен Access 2000.
- Создайте новый контейнер базы данных доступа.
- Не используйте функции импорта/экспорта
- Таблицы:
- Для каждой таблицы в старом контейнере доступа, создать новую таблицу в новый контейнер. С точки зрения дизайна скопируйте/вставьте определения полей.
- Экспортируйте старые данные в XML или CSV, а затем импортируйте их.
- запросов:
- Перейти в поле зрения SQL в исходном запросе, копировать и вставлять текст SQL в запросе новой базы данных.
- Формы/Отчеты:
- использовать приложение.SaveAsText функция экспортировать формы/отчеты
- Газа двоичные данные из форм и обзор
- Используйте функцию Application.LoadFromText реимпортировать их
- Макросы
- Реконструировать макрокоманд.
- В Access 2007 и новее с новой системой Macro вы можете просто открыть макрос, Выбрать все (Control + A) и вставить в пустой документ «Блокнот». Копирование снова из блокнота и вставить в пустой макрос в новый контейнер доступа
- Модули
- Выберите весь код (Ctrl + A) и вставить (Ctrl + V) в новый контейнер базы данных
макросы
- данных
- Я не должен был сделать это, так как макросы данных вышли, но вы должны использовать функции SaveAsText/LoadFromText экспортировать макросы данных от таблиц.
Когда все сказано и сделано - вы должны иметь очень чистый контейнер базы данных.
удалить другие переменные из теста
Сеть Коррупция
Не загружайте клиента от сети. Поместите его на локальный диск и запустите его оттуда.
Корпоративный Строит
Если вы находитесь в корпоративной среде, которая использует «компьютер строит» и не имели никакого успеха с Декомпиляция, тестирования памяти, и вскрышных двоичных данных - то отказываются от дальнейших испытаний, пока не найдете ИТ-команда может предоставить пользователю тестовую машину, на которой установлены только Windows, Office и Service Pack. Обычно я предпочитаю делать установку самостоятельно, поэтому я знаю, что могу доверять ей. Все программное обеспечение и обновления должны быть установлены вручную без использования автоматической установки. Не устанавливайте антивирус на этом компьютере.
У меня были отделы ИТ, отказывающиеся от этого из чистого F.U.D. и необоснованность - если это то, с чем вы столкнулись, тогда вымойте руки в этом вопросе в контексте «Помогите мне помочь вам».
Bad Мощность
Как уже упоминалось в разделе памяти - мощность fluctations может вызвать ошибки компьютера. Если база данных находится в промышленном здании, а затем попробуйте получить питание от кондиционера или ИБП, который обеспечивает чистую мощность (от батареи, а не от основного, проходящего через металлооксидный варистор)
Также проверьте кабель питания, который подключается к шине питания или розетке. Убедитесь, что характеристики манометра и напряжения достаточны. Я говорю это, потому что ИТ-отделы часто оставляют силовые кабели, подключенные к станции, и просто удаляют машину.После многих лет они используют более мощные источники питания, но не отключили кабель. Это имеет значение. Если вы сомневаетесь, принесите новый, более толстый кабель.
Мы используем ловушку ошибок очень похоже на это - некоторые ошибки, похоже, происходят за пределами нашего кода и в коде Microsoft, поэтому он пропускает нашу обработку ошибок. Я пытаюсь определить эффективный способ решения сбоев, которые происходят за пределами нашего кода (они все равно могут быть вызваны нашим кодом, но наши полностью завершены и _then_ происходит сбой) –
Скомпилирован ли ваш код? Вы пытались декомпилировать его с помощью ключа -decompile, а затем перекомпилировать его? –
мы сделали это. Наша политика заключается в декомпилировании и повторной компиляции при каждом выпуске. Тревога, которую я проиллюстрировал выше, типична - некоторый случай, когда мы переходим к следующей записи, в то время как Access пытается перейти на следующую запись, разбил всю программу. Мы только вычислили это путем исключения, и ни один номер ошибки не был задан иначе, чем ошибка уровня окна, которую я вставлял в свой первый комментарий. –