另一种选择是编写串接子窗体显示记录的的PKS的功能。假设您的主要表单是公司,您的子表单列出了员工。您将有子窗体控件的LinkMasterFields和LinkChildFields属性将CompanyID(公司表的PK,雇员表的FK)。
因此,显示在子窗体来获得相同的记录集时,父母是在一个特定的公司记录:
Dim db As DAO.Database
Dim strSQL As String
Dim rst As DAO.Recordset
Dim strEmployeeIDList As String
Set db = CurrentDB
strSQL = "SELECT Employees.* FROM Employees WHERE CompanyID="
strSQL = strSQL & Me!CompanyID & ";"
Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount > 0 Then
With rs
.MoveFirst
Do Until .EOF
strEmployeeIDList = strEmployeeIDList & ", " & !CompanyID
.MoveNext
Loop
End With
strEmployeeIDList = Mid(strEmployeeIDList, 3)
End If
rs.Close
Set rs = Nothing
Set db = Nothing
现在,你为什么会做这个,而不是通过一个already-走打开记录集(即子表单的RecordsetClone)?我不知道 - 只是可能有些情况下,您不希望将查找绑定到特定的表单/子表单。你可以通过让你的函数连接接受一个记录集,然后将它传递给一个如上所述的记录集,或者将它传递给子表单的RecordsetClone来解决这个问题。在这种情况下,您可以使用连接函数,而不必绑定到表单/子表单。
在Do While循环中添加一个MoveNext。否则,您将重复连接相同的值直到......繁荣! – HansUp 2009-09-06 14:41:43
当你正在使用的记录集已经存在时,它也使得发送很少的数据来建立一个新的记录集指针。上面的代码可以使用“WITH Me!SubForm.Form.RecordsetClone”重写,并节省很多麻烦(比如需要清理你创建的记录集变量 - 可能不应该在上面的代码中关闭,因为你'真的在无法关闭的记录集上运行,即子表单的RecordsetClone)。 – 2009-09-06 22:21:24