Как установить правило проверки для поля в Access с помощью SQL-запроса? - PullRequest
0 голосов
/ 17 мая 2018

Я использую MS Access 2016 (Office 365) и в настоящее время сталкиваюсь с проблемой. Ниже приведен пример, демонстрирующий эту проблему.

Здесь я создал таблицу с именем NodeFamilyLink , которая состоит из двух полей: NodeID и FamilyID, как показано ниже.

NodeFamilyLinkTable

Теперь NodeID получают из другой таблицы NodeData, которая состоит из 3 полей: NodeID, NodeName и ParentID. В этой таблице все узлы изначально определены, как показано на рисунке ниже.

NodeDataTable

Теперь, что мне нужно, при вводе числа в столбце NodeID таблицы NodeFamilyLink, если я введу значение NodeID, которое не включено в столбец ParentID таблицы NodeData, то это значение NodeID будет рассматриваться как допустимое и остальные значения будут считаться недействительными. Итак, я хочу применить правило проверки к полю NodeID таблицы NodeFamilyLink, используя запрос. Но проблема в том, что я не нашел опции для установки правила проверки с использованием запроса в ACCESS (как показано на рисунке ниже).

ExpressionBuilder

Хотя я могу легко добиться того же, программируя с помощью API-интерфейса OLE-DB (в VB.NET), но я хочу знать, есть ли какой-либо метод, с помощью которого я могу выполнить свою задачу без написания кода для Это. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы, вероятно, ищете ограничение CHECK:

ALTER TABLE NodeFamilyLink
ADD CONSTRAINT myConstraintName
CHECK (
   NOT EXISTS( SELECT 1 FROM NodeFamilyLink INNER JOIN NodeData ON NodeData.ParentID = NodeFamilyLink.NodeID)
)

Обратите внимание, что они могут быть добавлены только через ADO (с помощью CurrentProject.Connection.Execute) или когда база данных использует синтаксис, совместимый с ANSI-92.

0 голосов
/ 17 мая 2018

Я думаю, что вы, возможно, ищете функцию DLookup() ... Это позволяет вам выполнять поиск типов запросов в другой таблице без написания кода. Как мне использовать DLookup в правиле проверки текстового поля в форме в доступе

Но важное отличие здесь заключается в том, что функция DLookup() доступна только при проверкеконтекст на уровне форма , а не на уровне таблица уровень.

Not available at table level

Available at form level

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

...