-1

ms access 2010 データベースに、CustomerID、FullName、Address、City、StateProvince、PostalCode などを含む顧客テーブルがあります。

2 つのサブフォームを含むメイン フォームを設定したいと考えています。ListSubForm には、ユーザーがテキスト ボックスに入力してフィルター処理できる FullNames のリストだけがあります。次に、DetailSubForm は、ListSubForm のフィルター処理されたリストからユーザーが選択した特定の顧客の Address、City、StateProvince、PostalCode などを出力します。

Web で見つけることができるすべての例は、マスターと詳細が 1 対多の関係を持つ 2 つの異なるテーブルであるマスター/詳細サブフォーム用です。それは私が望むものではありません。同じテーブルに基づいてマスター/詳細サブフォームを設定するための手順を教えてもらえますか? 1 つのサブフォームで、最初のサブフォームから選択された特定のレコードに関する詳細を提供するだけですか?

または、実際の例へのリンクがない場合は、少なくとも設定方法を教えてください。私は VBA に慣れていないので、VBA に深く入り込むのは避けたいと思います。簡単なマクロを使用して設定できるものが望ましいです。

デザイン ビューの MainForm の 2 つのサブフォームを次に示します。

フォーム ビューの MainForm の 2 つのサブフォームを次に示します。

ClientListForm のプロパティ シートで [On Current Event] の横にある [...] ボタンをクリックした結果は次のとおりです。

ここからどこへ行けばいいですか?

編集:

Yawar の提案に従って分割フォームを作成しました。ユーザーは顧客を選択でき、その顧客のデータが左側に詳細に表示されますが、次のようになります。

データシートは醜く、データシートはフィルター処理できないため、ユーザーは何千ものレコードをタブで移動する必要があります。左のデータシートではないように見せる方法はありますか? そもそもデータシートにしないことでしょうか?上記の元の例のテキスト ボックス フィルターを使用した連続フォームは問題なく表示されました。また、ユーザーが顧客の名前を入力して、顧客のリストを目的の名前の顧客だけに縮小できるように、左側の顧客のリストをフィルター可能にする方法はありますか?

2番目の編集:

Yawar の編集後、コンボボックスの指示に再び従ったところ、エラー メッセージが再び表示されました。また、このアプローチには問題があります。これは、一度にすべてのオプションを表示しないドロップダウン リストであり、上記の元の投稿で示したようにコンボ ボックスがフィルター処理されないためです。ただし、以下のように結果を掲載しています。表示されるエラー メッセージは次のとおりです。右側の詳細情報が左側の選択したクライアントと一致しないことに注意してください。

前の画像で [デバッグ] ボタンをクリックすると表示されるコード行は次のとおりです。

参考までに、フィールド名が正しいことを示すために、基になるテーブルのデータシートの一部の画像を次に示します。

3番目の編集:

Yawar の新しい提案に合わせてコードを変更したところ、コンボボックスの選択を変更しようとすると、次のエラー メッセージが表示されました。

デバッグボタンをクリックすると、次のようになりました。

4

2 に答える 2

1

1 対 1 の関係を処理するためにサブフォームは必要ありません。フル ネームのコンボ ボックス ( と呼びましょうcmbCustomer) をメイン フォームに配置します。Clientsただし、基になるテーブルにバインドしないでください。Data > Row Source代わりに、バインドされていないままにして、そのプロパティを使用して顧客の氏名を入力してください。Row Sourceでは、次のようなSQL ステートメントを使用できます。

select distinct FullName, CustomerID
from Clients
order by FullName

Data > Bound Columnプロパティが に設定されていることを確認します2。このフィールドに顧客 ID を取り込む必要があります。また、Format > Column Countが であることを確認し、必要に応じてタブ2の幅を調整します。Format

ここで、メイン フォームの残りの部分に、顧客 ID フィールドを含むすべての顧客テーブル フィールドを入力します。今回は、それらすべてを基になるデータ ソースにバインドします。私が使用するショートカットは、パネルのリストからフィールドをドラッグ アンド ドロップすることField Listです ([デザイン] > [既存のフィールドを追加])。ただし、CustomerIDフィールドを非表示にします ( Format > Visible = No)。

最後に、コンボ ボックスで選択した顧客 ID にフォームを移動して、cmbCustomerのイベントを処理する VBA プロシージャを設定します。After Update

Private Sub cmbCustomer_AfterUpdate()
  set rst = Me.RecordsetClone

  rst.FindFirst "CustomerID = " & cmbCustomer
  Me.Bookmark = rst.Bookmark

  set rst = nothing
End Sub

ほら、コンボ ボックスから新しい顧客を選択するたびに、選択した顧客 ID にフォームが自動的にジャンプします。

于 2013-09-17T03:27:31.983 に答える
0

私は Access についてほとんど知りませんが、詳細フォームとデータシート フォームを作成する方法は有効だと思います。キーを介してそれらをリンクしないでください。ただし、ユーザーがデータシートの行をクリックすると、キー パラメーター (RecordID) が詳細フォームに渡され、再クエリがトリガーされます。

于 2015-10-26T05:25:47.537 に答える