Ms-Access MDB: разделить поле Memo на несколько текстовых полей. (Для предотвращения повреждения данных) - PullRequest
3 голосов
/ 06 мая 2009

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

Я узнал, что памятные поля могут быть причиной повреждения базы данных, поскольку они хранятся на отдельной странице данных; запись содержит только указатель на страницу данных, где хранятся фактические данные.

В большинстве случаев мне просто нужно от 100 до 1000 символов или около того, поэтому у меня возникла идея ...
Моя «блестящая» (или нет) идея состояла в том, чтобы разделить заметку на 4 или 5 текстовых полей (они могут содержать по 255 символов).

Кто-нибудь делал это раньше?
Есть известные проблемы?
Будет ли такой подход менее подвержен повреждению данных?

Спасибо
Зубец

приписка
1. У меня были проблемы с коррупцией.
2. Я знаю, что лучше всего было бы перейти на другой сервер, но это невозможно.

Ответы [ 2 ]

6 голосов
/ 06 мая 2009

Лучшее решение заключается в том, чтобы отделить страницу данных памятки от прикрепленной записи. Способ сделать это - поместить памятные поля в отдельную таблицу. Вы можете сделать это либо с таблицей 1: 1 (с несколькими записками в боковой таблице), либо, лучше, с таблицей 1: N с полем типа заметки. Последний способ - единственный способ полностью избежать проблемы указателя памятки, хотя, как и в предыдущем решении, повреждение любого указателя памятки в таблице памятки приводит к потере их всех.

Кроме того, вы должны учитывать , почему ваша база данных искажает мемо-указатели. Помимо приведенного выше предложения, вам, вероятно, следует рассмотреть возможность редактирования своих заметок без привязки, хотя, поскольку кажется, что вы не используете внешний интерфейс Access для своей Jet MDB, это, вероятно, не проблема. Время от времени я вижу порчу памятки, но не очень часто. Если вы часто это видите, это говорит мне о том, что ваше приложение плохо спроектировано или ваша операционная среда явно не соответствует стандартам.

2 голосов
/ 06 мая 2009

Звучит так, как будто вы хотите взять существующее мемо-поле и вырезать его перед тем, как поместить его в базу данных, а затем склеить обратно, когда вам нужно отобразить его.

Я думаю, вы попадете в мир боли, если попробуете это. Я бы старался поменять бэкэнд, если бы это был твой единственный вариант :)

Я буду опираться на ответ DWF, предлагая сделать что-то, как вы предлагали. Создайте таблицу 1: N (я буду называть ее UserNotes) с текстовым полем (в сравнении с заметками, с которыми у вас, похоже, возникают проблемы).

Затем создайте подчиненную форму с UserNotes в качестве источника записи и замените поле memo на подчиненную форму UserNotes. Это позволяет пользователю решать, где разрывы строк / абзацев находятся в контексте текстового поля из 255 символов. (для конвертации вам все равно придется вырезать заметки, но это всего лишь одноразовая операция)

...