MS-Access表单中的动态查询

时间:2018-09-04 07:50:11

标签: ms-access access-vba

我在Microsoft Access(2016)中有一个表单,其中有一个名为KID的下拉列表。当下拉列表失去焦点时,我要运行如下查询:

SELECT max(Cnt)
FROM Table
WHERE KID = ValueOfDropdownList

此查询的结果应在事件的VB代码中的变量中使用。

不幸的是,我一时被限制使用。我是否甚至以正确的方式使用Access(从表单的下拉菜单中选择->事件-> VB中的SQL查询->表单中的显示)还是有更好的方法呢?

谢谢您的帮助!

3 个答案:

答案 0 :(得分:2)

首先,我将使用组合框的AfterUpdate事件,否则即使有人只是在控件中使用Tab键,也会触发该事件。

第二,如果这仅仅是为了设置变量,那么在这种情况下,最好使用Domain函数DMax()

iVariable = DMax("Cnt","Table","[KID] = " & Me.YourComboControlName )

这假设KID是一个数字字段。如果KID是文本,则需要像这样划定标准;

 iVariable = DMax("Cnt","Table","[KID] = '" & Me.YourComboControlName & "'" )

最后,如果您希望在滚动记录时进行更新,则需要向表单的OnCurrent事件添加相同的代码。记录更改时触发。

如果出于显示目的,如果要设置一个Unbound控件,则不能在连续表单上使用相同的技术,则需要将其拉入基础表单记录集。

答案 1 :(得分:0)

您可以使用 DMax

YourVariable = DMax("[Cnt]", "[Table]", "[KID] = " & Me!DropdownListName.Value & "")

如果KID是文本,请加上引号:

YourVariable = DMax("[Cnt]", "[Table]", "[KID] = '" & Me!DropdownListName.Value & "'")

答案 2 :(得分:0)

仅供参考,还有另一种选择。作为您组合的data source
使用返回2列的查询,例如select KID, max(cnt) from table1 group by KID
然后在文本框中,使用=combo1.columns(1)检索值。
为此,您需要在组合属性中指定它具有2列。在公式中,请不要忘记那些组合列基于0。
当您需要检索链接到组合的多个值(并且没有数百万条记录)时,这是最有效的解决方案。