MS为不同的客户端访问单个表单的多个实例

时间:2018-10-13 16:53:38

标签: forms ms-access access-vba multiple-instances

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

但是它不起作用.. :-(

任何建议将不胜感激!谢谢!

1 个答案:

答案 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语句中应相同。