【发布时间】:2016-02-22 23:06:47
【问题描述】:
我刚刚开始深入研究 VBA,但遇到了一些我不理解的东西。
我正在为我们的维修店建立一个零件数据库,作为知识库和采购工具。我有一个表格可以在数据库中搜索需要订购的零件(“frmPartSearch”)。如果他们知道供应商零件编号,我有一个弹出表单(“frmVendorPNLookUp”)来搜索匹配项以供用户批准,然后我想在他们单击命令按钮时将该记录复制到主表单中。
frmPartSearch 有两个组合框来选择零件的分类和系列,它们在列表框控件源的标准中用于仅显示具有该分类/系列名称的零件。列表框控件来源为:
SELECT tblPart.chrPartNumber
, tblPart.chrDescription
, tblKnowledgeBase.idsKB
FROM (tblFamily
RIGHT JOIN tblPart
ON tblFamily.idsFamily = tblPart.lngFamilyId)
LEFT JOIN tblKnowledgeBase
ON tblPart.idsPart = tblKnowledgeBase.lngPartId
WHERE (((tblPart.chrDescription)
Like "*" & [Forms]![frmPartSearch]![txtKeywordSearchCriteria] & "*")
AND ((tblFamily.lngClassificationId)
=[Forms]![frmPartSearch]![cboClassificationSelection])
AND ((tblFamily.chrFamilyTitle)
=[Forms]![frmPartSearch]![cboFamilySelection]));
我已经编写了这段代码并将其放在frmVendorPNLookUp 上我的“复制到主窗体”按钮的OnClick 事件中:
Private Sub cmdAddTofrmPartSearch_Click()
DoCmd.OpenForm ("frmPartSearch")
Forms("frmPartSearch").CboClassificationSelection
= Forms("frmVendorPNLookUp").lstVendorPNSearchResults.Column(3)
Forms("frmPartSearch").cboFamilySelection
= Forms("frmVendorPNLookUp").lstVendorPNSearchResults.Column(4)
Forms("frmPartSearch").lstSearchResults.Requery
End Sub
我已经确认我根据输入到frmPartSearch 控件中的值从lstVendorPNSearchResults 中提取了正确的列。然而,
Forms("frmPartSearch").lstSearchResults.Requery
没有填充我的列表框。当我单独运行控制源时,我得到一个错误(“这个表达式输入不正确,或者它太复杂而无法评估......”)如果我自己使用组合框,它可以正常工作,它重新查询列表框@每个组合框的 987654332@。
设置组合框值时是否需要声明 ID 字段?
当我设置的值等于匹配的控制源行时,它不应该关联ID字段吗?
问题是我在列表框控件源中使用基于驱动分类组合框的表的外键的条件吗?
有没有更简单的方法可以使用ListBox.Selected 完成此操作?我不太关心填写组合框,只要列表框仅根据他们输入的供应商 PN 显示匹配的部件即可。
感谢您提供的任何帮助。
【问题讨论】:
-
您使用的图片太多了。它们不是必需的(所包含的绝大多数信息都可以在文本中描述)。图像难以阅读,无法从中复制/粘贴信息,并且经常被公司代理阻止,这意味着这些读者无法获得内容。此外,对于那些使用移动设备的读者来说,它们是极其困难的。你能edit 尽可能多地删除并改用文本吗? (当您使用它时,请修复您发布的 SQL 混乱的格式,使其可读且不会水平滚动?)谢谢。
-
感谢您的指导。谢谢。
-
frmPartSearch 上的组合框是单列,还是有 2 列,绑定列 = ID(宽度 0),文本为可见列?
-
2 列,绑定 ID 字段被隐藏,文本字段可见。我正在我的 VBA 中设置文本的值。
-
什么是
"frmPastSearch"?。它出现在Forms("frmPastSearch").lstSearchResults.Requery。