当form成为子表单时,rowsource中的SQL需要更改

时间:2013-09-19 20:55:41

标签: sql vba ms-access access-vba ms-access-2010

我有一个Microsoft Access 2010数据库,其中包含行源属性中的两个SQL问题。

数据库中的FindClientsNavigation表单正常工作,直到我将其拖动到主窗体上的导航控件中,以便FindClientsNavigation成为子窗体。现在需要修复以下两个问题:

1。)当您加载主窗体时,会出现一个对话框,询问txtFilterClients文本框的参数。 txtFilterClients用于过滤列表框lstbxclients中的客户端名称和IDS。通过将其rowsource设置为以下查询来填充lstbxclients:

SELECT c.ClientNumber, c.FullName FROM Clients AS c
WHERE (((c.FullName) Like '*' & [Forms]![Main]![FindClientsNavigation]![txtFilterClients].[Text] & '*'))
ORDER BY c.FullName;

您可以在以下打印屏幕中看到错误消息/对话框:

2。)单击“通信表单”导航选项卡时会出现 第二个错误 ,并出现一个对话框,询问ClientID的值,即FindClientsNavigation表单的属性。第二个问题似乎是qryListCommunicationForms表单的Row Source属性,其SQL当前是:

CommunicationTable.CommunicationNumber, CommunicationTable.ClientNumber, CommunicationTable.DateOfCommunication, CommunicationTable.Communication, CommunicationTable.Communication, CommunicationTable.CommunicationWithNumber  
FROM CommunicationTable  
WHERE (((CommunicationTable.ClientNumber)=[Forms]![Main]![FindClientsNavigation].[ClientNumber]));

我正在寻找这两个问题的解决方案,我也很感激对代码底层概念的一些解释,以便我知道如何解决其他地方可能出现的类似问题。

1 个答案:

答案 0 :(得分:2)

我无法完全按照您的说明进行操作,但假设FindClientsNavigation是子表单,那么您还需要引用其Form属性以便能够引用控件子表单

[Forms]![Main]![FindClientsNavigation].Form![txtFilterClients]

您也不需要引用Text的{​​{1}}属性。

已添加:如果TextBox被指定为字符串,则需要将其拆分为三个部分,以便将文本框值替换为SQL:

RowSource

已添加:您的子表单控件的名称为"SELECT c.ClientNumber, c.FullName FROM Clients AS c WHERE (((c.FullName) Like '*'" & [Forms]![FindClientsNavigation].[Form]![txtFilterClients] & "'*')) ORDER BY c.FullName;" NavigationSubform是此控件的FindClientsNavigation。所以你需要使用:

SourceObject

感叹号(bang operator!)引用一个对象的默认Collection,对于Form,它是Controls集合。

此更改还需要在您的表单Like '*' & [Forms]![Main]![NavigationSubform].[Form]![txtFilterClients] & '*' 以及原始帖子中显示的qryListCommunicationForm后面的代码中进行。