MS Access:Copy/paste 多个字段的数据验证规则?
MS Access: Copy/paste data validation rules to multiple fields?
第一次在这里提问,请告诉我如何改进!
我已经搜索过 Google 和 Stack Overflow,但也许我没有问正确的问题,因为我是 Access 的新手。
我正在为医疗保健调查问卷制作数据输入表。我有几个字段需要回答Y/N/Unk。我想对所有这些字段应用 数据验证。由于大约有四打字段,我不想每次都手动执行此操作。
例如:
Y N Unk Symptom
[] [] [] Nausea
[] [] [] Vomiting
etc.
或者,有没有办法用我想要的答案 (Y/N/Unk) 简单地创建 table 并应用引用“Y/N”的组合框 Table ,并将此引用批量应用于数据输入表单上的许多字段?
我是 Access 新手,很遗憾,我什么都不知道 VBA。
提前致谢!
此致
Alternately, is there a way to simply create a table with my desired answers (Y/N/Unk) and apply combo boxes that reference the "Y/N" Table, and apply this reference in bulk to many fields on the data-entry form?
是的,这就是在关系数据库中应该采用的方式。创建表并 link 使用外键。让我们假设一个非常简单的情况,其中只有一个永远不会改变并且会为多个患者完成的问卷调查:
question patient result choice
------------- ----------- ------------ -----------
question_id <--+ patient_id <---- patient_id +- choice_id
question_text | name +- question_id | choice_text
any | dob | choice_id <--+
other | change_date | created_date
info | change_date | change_date
| |
+-----------------+
当您 link 这样的外键时,Access 将确保只能输入有效的选择。
正如 Tomalak 所说的那样,使用关系是做到这一点的正确方法。不过,由于您是 Access 新手,您可能会发现以下内容很有用。
首先给自己创建一个table,随便你怎么称呼它,但在我的例子中我称它为YNU。这个 table 只需要两个字段,一个 ID,它应该是一个整数并且需要是主键(如果你愿意,你也可以使用 Auto-Number)和一个 Description 字段,它应该是 Short文本。保存新的 table 然后打开它。现在在描述字段中添加值 Unknown、Yes 和 No。如果您使用了 Auto-Number,则不需要 ID 字段中的值(Access 自动提供它们),否则您自己添加它们(例如分别为 0、1、2)。
现在在设计视图中打开你的 Patients table(或者随便你怎么称呼它),确保 Nausea、Vomiting 和其他任何你想要的数据类型与 YNU 中的 ID 数据类型相同(如果您进行了更改,请保存)。如果您使用 Auto-Number,则数据类型必须是 Long Integer。接下来,select 设计选项卡上的关系。使用 Show Table 以便打开 YNU 和 Patients。现在将 ID 字段从 YNU table 拖动到 Patients table 中的 Nausea 字段。将出现一个弹出对话框,允许您定义关系的工作方式。您会注意到 Access 自动知道关系将是“One-to-Many”;这是因为在 Patients table 中会有许多 unknown/yes/no 用于 Nausea,但在 YNU table 中只有一个未知的是和否。现在选中 Enforce Referential Integrity 框并单击按钮 Create。接下来再次使用 Show Table 显示第二个 YNU table,并将 ID 拖到 Vomiting。根据需要重复多个字段。每个关系都需要一个新的 YNU 盒子 table。完成后保存并关闭关系布局。
现在,在设计用于患者的表单时 table,您可以 select 工具箱中的组合框。在窗体上绘制组合框后,会出现另一个弹出窗口。接受默认建议(我希望组合框从另一个 table 或查询中获取值)并单击下一步。 Select YNU 从 Table 的列表中,然后单击下一步。现在使用双箭头按钮,将 ID 和 Description 这两个字段移动到右侧(空)列。单击下一步,在第一个排序 select ID 字段中单击下一步。您现在将看到 Access 自动建议隐藏键字段 (ID),并根据 table 中的值为组合框提供建议的宽度。再次接受默认值并单击下一步。现在将默认值更改为“将该值存储在此字段中:”和 select 来自患者 table 的恶心字段。再加一个 Next,您就可以为组合框指定一个合适的标签。结束。根据需要重复组合框的数量。
完成此操作后,Access 现在会为您处理所有数据验证。您将只能 select 三个可能值之一。
编辑
在您发表评论后,我意识到如果您要创建如此多的关系,这样做(通过向导)会很慢。在这种情况下,您可以通过 DDL(数据定义语言)来完成。创建一个新查询(使用查询设计);关闭 Show Table 弹出窗口而不 selecting 任何东西;切换到 SQL 视图(左上角的大按钮)。现在您将能够输入如下语句和 运行 它(运行 在设计选项卡上):
ALTER TABLE Patients ADD CONSTRAINT FK_BrokenBones_YNU FOREIGN KEY (BrokenBones) REFERENCES YNU(Id)
您只需要为每个需要关系的字段更改两件事;首先是关系的名称(在 FK_BrokenBones_YNU 之上),其次是字段的名称(在 BrokenBones 之上)。
从技术上讲,这种关系是一种限制,因此在 DDL 中它是一个 CONSTRAINT
并且基于另一个 table 中的主键,因此术语 FOREIGN KEY
。
至于你为关系取的名字,你可以随意使用,只要和你以前用过的不一样即可!很多人习惯用FK开头来表示它是一个FOREIGN KEY
,然后包括字段名和table,使用的是主键。从技术上讲,您可以基于不是其 table 主键的字段创建 FOREIGN KEY
,但在这种情况下,它必须有一个唯一索引。在我们的例子中,我们不需要关心这些微妙之处。
第一次在这里提问,请告诉我如何改进! 我已经搜索过 Google 和 Stack Overflow,但也许我没有问正确的问题,因为我是 Access 的新手。
我正在为医疗保健调查问卷制作数据输入表。我有几个字段需要回答Y/N/Unk。我想对所有这些字段应用 数据验证。由于大约有四打字段,我不想每次都手动执行此操作。
例如:
Y N Unk Symptom
[] [] [] Nausea
[] [] [] Vomiting
etc.
或者,有没有办法用我想要的答案 (Y/N/Unk) 简单地创建 table 并应用引用“Y/N”的组合框 Table ,并将此引用批量应用于数据输入表单上的许多字段?
我是 Access 新手,很遗憾,我什么都不知道 VBA。
提前致谢!
此致
Alternately, is there a way to simply create a table with my desired answers (Y/N/Unk) and apply combo boxes that reference the "Y/N" Table, and apply this reference in bulk to many fields on the data-entry form?
是的,这就是在关系数据库中应该采用的方式。创建表并 link 使用外键。让我们假设一个非常简单的情况,其中只有一个永远不会改变并且会为多个患者完成的问卷调查:
question patient result choice
------------- ----------- ------------ -----------
question_id <--+ patient_id <---- patient_id +- choice_id
question_text | name +- question_id | choice_text
any | dob | choice_id <--+
other | change_date | created_date
info | change_date | change_date
| |
+-----------------+
当您 link 这样的外键时,Access 将确保只能输入有效的选择。
正如 Tomalak 所说的那样,使用关系是做到这一点的正确方法。不过,由于您是 Access 新手,您可能会发现以下内容很有用。
首先给自己创建一个table,随便你怎么称呼它,但在我的例子中我称它为YNU。这个 table 只需要两个字段,一个 ID,它应该是一个整数并且需要是主键(如果你愿意,你也可以使用 Auto-Number)和一个 Description 字段,它应该是 Short文本。保存新的 table 然后打开它。现在在描述字段中添加值 Unknown、Yes 和 No。如果您使用了 Auto-Number,则不需要 ID 字段中的值(Access 自动提供它们),否则您自己添加它们(例如分别为 0、1、2)。
现在在设计视图中打开你的 Patients table(或者随便你怎么称呼它),确保 Nausea、Vomiting 和其他任何你想要的数据类型与 YNU 中的 ID 数据类型相同(如果您进行了更改,请保存)。如果您使用 Auto-Number,则数据类型必须是 Long Integer。接下来,select 设计选项卡上的关系。使用 Show Table 以便打开 YNU 和 Patients。现在将 ID 字段从 YNU table 拖动到 Patients table 中的 Nausea 字段。将出现一个弹出对话框,允许您定义关系的工作方式。您会注意到 Access 自动知道关系将是“One-to-Many”;这是因为在 Patients table 中会有许多 unknown/yes/no 用于 Nausea,但在 YNU table 中只有一个未知的是和否。现在选中 Enforce Referential Integrity 框并单击按钮 Create。接下来再次使用 Show Table 显示第二个 YNU table,并将 ID 拖到 Vomiting。根据需要重复多个字段。每个关系都需要一个新的 YNU 盒子 table。完成后保存并关闭关系布局。
现在,在设计用于患者的表单时 table,您可以 select 工具箱中的组合框。在窗体上绘制组合框后,会出现另一个弹出窗口。接受默认建议(我希望组合框从另一个 table 或查询中获取值)并单击下一步。 Select YNU 从 Table 的列表中,然后单击下一步。现在使用双箭头按钮,将 ID 和 Description 这两个字段移动到右侧(空)列。单击下一步,在第一个排序 select ID 字段中单击下一步。您现在将看到 Access 自动建议隐藏键字段 (ID),并根据 table 中的值为组合框提供建议的宽度。再次接受默认值并单击下一步。现在将默认值更改为“将该值存储在此字段中:”和 select 来自患者 table 的恶心字段。再加一个 Next,您就可以为组合框指定一个合适的标签。结束。根据需要重复组合框的数量。
完成此操作后,Access 现在会为您处理所有数据验证。您将只能 select 三个可能值之一。
编辑
在您发表评论后,我意识到如果您要创建如此多的关系,这样做(通过向导)会很慢。在这种情况下,您可以通过 DDL(数据定义语言)来完成。创建一个新查询(使用查询设计);关闭 Show Table 弹出窗口而不 selecting 任何东西;切换到 SQL 视图(左上角的大按钮)。现在您将能够输入如下语句和 运行 它(运行 在设计选项卡上):
ALTER TABLE Patients ADD CONSTRAINT FK_BrokenBones_YNU FOREIGN KEY (BrokenBones) REFERENCES YNU(Id)
您只需要为每个需要关系的字段更改两件事;首先是关系的名称(在 FK_BrokenBones_YNU 之上),其次是字段的名称(在 BrokenBones 之上)。
从技术上讲,这种关系是一种限制,因此在 DDL 中它是一个 CONSTRAINT
并且基于另一个 table 中的主键,因此术语 FOREIGN KEY
。
至于你为关系取的名字,你可以随意使用,只要和你以前用过的不一样即可!很多人习惯用FK开头来表示它是一个FOREIGN KEY
,然后包括字段名和table,使用的是主键。从技术上讲,您可以基于不是其 table 主键的字段创建 FOREIGN KEY
,但在这种情况下,它必须有一个唯一索引。在我们的例子中,我们不需要关心这些微妙之处。