微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Microsoft Access 中使用表行值验证表单输入字段?

如何解决如何在 Microsoft Access 中使用表行值验证表单输入字段?

我在 Access 中设置验证规则时遇到问题。

我有一个包含 Clients、TypeClient、Sales、SalesList、Items 表的数据库

我有一个 Sales 表单,里面有一个子表单 SalesList,它与 Items 有关系,以便我将多个库存商品放入 Sales 中,而不是只放置一个商品。

Inside Sales 表是 ID、销售日期、ID 客户。

SalesList里面是ID_List(参考Sales中的ID)、ID_Item(参考Items中的ID)、Quantity。

Inside Items 是 ID、名称、库存(我们有多少库存)、价格

问题是我试图验证我在子表单数量字段中输入的数据是否高于 0,但不高于可用库存。

问题是我尝试使用表达式构建器从具有 2 个字段的计算查询获取值 - ID 和该 id 的值,其条件是 ID 从主表单中获取它,子表单,组合框输入和查询工作。

但是当试图像这样得到它时:

显示错误“您在表单控件的 ValidationRule 属性中输入的表达式 [Query bla] 包含错误对象不包含自动化对象 'Query bla'”。

我尝试直接使用表 Value(但无论如何它都不起作用,因为它不知道从哪个字段获取股票价值),仍然是同样的错误。我猜它不能参考其他任何东西?正常的验证规则有效,但我想验证它不超过我现在销售的商品的可用库存价值。

互联网上没有任何地方有如何使用表达式生成器进行操作的教程。那么人们如何验证他们的领域?

例如,在这种情况下,当我目前只有 2 件商品的库存时,我并不会阻止我销售 200 件商品。

注意:我在表达式生成器中尝试过 DlookUp,直接告诉我没有

错误的验证规则表达式构建器代码示例:

<=[Query bla]![Stock]

<=[Items]![Stock]

我目前正在使用 VBA 并使用以下方法之一获取我需要的记录(当前库存),并且我的未绑定文本在每个子表单上都更改为相同的内容,这不应该发生。我可以用什么来为每条记录唯一地填充一个字段:

Private Sub ID_Product_IZBOR_Click()
    'Me.Stock_ValueField = DLookup("[Nalichnost]","Stoka","[ID]=" & Me.ID_Product_IZBOR)

    Me.Stock_ValueField = Me.ID_Product_IZBOR.Column(2)
End Sub

部分解决方案:我创建了一个新的 Dim 作为 Integer 并根据表单中字段提供的 ID 获取记录,并使用 BeforeUpdate 来验证当前股票。不幸的是,查看当前库存水平的唯一方法是单击您选择产品的组合框并检查该列,它不会显示在其他任何地方:(

解决方法

不要使用表达式构建器(我从不使用) - 只需在属性中输入所需的表达式即可。

>0 AND <=DLookup("Stock","Items","ID=" & [ID_Item])

另一种方法是在文本框 ControlSource 中返回 Stock,然后 ValidationRule 引用该文本框。此外,用户可以看到数量限制。从 Items 表中提取 Stock 值的方法:

  1. 在 Items 组合框 RowSource 中包含 Stock 字段 - 文本框然后通过其索引引用列(索引以 0 开头):=[cbxItems].Column(2);记录条目/编辑提交到表后,可能需要 VBA 来重新查询组合框。

  2. 在表单 RecordSource 中包含 Items 表 - 将文本框绑定到 Stock 字段(Locked yes 和 TabStop no)

  3. 文本框 ControlSource 中的 DLookup() 表达式

使用 ValidationText 属性为用户提供自定义消息。

但是,ValidationRule 不会阻止用户在跳过控件时不输入任何值。如果要确保输入值,可以在表格中按要求设置字段或使用表单 BeforeUpdate 事件来验证记录数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。