我在Microsoft Access(2016)中有一个表单,我有一个名为KID的下拉列表。当下拉列表丢失焦点时,我想运行如下所示的查询:
SELECT max(Cnt)
FROM Table
WHERE KID = ValueOfDropdownList
此查询的结果应该可以在事件的VB代码中的变量中使用。
不幸的是,我当时仅限于Access。我是否以正确的方式使用Access(从表格中的下拉菜单中选择 - >事件 - > VB中的SQL查询 - >表单中的显示)还是有更好的方法可以做到这一点?
感谢您的帮助!
首先,我会使用组合框的AfterUpdate
事件,否则即使有人只是通过控件标记它也会触发。
其次,如果只是为了设置一个变量,你可能会更好地使用域函数,在这种情况下是一个DMax()
iVariable = DMax("Cnt","Table","[KID] = " & Me.YourComboControlName )
这假设KID是一个数字字段。如果KID是文本,您需要划定这样的标准;
iVariable = DMax("Cnt","Table","[KID] = '" & Me.YourComboControlName & "'" )
最后,如果您希望在滚动记录时更新此更新,则需要将相同的代码添加到表单的OnCurrent
事件中。当记录发生变化时会触发。
如果是为了显示目的,如果这是设置未绑定控件,则不能在连续表单上使用相同的技术,您需要将其拉入基础表单记录集。
你可以使用DMax:
YourVariable = DMax("[Cnt]", "[Table]", "[KID] = " & Me!DropdownListName.Value & "")
如果KID是文本,请应用引号:
YourVariable = DMax("[Cnt]", "[Table]", "[KID] = '" & Me!DropdownListName.Value & "'")
仅供参考,还有另一种选择。作为你的组合的data source
,
使用返回2列的查询,如select KID, max(cnt) from table1 group by KID
。
然后在您的文本框中,使用=combo1.columns(1)
检索您的值。
为此,您需要在组合属性中指定它有2列。在公式中,不要忘记那些组合列是基于0的。
当您需要检索链接到组合的多个值(并且您没有数百万条记录)时,这是最有效的解决方案。