即効テクニック |
●データの抽出のためにレコードセットの操作を行います レコードセットとはオートフィルタのようなものと考えると理解の助けとなります。エクセルでフィルターをかけるときのことを最初に作成したデータを例に考えると、データは・・・ [伝票番号], [日付], [コード], [得意先], [金額] オートフィルタであれば、[日付]のフィルターを"オプション"を選び、"1999/11/21"以上"1999/12/20"以下としたり、あるいは、[コード]のフィルタで"1001"を選ぶとか、ということになります。この例を実際にレコードセットを利用してデータの抽出を行います。 1.宣言セクションの宣言文を追加
Dim MyRs as ADODB.Recordset Dim MySQL as String '抽出条件指定用
2.基礎編2のプロシージャの処理部分に追加します。宣言したレコード セット型変数に代入します。
Set MyRs = New ADODB.Recordset 'ここで抽出処理 MyRs.Close
3.検索条件を設定します。 "コード"が"1001"の"○×産業"という得意先の売上データを抽出するため、 宣言済みの変数MySQLに文字列として検索条件を格納します。
MySQL = "SELECT * FROM DATA WHERE コード=1001"
この"SELECT 〜"というのはSQL(Structured Qyery Lnaguage)という言語の構文です。 SQL文の意味は・・・ From DATA ⇒ "DATA" テーブルから "*" ⇒ (すべての列項目)を WHERE ⇒ 条件(WHERE以下)に従って SELECT ⇒ 抽出 SELECT * FROM テーブル名 WHERE 条件 条件の部分がエクセルのフィルタでいうオプションの設定になります。 上記の検索条件に従ってデータを取り出します。 MyRs.Open MySQL, MyCon '接続を利用して条件を設定し、レコードセットを開く Do Until MyRs.EOF 'EOF(End Of File)までループ Debug.Print MyRs!伝票番号, MyRs!日付, MyRs!コード, MyRs!得意先, MyRs!金額 MyRs.MoveNext '次の行(レコード)に移る Loop (ポイント) 1.レコードセットのオープン Openメソッドの引数として、抽出条件を格納した変数(MySQL)と接続(MyCon)を指定 =>構文: レコードセット型変数.Open( 検索文字列、現在の接続をあらわす変数) 2.列項目の指定 => レコードセット!列項目(フィールド) 3.次の行に移る => レコードセット.MoveNext (サンプル)
'宣言セクション Const MyPath = "C:\My Documents\データベース.mdb" Dim MyCon As ADODB.Connection Dim MyRs As ADODB.Recordset
'テスト用プロシージャ Sub AccessDatabase() Dim MySQL As String Set MyCon = New ADODB.Connection MyCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & MyPath MyCon.Open Set MyRs = New ADODB.Recordset '**************抽出開始**************************** MySQL = "SELECT * FROM DATA WHERE コード=1001" MyRs.Open MySQL, MyCon Do Until MyRs.EOF Debug.Print _ MyRs!伝票番号, MyRs!日付, MyRs!コード, MyRs!得意先, MyRs!金額 MyRs.MoveNext Loop '***************抽出終了*************************** MyRs.Close MyCon.Close End Sub
サンプル実行後イミディエイトウィンドウに出力されていることを確認してください。 ●いつからいつまでの間、という指定をしたい場合には フィールド名 BETWEEN 〜 AND〜という指定の仕方をします。 ※日付は"#"でくくるようにします。 (例)SELECT * FROM DATA WHERE 日付 BETWEEN #2000/6/01# AND #2000/6/20# これを応用すると、複数条件の間を"AND"で結んで以下のような検索ができます。 6/1〜6/20までの売上データの中で、得意先コード"1001"の得意先データを抽出するような場合・・・ (例)WHERE コード=1001 AND 日付 BETWEEN #2000/6/01# AND #2000/6/20#" のようになります。