Программно проверить наличие повреждений базы данных Access?

Есть ли способ программно проверить повреждение объекта базы данных в Access 2003?

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

В основном академические размышления, так как я просто не хочу заходить так далеко, а затем порча отбросила меня на несколько недель назад, потому что какой-то редко используемый объект когда-то был испорчен.

Есть идеи? Заранее спасибо за любые указатели!

РЕДАКТИРОВАНО 03.12.2009 в 11:51

К сожалению, я могу принять только один ответ - хотя у меня есть несколько очень хороших, спасибо за все подсказки!


person Comrad_Durandal    schedule 25.11.2009    source источник


Ответы (3)


Ни Compact/Repair, ни Decompile/Recompile не устраняют все проблемы с повреждением, хотя вы все равно должны это делать.

Я использую функцию для экспорта всех Container Docs (и QueryDefs) с помощью SaveAsText в папку с отметкой даты/времени и регулярно использую ее в течение дня. Если я подозреваю какое-либо повреждение, я создаю новый mdb и использую LoadFromText для воссоздания объектов.

person maxhugen    schedule 28.11.2009
comment
В частности, какие проблемы с повреждением могут быть пропущены при цикле декомпиляции/повторной компиляции? Единственный раз, когда я когда-либо видел, что декомпиляция не смогла исправить повреждение, это когда пользователь сделал это неправильно (например, запустив код после декомпиляции, но перед компактом, который отбросил бы старые страницы данных скомпилированного кода). - person David-W-Fenton; 29.11.2009
comment
Теперь это звучит так, как будто это может мне помочь, у вас случайно нет копии кода функции для иллюстрации? Текстовые документы занимают меньше места, чем целые копии MDB-файла за каждый день работы над ним — айтишники уже немного нервничают из-за места в сети, а я не хочу получать свой «любимый проект» законсервирован за то, что компании не хватило места. - person Comrad_Durandal; 30.11.2009
comment
Если вы выполните поиск на этом веб-сайте в SaveAsText, вы получите множество обсуждений этого, и я уверен, что там есть код для этого. Что бы это ни стоило, я никогда не использовал его, за исключением случайного поврежденного объекта (может быть, 10 раз за 13 лет или около того, что я программировал в Access). Файлы довольно маленькие, на самом деле, намного меньше, чем Access MDB/ACCDB, из которых они созданы. - person David-W-Fenton; 01.12.2009

Вы можете посмотреть: возможно ли для программного обнаружения поврежденных таблиц базы данных Access 2007?

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

person Fionnuala    schedule 25.11.2009
comment
Эта публикация касается только коррупции на уровне таблицы. - person Tony Toews; 26.11.2009
comment
нет, не только. Это также относится к повреждению формы и/или модуля. - person Philippe Grondier; 27.11.2009

Правильные методы компиляции предотвратят повреждение проекта VBA (о чем вы здесь говорите).

Это влечет за собой:

  1. используйте OPTION EXPLICIT во всех модулях.

  2. отключите КОМПИЛЯЦИЮ ПО ЗАПРОСУ в параметрах VBE.

  3. регулярно компилируйте свой код во время работы.

  4. периодически (например, раз в день после полного дня написания кода) декомпилировать и перекомпилировать код.

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

person David-W-Fenton    schedule 26.11.2009
comment
Я действительно стараюсь следовать этому полку, хотя я думаю, что я спрашивал, есть ли способ поиска и обнаружения повреждений в формах, запросах или других нетабличных объектах. У меня было сжатие/восстановление, полностью уничтожавшее базу данных, поэтому у меня есть иррациональные опасения по поводу ее использования. Тем не менее, спасибо за подсказки - каждая мелочь помогает! - person Comrad_Durandal; 30.11.2009
comment
Ну, есть две отдельные проблемы: повреждение данных и повреждение кода. Compact/Repair имеет мало общего с последним, и я думал, что вопрос был именно об этом. Если ваши таблицы повреждены, это серьезная проблема, вызванная чем-то внешним по отношению к Access/Jet/ACE, поэтому вам следует попытаться отследить причину и устранить ее. Но вы никогда не должны сжимать/восстанавливать или декомпилировать без предварительного резервного копирования. - person David-W-Fenton; 01.12.2009