Вопрос

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

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

Есть ли повреждение в базе данных?Как я могу удалить эту запись навсегда?

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

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

Это было полезно?

Решение

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

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

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

Другие советы

У Тони Тьюза, MVP Access, есть исчерпывающее руководство по коррупции:

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

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

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

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

//энди

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

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

  Me!txtMyMemo = Me!MyMemo

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top