sql - sql和access中的验证规则

标签 sql ms-access

我正在尝试创建验证规则,但在 Access 中使用 SQL。我对此很陌生。我知道如何在常规 Access 设计 View 中执行此操作,但不知道如何在使用创建表命令时执行此操作。到目前为止,我有,

CREATE TABLE CUSTOMERS
(
    CustomerName TEXT (20),
    Gender TEXT (10),
    FavoriteFood TEXT (20)
);

想为男性/女性/未知的性别添加验证规则。

最佳答案

字段的验证规则是 DAO.TableDef 属性,无法使用 Access SQL 创建。

如果您想将 Access SQL 用于类似的事情,请使用 CHECK CONSTRAINT。此语句会将 Gender 值限制为男性、女性或未知。

CREATE TABLE CUSTOMERS
(
    CustomerName TEXT (20),
    Gender TEXT (10) NOT NULL,
    FavoriteFood TEXT (20),
    CONSTRAINT allowed_genders CHECK
        (
            Gender IN ('male','female','unknown')
        )
);

注意 CHECK CONSTRAINT 只能在从 ADO 执行时用在 Access SQL 中。我使用 CurrentProject.Connection.Execute 执行了该语句,这是一个 ADO 方法。

这种方法的一些后果可能会让你无法接受......

  1. 约束在表设计 View 中不可见。
  2. 当违反约束条件时,错误消息不会出现,直到您尝试保存记录。
  3. 并且错误消息基于约束名称...在这种情况下这对用户来说不是很友好。
  4. 由于限制,您无法从 Access UI 中删除该表;您必须先执行 DROP CONSTRAINT allowed_genders 然后删除表,或者执行 DROP TABLE CUSTOMERS 这将同时丢弃表和约束。

您可能更愿意创建一个更简单的表版本,然后使用 DAO 设置验证规则。

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
Set tdf = db.TableDefs("CUSTOMERS")
tdf.Fields("Gender").ValidationRule = "IN ('male','female','unknown')"
tdf.Fields("Gender").ValidationText = "Gender must be male, female, or unknown"

注意事项:

  1. DAO 方法还允许您包含用户友好的验证文本消息。
  2. 如果违反验证规则,Access 将在您尝试移至下一个字段时立即显示错误消息。

最后,另一种方法是创建一个查找表,其中包含您允许的 Gender 值,使 CUSTOMERS.Gender 成为该查找字段的外键,并强制执行引用诚信。

这 3 种方法中的任何一种都可能适合您的情况;选择最适合的那个。 :-)

关于sql - sql和access中的验证规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467737/

相关文章:

sql - 如何获取关系数据库中2个随机表之间的关系

mysql - 创建表时 VARCHAR(MAX) 语法不正确

ms-access - VBA中变量的空值

java - ucanaccess_net.ucanaccess.jdbc.DBReference@ac6b76 文件夹

ms-access - 带过滤器 VBA 的开放获取表单

sql - 如果所有列均未使用,我的索引还会使用吗?

mysql - SQL - 对多列的所有时间、30 天和 90 天的数据进行汇总

mysql - SQL错误[1054] [42s22] : unknown column 'orderdetails.productCode in ' on clause'

database - ms Access 表单 : combobox to multiselect dropdown menu

ms-access - Access - 从表单中的图像控件导出图像