Как исправить возможные повреждения БД?

Я нахожусь на клиенте, делающем некоторые быстрые исправления к их приложению доступа. Это было какое-то время у меня был доступ с доступом, но я быстро поправляюсь. Однако я обнаружил интересную проблему:

Для некоторых отчетов я получаю сообщение об ошибке "Запись удалена". Я проверил отчеты, и кажется, что есть проблема с одной таблицей. Открывая эту таблицу, я нахожу запись, в которой все столбцы помечены как "#deleted". Очевидно, что этот ряд кажется виновником. Однако, когда я пытаюсь удалить эту строку, на самом деле ничего не происходит. Если я снова открою таблицу, строка все еще существует.

Есть ли коррупция в БД? Как я могу удалить эту запись навсегда?

Редактировать: это MS2000-версия

Решение: просто сжать / починить не получилось. Вместо этого я преобразовал базу данных в формат файла 2003, что и помогло. Я отметил первый ответ, предлагающий сжатие / восстановление, так как он указал мне правильное направление. Спасибо!

5 ответов

Решение

Вы пробовали встроенный в Access компакт / инструмент для ремонта? Это должно сбросить удаленные записи из базы данных.

Точное местоположение зависит от используемой версии Access, но в Access 2003 оно находится в разделе "Инструменты"> "Утилиты базы данных"> "Сжать и восстановить базу данных". В некоторых более ранних версиях Access было два отдельных инструмента - один для компактных, другой для ремонта, но доступ к ним осуществлялся из аналогичного места. Если они отличаются в зависимости от версии клиента, вам нужно запустить оба.

Это должна быть неразрушающая операция, но было бы лучше проверить это на копии файла MDB (извиняюсь за утверждение очевидного).

Tony Toews, Access MVP, предлагает исчерпывающее руководство по борьбе с коррупцией:

Часто задаваемые вопросы о поврежденных базах данных Microsoft Access

  • Некоторые симптомы коррупции
  • Определение рабочей станции, которая вызвала коррупцию
  • Причины коррупции
  • Чтобы получить ваши данные

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

Вы также можете попробовать эту утилиту командной строки

//Энди

Сжатие и импорт не решат проблему для сообщенной ошибки, которая явно является поврежденным указателем для мемо-поля. Единственное, что вы можете сделать, это удалить и воссоздать запись, которая вызывает проблему. И вам нужно найти способы редактирования данных заметок (или исключить поля заметок - вам действительно нужно больше 255 символов или нет?), Которые не подвергают вас риску повреждения. Это означает, что нужно избегать связанных элементов управления в формах для полей заметок.

Вместо этого используйте несвязанное текстовое поле и в событии OnCurrent формы назначьте текущие данные из базового источника записей формы:

  Me!txtMyMemo = Me!MyMemo

Чтобы сохранить изменения в несвязанном элементе управления, используйте событие AfterUpdate элемента управления:

  Me!MyMemo = Me!txtMyMemo
  Me.Dirty = False        ' save the whole record

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

Указатель относительно легко повреждается, чаще всего из-за фатальной проблемы при редактировании в связанном элементе управления. Редактирование с несвязанным элементом управления не устраняет проблему полностью, но означает, что время, в течение которого вы подвергаетесь опасности, очень и очень мало (т. Е. Время, необходимое для выполнения этих двух строк кода в событии AfterUpdate),

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

Другие вопросы по тегам