如何将一组验证规则应用于保存到特定表的所有表单?
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) 个字符长。
当验证成功时,记录被正确插入到表中。
【讨论】:
以上是关于如何将一组验证规则应用于保存到特定表的所有表单?的主要内容,如果未能解决你的问题,请参考以下文章