如何将一组验证规则应用于保存到特定表的所有表单?

Posted

技术标签:

【中文标题】如何将一组验证规则应用于保存到特定表的所有表单?【英文标题】:How can a set of validation rules be applied for all forms that save to a specific table? 【发布时间】:2014-01-20 16:41:51 【问题描述】:

我有多个表单写入同一个表。我希望写入该表的所有数据都使用相同的规则进行验证。我找不到在表级别应用验证的方法。看起来它将使用 BeforeUpdate 调用我的 vba 以每个表单为基础完成。

我正在运行 Access 2013。某些字段的验证将基于同一记录中其他字段的内容。我将需要按照以下伪代码行进行字符串操作:

for field.Serial; do
  if ( field.Model == "FORKLIFT" ); then
    validation_good_if( (left(field.Serial, 2) == "FL") && (length(field.Serial) == 5) && (right(field.Serial, 3) isNumeric) )
endFor

for field.AssetTag; do
  field.AssetTag = right("0000" & field.AssetTag, 8)
endFor

for field.Model, field.Location; do
  toUpperCase
endFor

确保对我的表的所有插入/更新都经过相同验证的最佳方法是什么?

【问题讨论】:

您使用的是哪个版本的 Access?数据宏(如触发器)可能适合。这些自 2010 年以来可用:***.com/a/15044797/2548 我曾考虑在表上使用更改前宏触发器,但找不到利用 VBA 的强大功能进行字符串处理的方法。 多少字符串处理?也许您可以添加一个示例? 您当然可以在作为公共 VBA 函数的表宏中使用表达式。但是,如果可能的话,如果可能的话,我会坚持使用 100% 本机表格代码。可以使用left、right、mid、instr等基本字符串函数。并且“正则表达式”之类的模式匹配也是可用的。所以我和其他人在这里 - 你可能想给出一些所需的字符串处理的例子,因为据我所知,如果表宏中没有相同的字符串函数集。 相关帖子:What functions can be used in MS Access data macros? 【参考方案1】:

这个问题听起来很适合数据宏。这是我想出的:

我还通过尝试从外部程序(C#,使用 ODBC)执行 INSERT 来测试这一点,并且数据宏也在该上下文中工作:

cmd.CommandText = "INSERT INTO Table1 ([Model], [Serial]) VALUES (?,?)";
cmd.Parameters.AddWithValue("?", "FORKLIFT");
cmd.Parameters.AddWithValue("?", "FL21");
try

    cmd.ExecuteNonQuery();

catch (Exception e)

    Console.WriteLine(e.Message);

错误 [HY000] [Microsoft][ODBC Microsoft Access Driver] FORKLIFT 验证失败:序列号必须为五 (5) 个字符长。

当验证成功时,记录被正确插入到表中。

【讨论】:

以上是关于如何将一组验证规则应用于保存到特定表的所有表单?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一组自定义结构保存到 plist swift

不使用 django 表单如何验证和保存表单数据

如何将一组叶标记保存到 geojson?

如何遍历一组动态表单输入并将它们插入到多个表中?

将一组按钮添加到特定的子视图

如何仅通过一次调用将一组对象保存到猫鼬数据库?