MS Access 针对不同客户端的单一表单的多个实例

MS Access Multiple Instances of Single Form for different clients

又一个难倒我的问题。 我有一个连续表格,显示我在这里工作的律师事务所的所有客户名单。现在,您可以双击客户名称,然后会打开一个表单 (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

这在某种程度上可行,但它只会打开我们联系人 table 中的第一条记录。我们希望实例在特定记录或联系人 table 中的 ID 上打开。 我在接近尾声时尝试了这段代码:

frm.RecordSource = "select * from Contacts where [ID] = " & ContactID

但是没有用.. :-(

如有任何建议,我们将不胜感激!谢谢!

好的,当你创建一个表单的实例时,你不能使用像这样的 where 子句的常见方法:

Docmd.OpenForm "frmContactSummary",,,"id = " & me!id

以上当然可以打开一个表格。

但是,对于您的情况,您需要:

创建表单的新实例 Move/set 表单记录源到ID 显示形式

因此我们需要一种方法来将表单移动或设置为我们刚刚单击的行的 ID。

所以在我们创建表单之后,然后添加这行代码:

Set frm = New Form_frmContactSummary

Frm.RecordSource = "select * from Contacts where id = " & me!id

接下来是您的其余代码。

不清楚table联系人的PK(key)是“id”还是“ContactID”

因此您的代码将是:

Frm.RecordSource = "select * from Contacts where id = " & me!id

Or

Frm.RecordSource = "select * from Contacts where Contactid = " & me!ContactID

只需将上面的“ContactID”替换为 table 联系人中使用的实际 PK id。 "Id" 与集合无关。我们只是在构建一个 SQL 语句,将 pull/set 表单排成一行。因此,这里唯一需要的信息是继续表单中的 PK 名称是什么,以及 frmContactsSummary 中的 PK 名称是什么。 (它们在两种形式中的名称相同,因此在 sql 语句中应该相同。