2016-11-25 8 views
0

私はおそらく愚かな質問をお詫びしますが、私は必要なものを検索するためにどの単語を使用するのかはすでに知りません。私は良いプログラミング経験を持っていますが、Accessにはかなり新しいです。ユーザーがテーブル内の複数のレコードを取得する方法

私はコントロール付きのフォームを持っています。また、サブフォームには人の連絡先の読み取り専用リストがあります。このリストは、複数のテーブルからの動的クエリによって生成されるので、設計時にはすべてのフィールドの数と名前はわかりません。ユーザーはリストから複数の連絡先を手動でピックアップして1つの電子メールを送信できるようにする必要があります。

私はテーブルコントロールを使用して、ユーザーが複数のレコードを(通常はCtrlキーを使用して)選択できるようにしました。しかし、Accessデータシートでは、連続選択は許可されていることが判明しました。

次に、編集可能なチェックボックス列を読み取り専用テーブルに追加して、ユーザーが目的の行をマークできるようにすることを考えました。しかし、私はAccessでこれを行う方法を発見していない。 FieldsコレクションのAppendメソッドは、テーブルやインデックスに対してのみ使用できますが、クエリやレコードセットでは使用できないようです。

また、サブフォームを削除し、プロパティmultiselect = extendedのリストボックスにデータを表示するためのアドバイスも読んでいます。しかし、この場合、ユーザーはテーブルの利点を失います。つまり、列の移動やサイズ変更、データのソートやフィルタリングはできません。

私は意思決定が非常にシンプルでなければならないと感じていますが、Accessでこの機能を実装する従来の方法はわかりません。お願い助けて。

答えて

1

データシート(フィルタ、ソート、サイズ変更用)が必要な場合は、編集可能なチェックボックスが実際には唯一のオプションです。

この列は、元のテーブルの一部でも、IDとチェック列の結合テーブルを作成して、ベーステーブルのすべてのレコードのIDを追加することもできます。

サブフォームでは、チェックボックスを除くすべてのコントロールをLocked = Trueに設定できます。

+0

一時テーブルを作成して、データシートにデータを取り込むたびにそのテーブルを埋める必要がありますか?それは私のためにかなり奇妙に聞こえる。それは本当にAccessでの通常の練習ですか? – Sergey

+0

はい。 - "通常の"練習IMHOは、複数選択のリストボックスです。しかし、データシートの追加機能が必要な場合は、任意のレコードを選択するための編集可能な列が必要です。 – Andre

1

これは、サブフォームのRecordsetCloneプロパティを利用することで実行できます。あなたのメインフォーム上のリストボックスに名前アクティブな行の連絡先と場所を取るボタンコントロールを介して、メインフォーム上でこれを置くことができる

Sub GetSelectedValue() 

Dim rs as Recordset 
Dim sContact as String 

Set rs = Me.[SubFormName Goes Here].Form.RecordsetClone  
rs.MoveFirst 
rs.Move Me.[SubFormName Goes Here].Form.SelTop - 1 
sContact = rs![Recordset Column Name Goes Here] 

Set rs = Nothing 
End Sub 

:ここでは一例です。ユーザーがすべての選択を完了したら、リストボックス内の名前から電子メールプログラムを実行できます。

+0

ありがとう、クレイグ。私はそれも良いアプローチだと思っていますが、私はすでにアンドレの提案によってそれを行っています。 – Sergey

+0

あなたのプログラムが好きなように動いている限り、すべてが良いです。 :-) –

関連する問題