Ограничение проверки SQL для полей VARCHAR и MEMO

#sql #ms-access #odbc #oledb

Вопрос:

Использование MS Access с ODBC или OleDB (и C#). MS Access Версия старая, вероятно, доступ 97.

Я попытался использовать следующие синтаксисы, чтобы убедиться, что поле «Описание» не может быть нулевой длины:

  • СОЗДАТЬ ТАБЛИЦУ TestTable ([Описание] Проверка заметок ( LEN(Описание) gt; 0 ));
  • СОЗДАЙТЕ ТАБЛИЦУ TestTable ([Описание], Проверьте имя ограничения ( LEN(Описание) gt; 0 ));
  • СОЗДАЙТЕ ТАБЛИЦУ TestTable ([Описание] ПРОВЕРКА заметок ( ДЛИНА ДАННЫХ(Описание) gt; 0 ));
  • СОЗДАЙТЕ ТАБЛИЦУ TestTable ([Описание], ПРОВЕРЬТЕ имя ограничения ( ДЛИНА ДАННЫХ(Описание) gt; 0 ));

Каждый из Syntax error in field definition них создает исключение.

Каков правильный синтаксис для проверки длины VARCHAR MEMO полей или?

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

1. Я подозреваю, что ограничения проверки не поддерживаются в базах данных Access ’97 (Jet 3.5). Многие функции DDL доступа не были добавлены до Jet 4.0. Я предполагаю, что ограничения проверки являются одной из таких функций.

2. Можете ли вы преобразовать свою базу данных или импортировать ее данные в более новый формат базы данных Access? С помощью базы данных ACCDB в Access 2010 я создал таблицу, а затем добавил ограничение с помощью ALTER TABLE : CurrentProject.Connection.Execute "ALTER TABLE TestTable ADD CONSTRAINT ConstraintName CHECK (LEN([Description]) gt; 0);"

3. Спасибо @HansUp. Обновление формата в настоящее время не является вариантом, поскольку компания имеет большую базу установок, все еще использующую очень старый формат (неизвестный клиентам!). В настоящее время код использует DAO для проверки использования строк нулевой длины DAO.TableDef(fieldName).AllowZeroLength = True . Они пытаются перейти на ODBC или OleDB. Также пробовали использовать ALTER TABLE для добавления ограничения, но это тоже создает исключение. Похоже, вы правы, что этот древний MS Access не поддерживает современные CHECK ограничения. Обратите внимание, что я использую двигатель Jet 4.0.