Если бы ваши данные хранились в бэкэнде Jet / ACE, я бы сказал, что у вас, вероятно, есть поврежденный указатель памятки. Поскольку ваши данные находятся в SQL Server и доступны через ODBC, это не может быть ответом. Но поскольку к этой дискуссии могут прийти другие, которые сталкиваются с проблемой с серверной частью Jet / ACE, может быть полезно следующее:
В таблицах Jet / ACE данные заметок не сохраняются в линию вместе с другими полями. Вместо этого данные хранятся на отдельных страницах данных в другом месте, и все, что хранится в строке, - это указатель на первую страницу внешних данных. Этот указатель подвержен повреждению и является частой причиной потери данных.
Некоторые ссылки от Tony Toews (лучший источник для этого):
Общий справочный источник о повреждении Jet / ACE
Симптомы коррупции
Во второй части найдите 3197, который, вероятно, является номером ошибки проблемы, с которой вы столкнулись. Там есть ссылка, объясняющая, как ее устранить.
После того, как вы исправили это, вам следует подумать о реструктуризации таблиц данных, чтобы минимизировать риск повреждения мемо-полей.
Я знаю, что вы не используете Access, но для форм Access одно из решений состоит в том, чтобы избегать связанных полей напоминаний и вместо этого редактировать их в несвязанных текстовых полях. В событии OnCurrent формы Access необходимо скопировать данные заметки из коллекции полей формы в несвязанное текстовое поле для нее, а в событии AfterUpdate текстового поля сохранить ее обратно в базовый набор записей формы.
для всех приложений, Доступ или нет, помещение заметок в отдельную таблицу отделяет указатель поля заметки от остальной части данных. Если у вас есть одна заметка, это может быть таблица 1: 1, а если у вас несколько заметок, у вас будет 1: N, а в таблице заметок должно быть поле для указания типа заметки. С этой структурой, основная запись не должна быть удалена и воссоздана, чтобы исправить поврежденный указатель - все, что вам нужно сделать, это удалить поврежденную запись в таблице memo.