【发布时间】:2018-03-29 19:04:29
【问题描述】:
过去三个小时我一直在搜索这个问题,如果有人问过这个问题并回答了这个问题,我很抱歉,但我找不到解决方案。
我有一个主窗体 frmPHDLP 和子窗体(连续数据表)frmPHDUpdate。也不是绑定形式。 frmPHDLP 上有一个选项卡控件,显示真实世界的办公室位置。该子表单将根据所选选项卡显示每个位置的员工列表。我在 VBA 的子窗体中设置 RecordSource。
第一个标签完美无缺。问题是,当我在主窗体上选择一个新选项卡时,我无法让子窗体重新查询具有新位置的 SQL。 SQL 语句构建在子表单的Form_Current 事件中。
显然运行Me!frmPHDUpdate.Form.Requery 不会触发子表单上的Form_Current 事件。因为为什么会这样?
三个小时。纳达。感谢您的帮助。
frmPHDLP 代码:
Private Sub tabOffices_Change()
Me!frmPCLPUpdateSF.Requery
End Sub
frmPHD更新代码:
Private Sub Form_Current()
Dim strSearch As String
Dim strSQL As String
Select Case Me.Parent!tabOffices.Value
Case 0
strSearch = "8401"
Case 1
strSearch = "8400"
Case 2
strSearch = "8403"
Case 3
strSearch = "8402"
Case 4
strSearch = "8404"
Case 5
strSearch = "8405"
Case 6
strSearch = "8413"
Case 7
strSearch = "8411"
End Select
strSQL = "SELECT tblEmployee.ID, tblEmployee.[LastName] & "", "" & [FirstName] AS EmpName, tblPHDLProgram.MemberOfPHDL, tblOffices.OfficeID FROM tblOffices INNER JOIN (tblPHDLP RIGHT JOIN tblEmployee ON tblPHDLP.ID = tblEmployee.ID) ON tblOffices.ID = tblEmployee.Office WHERE (((tblOffices.OfficeID)= " & strSearch & "));"
Me.RecordSource = strSQL
End Sub
【问题讨论】:
-
为什么要在当前事件中构建 SQL?您为什么不只使用一个子程序来构建您可以手动触发的 SQL,并在您希望的任何事件上触发?你为什么还要构建 SQL(你可以只引用 SQL 中主窗体上的控件)?请分享一些代码。
-
>你为什么还要构建SQL(你可以只引用SQL中主窗体上的一个控件)?我不太确定你的意思。能给我举个例子吗?如果可行,我很想尝试一下!
-
你可以看到this answer (first section)。这是一个很好的做法,因为它避免了字符串连接的许多错误。这确实需要您将
SELECT CASE移动到Switch,但它肯定对您有用。 -
我已经提供了更详细的解释,说明如何在我的回答中使用在您的特定情况下引用控件以避免构建和更改 SQL 子句。