私を困惑させる別の質問。私はここで働いている法律事務所のすべてのクライアントのリストを示す継続的なフォームを持っています。現在、クライアント名をダブルクリックすると、フォーム(frmContactSummary)が開き、そのクライアントのすべての情報が表示されます。問題は、現在設計されているため、クライアントが一度に開くことができるフォームは1つだけであるということです。frmContactSummaryの複数のバージョンまたはインスタンスを開くことができるようにする必要があります。AllenBrowneのサイトから次のようなコードを借りました。
Option Compare Database
Option Explicit
'Author: Allen J Browne, July 2004
'Email: [email protected]
'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
しかし、それは機能しませんでした.. :-(
アドバイスをいただければ幸いです。ありがとうございました!
フォームのインスタンスを作成するとき、次のようなwhere句の一般的なアプローチを使用することはできません。
Docmd.OpenForm "frmContactSummary",,,"id = " & me!id
もちろん、上記は1つのフォームを開くために機能します。
ただし、あなたの場合、あなたは必要です:
フォームの新しいインスタンスを作成しますフォームレコードソースを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」を、テーブルの連絡先で使用されている実際のPKIDに置き換えるだけです。「Id」はコレクションとは何の関係もありません。フォームを1行にプル/設定するSQLステートメントを作成しているだけです。したがって、ここで必要な情報は、継続フォームのPK名と、frmContactsSummaryのPK名だけです。(これらは両方の形式で同じ名前になるため、sqlステートメントでも同じである必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加