我在MS Access 2010数据库中有一个customers表。我想创建一个包含两个子表单的表单,这些子表单允许用户选择客户并查看有关客户的更多详细信息。
customers表格如下:
CustomerID
FullName
Address
City
StateProvince
Other fields
我通过将CustomerListForm和CustomerDetailForm拖到MainForm上而在设计视图中创建的mainForm。
CustomerListForm is on left side and lets users filter customers from long list
Contains the following controls:
txtFilter textbox with embedded macro where = [LastName] Like [Forms]![CustomerListForm]![txtFilter] & "*"
FullName textbox and hidden CustomerID textbox which are bound to CustomersTable
CustomerDeatilForm located on right, with contents changing based on selection from CustomerListForm
If no customer selected from CustomerListForm, show default message
Else:
Show FullName, address, city, and stateprovince of customer selected from CustomerListForm
txtFullName set =[CustomersTable]![FullName], and so on for other fields
当我单独运行CustomerListForm时,它会成功地允许用户通过键入名称来过滤客户记录。但是当我在mainForm中嵌入CustomerListForm时,过滤能力消失了。此外,我在CustomerListForm中的过滤结果不包含任何类型的链接,这意味着CustomerDetailForm似乎无法识别应该输出数据的客户。
有谁能告诉我如何设置它?我想如果我得到这么多,我将能够填补我正在做的其他研究的空白。
编辑:
我看到CustomerListForm上的FullName文本框有一个OnClick方法。 FullName在CustomerListForm中不可编辑。 CustomerID是CustomerListForm中每条记录旁边的隐藏字段。我还看到FullName文本框的属性表的格式选项卡中有多个超链接设置。有没有办法可以使用FullName文本框的OnClick方法将CustomerID发送到CustomerDetailForm?也许在超链接?
答案 0 :(得分:1)
子格式可能是由CustomerID链接到父窗体?
从子窗体控件的LinkMasterID,LinkChildID属性中删除此值(在父窗体中 - 而不是在子窗体本身的窗体属性上)
删除宏,并为txtFilter创建一个AfterUpdate事件,该事件查找相关数据并将其显示在CustomerListForm中;除了此过程中的其他任何代码之外,请输入
Dim CustID as Long: CustID = [get customerID from wherever it is]
... [your other code]
Me.Parent.LockCustomer CustID
在外部表单中,将其添加到vba:
中Public Sub LockCustomer(CustID as Long)
CustomerDetailForm.Form.RecordSource = _
"SELECT * FROM Customer WHERE CustomerID = " & CustID
End Sub
如果您在主窗体上除了子窗体之外还有任何类型的客户详细信息,并且您希望在主窗体和详细子窗体上的列表窗体中显示所选客户的详细信息,而不是设置CustomerDetailForm .Form.RecordSource,设置Me.RecordSource&确保Detail子窗体控件的LinkMasterID,LinkChildID属性设置为CustomerID。