0

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

数据库中的 FindClientsNavigation 表单工作正常,直到我将它拖到 Main 表单上的导航控件中,这样 FindClientsNavigation 就变成了一个子表单。现在需要解决以下两个问题:

1.) 当您加载主窗体时,会出现一个对话框,询问 txtFilterClients 文本框的参数。txtFilterClients 用于过滤列表框 lstbxclients 中的客户端名称和 IDS。通过将其行源设置为以下查询来填充 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]));

我正在寻找这两个问题的解决方案,并且我也希望对代码背后的概念进行一些解释,以便我可以知道如何解决可能在其他地方出现的类似问题。

4

1 回答 1

2

我无法完全遵循您的描述,但假设这FindClientsNavigation是一个子表单,那么您还需要引用它的Form属性才能引用子表单中的控件:

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

您也不需要参考Text.TextBox

补充:如果RowSource被分配为字符串,则需要将其拆分为三个部分,以便将文本框值替换为 SQL:

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

补充:您的子窗体控件的名称是NavigationSubformFindClientsNavigationSourceObject该控件的名称。所以你需要使用:

Like '*' & [Forms]![Main]![NavigationSubform].[Form]![txtFilterClients] & '*'

感叹号(bang 运算符!)引用了一个对象的默认集合,对于一个表单,它是它的控件集合。

此更改还需要在您的表单后面的代码中进行qryListCommunicationForm,并RowSource在您的原始帖子中显示。

于 2013-09-19T21:01:53.547 回答