【问题标题】:Validation rule in sql and accesssql和访问中的验证规则
【发布时间】:2014-03-17 23:49:24
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为验证规则不是 MS Jet 的一部分

标签: sql ms-access


【解决方案1】:

字段的验证规则是 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. 约束在表设计视图中不可见。
  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 种方法中的任何一种都可能适合您的情况;选择最适合的。 :-)

【讨论】:

  • 约束名称不能是带括号的多词短语吗?例如,constraint [Gender must be male, female, or unknown]?
  • 另外我想指出,约束方法对其他 DBM 来说更便携。
  • @Yawar 是的,并且违反该约束时显示的错误消息相当笨拙:“验证规则禁止一个或多个值'性别必须是男性,女性或未知' 设置为 'CUSTOMERS'。输入该字段的表达式可以接受的值。” 如果错误消息是决定因素,我更喜欢验证文本,“性别必须是男性,女性或未知”,因为它简单、直接、简洁。
  • 如果您在 SQL 中设置了约束,然后在 VBA 中设置了字段验证文本,会发生什么?实际上,这听起来很有趣,可以尝试一下。
  • 我也想知道这一点,但没有足够的动力去发现。我猜 DAO 验证规则,因为它触发得更早,会使约束变得多余。糟糕 --- 你说的是验证 Text。但我认为没有验证规则,验证文本将无法工作。
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多