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