ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Access – レコードソースを設定せずSQL文でデータを絞り込みVBAで動的にテーブルのレコードを取得する

with 3 comments

Accessでフォームやレポートを作りデータを表示するとき、一般的にはレコードソースをフォームのプロパティに指定するが、レコードソースを設定せずにフォームやレポートを作成し、VBAで動的にレコードソースを指定するとSQL文が使える。SQLに熟練しているなら、この方法で自由にレコードソースを扱うことができ、応用しやすい。

レコードソースを設定せずにフォームを作りVBAでSQL文を書き動的にデータを取得する方法の概要は以下のページを見てほしい。

「Access – レコードソースを設定せずVBAで動的にテーブルのレコードを取得する」
https://matsumotoyoshio.wordpress.com/2011/12/25/access-%e3%83%ac%e3%82%b3%e3%83%bc%e3%83%89%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%9b%e3%81%9avba%e3%81%a7%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae%e3%83%ac%e3%82%b3/

さて、ここで使うSQL文にデータを絞り込むものを使ってみよう。たとえば「男」のデータだけ取得する次のようなSQL文だ。

——————————————————————————–

select 学籍番号,氏名,性別 from 生徒1 where 性別 = 男

——————————————————————————–

まずテーブル「生徒1」に次のようなデータを用意する。

Access_SQL_016

<Fig 1 : テーブル「生徒1」に用意したサンプルデータ>

フォームの作成でレコードソースを指定せずに「生徒フォーム」を作成する。新しいフォームができたらデザインビューにし、「フォームヘッダー/フッター」を作り、フォームの既定のビューを「帳票フォーム」に変更する。フォームヘッダーと詳細の高さを調節する。

次に「詳細」エリアにテキストボックスを3つ作る。各テキストボックスは、プロパティの「データ」タブ「コントロールソース」に、それぞれ表示させたいフィールド名「学籍番号」、「氏名」、「性別」を記述する。通常レコードソースを設定したフォームの編集では、ここでテーブルのレコードソースが表示されドロップダウンリストから選択できるが、ここではレコードソースが設定していないのでリスト表示はされない。キーボードから文字入力でフィールドを設定しておく。

そしてフォームヘッダーには3つボタンを作成する。ボタンの「表題」はそれぞれ「全部」、「男だけ」、「女だけ」としておこう。

Access_SQL_017

<Fig 2 : データを取得するフォームをデザインする>

そしてボタンのクリックイベントに以下のVBAコードを記述する。このときSQL文では、スタティックな文字列はシングルクォーテーション「’」で囲む。

———————————————————————————

Private Sub コマンド1_Click()
    Me.RecordSource = "select 学籍番号,氏名,性別 from 生徒1"
End Sub

Private Sub コマンド2_Click()
    Me.RecordSource = "select 学籍番号,氏名,性別 from 生徒1 where 性別 = ‘男’"
End Sub

Private Sub コマンド3_Click()
    Me.RecordSource = "select 学籍番号,氏名,性別 from 生徒1 where 性別 = ‘女’"
End Sub

———————————————————————————

Access_SQL_018

<Fig 3 : ボタンのクリックイベントにVBAでSQL文を書く>

このフォームを実行すると、フォームを開いたときにはレコードソースが設定されていないのでテキストボックスにはエラーが表示され、「全部」のボタンをクリックすると全てのデータが、「男だけ」では男のデータだけ、「女だけ」では女のデータだけが表示される。

Access_SQL_019

<Fig 4 : フォームを開いたところ>

Access_SQL_020

<Fig 5 : 「全部」ボタンをクリックして全件データを取得した>

Access_SQL_021

<Fig 6 : 「男だけ」ボタンをクリックして男のデータだけを取得した>

Access_SQL_022

<Fig 7 : 「女だけ」ボタンをクリックして女のデータだけを取得した>

Written by Yoshio Matsumoto

2011年12月25日 @ 3:25 PM

コメント / トラックバック3件

Subscribe to comments with RSS.


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。