我有一个表单,我想在其中实现级联组合框 .
第一个用户选择"Client Name",其中我有SQL语句获得3列 - 客户名,客户名和客户姓 . 为了允许用户输入名字而不是ID,设置了 Column Width: 0;3
然后用户选择"Work",其中我有SQL语句获得2列 - 工作ID,工作描述 . 为了允许用户输入工作描述而不是ID,设置了 Column Width : 0;2
想要级联列表,以便组合框中的“工作”列表仅显示工作表具有客户端ID的外键 .
我通过将SQL语句添加到工作组合框的 Row Source
来实现级联组合框 .
SELECT WorkTbl.WorkID, WorkTbl.WorkDescription, WorkTbl.ClientID
FROM WorkTbl
WHERE (((WorkTbl.ClientID)=Forms![Work Done Entry]!cboClientID);
“cboClientID”是Client的Combo-box的名称 .
但由于在cboClientID上设置了 Column Width: 0;3
,因此用户将输入"Client Name"而不是"Client ID" . 因此SQL Query无法正常工作 .
有什么工作吗?我找到的一个解决方案(但无法使其工作)是添加一个文本框并在此文本框中设置客户端ID,然后使我们使用此文本框以获取SQL中所需的客户端ID . 得到了这个想法This Question
在此先感谢您回答此问题 . 任何帮助或建议表示赞赏 .
2 回答
你使用“CboclientID”组合框的“on after updated”事件怎么样?
只需在更新事件后将此代码添加到“cboClientID”组合框:
这样,每当您更新客户名称时,您的工作组合框也会根据您的选择进行更改 . 希望这可以帮助 .
您的SQL语句应该按原样工作 . SQL将使用Combobox控件的Value属性进行查询,并将包含ClientId,因为它是组合框数据中的第一列 .
但是,当您第一次打开表单并且没有选择客户端时,将执行填充工作组合框的SQL . 因此,SQL不会返回任何数据,并且工作组合框保持为空 .
要使其按预期工作,您必须在选择其他客户端时重新查询工作数据 . 一种方法是,为客户端组合框的After Update事件编写事件过程 . 在客户端组合框的属性中,转到事件,更新后并选择
[Event Procedure]
. 然后将类似于此的VBA代码添加到表单的类模块中 .