Тип данных препятствует созданию отношений в Access

#database #vba #validation #ms-access #relational-database

#База данных #vba #проверка #ms-access #реляционная база данных

Вопрос:

Итак, у меня есть таблица с именем «Client», где идентификатор клиента является первичным ключом, а тип данных — автономером, но я отформатировал ее как C00, поэтому вместо «001» или «002» запись отображается как «C001» или «C002».

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

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

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

Спасибо, ребята!

Комментарии:

1. вам необходимо отделить функцию автоматического нумерации от цели отображения. Вам нужно числовое (длинное целое число) поле для целей ссылочной целостности, но когда вы отображаете идентификатор в отчете (prettyID), вы можете добавить свой префикс. Не храните свой идентификатор красиво, просто отобразите его красиво.

2. Меня беспокоит только то, что это будет использоваться нашей командой ввода данных, поэтому небольшое усмотрение во внешнем виде и серверной части может вызвать проблемы. От меня явно потребовали, чтобы я включил префикс «c» или любую другую букву, обозначающую содержимое таблицы. Я изменил все свои поля внешнего ключа на тип данных Number, и пока это работает, но я не уверен, что это оптимальное решение.

3. нет, если вы используете свойство столбца для «красивого» вывода, у вас все должно быть хорошо, но базовый тип данных является числовым по всем направлениям. Доступ в основном упрощает его для вас.

4. да, это оптимальное решение. оставьте его как автономер и измените другие поля таблицы как число. все должно быть хорошо!

5. Создайте новую таблицу NextClientId с одним столбцом ClientID и ограничением, чтобы гарантировать, что в этой таблице никогда не может быть более одной строки. Вставьте эту одну строку, используя значение следующего неиспользуемого ClientID в последовательности, например C0003 . Теперь вам нужен некоторый процедурный код, который 1) блокирует строку / таблицу, 2) преобразует сохраненное ClientID значение ( C0003 ) в переменную, 3) увеличивает сохраненное ClientID значение ( C0004 ), 4) разблокирует строку / таблицу,5) возвращает захваченное значение ( C0003 ). Вы не можете сделать это в хранимой процедуре Access SQL, но, может быть, в одном из этих новых триггерных макросов?