- 締切済み
MSアクセスの表形式で、ボタンをクリック→データを抽出させるには‥
MSアクセスを使い、データを表形式で表示させています。 同じ日付のレコードが沢山あるのですが、本日分のみを表形式で一覧表示させるにはどうすればよいでしょうか。 また、例えばボタンをクリックすれば、表の中身だけが入れ替わり、 翌日分が表示される、という風にするにはどうすればよいでしょうか。 今はテーブルからクエリで本日分だけ抽出し、それを表示させているのですが、 前日、前々日、3日前‥と遡ろうとするとその分だけクエリを作成しないといけないので、 何かやり方が間違っていると思いますので‥。 ご教授のほど、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- sugao_chib
- ベストアンサー率59% (22/37)
こんにちは フォームのFilterプロパティを利用するとうまくいくと思います。 ・フォームのRecodeSouceに該当テーブルを指定する ・フォームのFilterに抽出条件を設定する ・フォームのFilterOnをTrueにする 本日分表示のためのボタンクリックイベントに Me.Filter = "HIZUKE = '" & Date & "'" Me.FilterOn = True 前日分表示のためのボタンクリックイベントに Me.Filter = "HIZUKE = '" & DateAdd("d", -1, Date) & "'" Me.FilterOn = True このままだとフォーム表示の際、テーブルの全レコードが表示されます。 最初から本日分を表示するならフォームロードイベントに本日分のFilter設定を行ってください。
少し、質問文を私なりに整理してみました。 <TEST> ID__日付___________DATA_1__DATA_2 1___2007/06/15__1A_1_____2A_1 2___2007/06/16__1A_2______2A_2 3___2007/06/16__1A_3______2A_3 4___2007/06/17__1A_4______2A_4 5___2007/06/17__1A_5______2A_5 これを、レコード移動ボタンを持たない帳票フォームに本日分を表示するようにしています。 しかし、これでは常に本日分しか表示されないので困っています。 そこで、表示[対象日]を配置しボタンで更新し、それにフォームを連動させようと考えています。 ・フォームヘッダーに抽出・表示する日付を示す[対象日]を配置。 ・その横に[→][←]の[cmdNextDay][cmdPreviousDay]というコマンドボタンも配置。 この辺りまでは考えつきましたが、以下の点が不明です。 1、フォーム起動時、[対象日]を本日に設定する方法。 2、フォーム起動時、[対象日]に対応したデータを表示する方法。 3、[対象日]が変更されたら、それに応じて再表示する方法。 さて、これだけのことですと、実は8行程度のVBAコードを書けば実現できます。 Option Compare Database Option Explicit Private Sub cmdNextDay_Click() Me.対象日 = Me.対象日 + 1 UpdateRecordSource Me.対象日 End Sub Private Sub cmdPreviousDay_Click() Me.対象日 = Me.対象日 - 1 UpdateRecordSource Me.対象日 End Sub Private Sub Form_Load() Me.対象日 = Date Me.RecordSource = "SELECT * FROM TEST WHERE 日付=#" & Date & "#;" End Sub Public Sub UpdateRecordSource(ByVal NewDay As Date) Me.RecordSource = "SELECT * FROM TEST WHERE 日付=#" & NewDay & "#;" Me.Requery End Sub さて、クエリを使い、かつ、VBA のコードを最小にするには一体どういう手を使ったらいいのでしょうか? ******************************************* Option Compare Database Option Explicit Private Sub cmdNextDay_Click() Me.対象日 = Me.対象日 + 1 Me.Requery End Sub Private Sub cmdPreviousDay_Click() Me.対象日 = Me.対象日 - 1 Me.Requery End Sub ******************************************* Me.対象日の既定値を利用して日付を設定すれば VBA コードは不要です。 ですから、書くべきコードは僅か4行。 クエリがフォームに配置されている[対象日]を参照している訳ですからリクエリすればOKという訳です。 つまり、No2 の回答が全てですよ。 <アドバイス> **** と **** との間の仕掛けをしてから、No2 さんの回答に従ってクエリを改造してみて下さい。 そして、上手くいかなかったら、そのクエりを[SQLビュー]モードで表示し、それを回答者に示して下さい。 そうすれば、一発で解決します。
- DexMachina
- ベストアンサー率73% (1287/1744)
> ボタンをクリックすれば、表の中身だけが入れ替わり、翌日分が表示される そのボタンが設置されているフォームの名前を「フォーム1」とし、日付を入力する テキストボックスとして『対象日』を新設したとすると、クエリの日付フィールドの 抽出条件を以下のようにすればよいと思います; Forms!フォーム1!対象日
- mame9999
- ベストアンサー率44% (90/203)
クエリの抽出条件を書く欄に (= 2007/06/16とか書きますよね) [日付を入れてください] と入れてみてください ([]←を忘れないでくださいね) between [日付FROM] and [日付TO] といれれば、複数連続日を抽出できます 何はともあれ[日付を入れてください]を試して 動きを確認してみてください
補足
すみません!説明不足でした! クリックまたはホイールマウスを回す度に次の日または前日が表示されていくようにしたいのです! アドバイスありがとうございました!
補足
説明不足で申し訳ありません‥。日を入力して検索、ではなく、クリックで表示、という形でやりたいと思っています。 よろしくお願いします。アドバイスありがとうございます。