另一个困扰我的问题。 我有一个连续的表格,显示了我在这里工作的律师事务所的所有客户清单。现在,您可以双击一个客户端名称,然后打开一个窗体(frmContactSummary)以显示该客户端的所有信息。 问题是,由于目前已设计,一次只能为客户打开一个表格。 我们希望能够打开frmContactSummary的多个版本或实例。 我从艾伦·布朗(Allen Browne)的网站借来的代码如下:
Option Compare Database
Option Explicit
'Author: Allen J Browne, July 2004
'Email: allen@allenbrowne.com
'Found at: http://allenbrowne.com/ser-35.html
Public clnClient As New Collection 'Instances of frmClient.
Function OpenAClient() 'ContactID As Integer
'Purpose: Open an independent instance of form frmClient.
Dim frm As Form
'Debug.Print "ID: " & ID
'Open a new instance, show it, and set a caption.
Set frm = New Form_frmContactSummary
frm.Visible = True
frm.Caption = frm.Hwnd & ", opened " & Now()
'Append it to our collection.
clnClient.Add Item:=frm, Key:=CStr(frm.Hwnd)
Set frm = Nothing
End Function
这可以通过某种方式起作用,但是它只会打开Contact表中的第一条记录。我们希望实例在特定记录或“联系人”表中的ID上打开。 我在结尾处尝试了这段代码:
frm.RecordSource = "select * from Contacts where [ID] = " & ContactID
但是它不起作用.. :-(
任何建议将不胜感激!谢谢!
答案 0 :(得分:1)
好的,当您创建表单实例时,不能使用where子句的通用方法,如下所示:
Docmd.OpenForm "frmContactSummary",,,"id = " & me!id
以上当然可以打开一种表格。
但是,根据您的情况,您需要:
创建表单的新实例 将表单记录源移动/设置为ID 显示表格
因此,我们需要一种方法来将表单移动或设置为我们刚刚单击的行的ID。
因此,在我们创建表单之后,然后添加以下代码行:
Set frm = New Form_frmContactSummary
Frm.RecordSource = "select * from Contacts where id = " & me!id
其余代码如下。
尚不清楚表Contacts的PK(密钥)是“ id”还是“ ContactID”
所以您的代码将是:
Frm.RecordSource = "select * from Contacts where id = " & me!id
Or
Frm.RecordSource = "select * from Contacts where Contactid = " & me!ContactID
只需将上面的“ ContactID”替换为表联系人中使用的实际PK ID。 “ Id”与集合无关。我们只是在构建一条SQL语句,它将把表单拉/设置为一行。因此,这里所需的唯一信息是继续表格中的PK名称是什么,以及frmContactsSummary中的PK名称是什么。 (它们在两种形式中的名称相同,因此在sql语句中应相同。