#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.