sql和access中的验证规则

时间:2014-03-17 23:49:24

标签: sql ms-access

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

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

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

1 个答案:

答案 0 :(得分:3)

字段的验证规则是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')
        )
);

注意{A}只能在从ADO执行时在Access SQL中使用。我用CHECK CONSTRAINT执行了该语句,这是一种ADO方法。

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

  1. 约束在表设计视图中不可见。
  2. 违反约束时,在您尝试保存记录之前不会显示错误消息。
  3. 错误消息基于约束名称...在这种情况下不是非常用户友好。
  4. 由于存在约束,您无法从Access UI中删除该表;您必须首先执行CurrentProject.Connection.Execute然后删除该表,或执行DROP CONSTRAINT allowed_genders,这将同时丢弃表和约束。
  5. 您可能更喜欢创建表格的更简单版本,然后使用DAO设置验证规则。

    DROP TABLE CUSTOMERS

    注意:

    1. DAO方法还允许您包含用户友好的验证文本消息。
    2. 违反验证规则后,只要您尝试移至下一个字段,Access就会显示错误消息。
    3. 最后,另一种方法是创建一个包含允许的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" 值的查找表,使Gender成为该查找字段的外键,并强制引用完整性。

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