|
|||||
ち〜な〜み〜に〜 |
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ACCESS(アクセス)データベースを使用し、フォームとDAOにより期間でデータを抽出(日付のFROM〜TOで絞込)するサンプルです。 DAOというライブラリを使ったVBAプログラムに挑戦してみましょう。 クエリ版はこちらです。 ADO版はこちらです。SQLサーバーとも接続出来ます。 実行結果はこんな感じです。2007/06/01〜2007/08/31までの受注担当者と受注金額の一覧です。 (1)まずサンプルのテーブルを作成します。テーブルのデザインビューはこんな感じです。 テーブル名は「受注テーブル」にしてください。 受注番号(テキスト型)、受注日(日付/時刻型)、受注担当(テキスト型)、受注金額(数値型) 主キー(鍵のマーク)も付けましょう。主キーは重複出来ません。 (2)サンプルのテーブルにデータを入力します。データシートビューはこんな感じです。 抽出(絞込)が上手くいったかどうか判断出来るように日付を散りばめて。 (3)クエリは使用しません。データ抽出はVBAで行います。 (4)フォームを作成します。 テキストボックス(date1、date2と命名)とリストボックス(list1と命名)を追加します。 date1、date2、list1はラベル名では無く変数名なので注意してください。プロパティで開いた時の名前です。 フォームのデザインビューはこんな感じです。 (5)フォームのフォーム(詳細では無い)のプロパティはこんな感じです。 「コードセレクタ=いいえ」と「移動ボタン=いいえ」を設定した方が良いでしょう (イメージ画像はありませんが、date1とdate2のIME入力モードをオフにした方が使いやすいです) (6)フォームをデザインビューで開いて、受注日Fromを右クリックし「イベントのビルド」を選択します。 「コードビルダ」を選択し、以下のVBAコードを入力します。 また、「ツール」メニューの「参照設定」に「Microsoft DAO X.XX Object Liblary」を追加します。 X.XXの部分はDAOのバージョン番号ですが、このサンプルでは3.6を使いました。 ' VBA---↓↓↓↓-------------------------------------------------- Private Sub date1_BeforeUpdate(Cancel As Integer) DbSel End Sub Private Sub date2_BeforeUpdate(Cancel As Integer) DbSel End Sub Private Sub Form_Load() DbSel End Sub Private Sub DbSel() Dim Db As DAO.Database Dim Rs As DAO.Recordset Dim i As Long Dim widths As String Dim titles As String Dim datas As String Dim sql As String 'Set Db = DBEngine.OpenDatabase( _ ' "", False, False, _ ' "ODBC;Driver={SQL Server};" & _ ' "Server=SQLサーバ名;Database=DB名;UID=ユーザID;PWD=パスワード;") Set Db = CurrentDb() sql = "" sql = sql & "SELECT * FROM 受注テーブル " If Me.date1 <> "" Or Me.date2 <> "" Then sql = sql & "WHERE " End If If Me.date1 <> "" Then sql = sql & "受注日 >= #" & Format(Me.date1, "yyyy/mm/dd") & "# " End If If Me.date1 <> "" And Me.date2 <> "" Then sql = sql & "AND " End If If Me.date2 <> "" Then sql = sql & "受注日 <= #" & Format(Me.date2, "yyyy/mm/dd") & "# " End If sql = sql & "ORDER BY 受注日 " Set Rs = Db.OpenRecordset(sql) widths = "" titles = "" list1.RowSourceType = "Value List" For i = list1.ListCount - 1 To 0 Step -1 list1.RemoveItem i Next i Do While Rs.EOF = False If titles = "" Then list1.ColumnHeads = True list1.ColumnCount = Rs.Fields.Count For i = 0 To Rs.Fields.Count - 1 If widths <> "" Then widths = widths & ";" widths = widths & "2.54cm" If titles <> "" Then titles = titles & ";" titles = titles & Rs.Fields(i).Name Next i list1.ColumnWidths = widths list1.AddItem titles End If datas = "" For i = 0 To Rs.Fields.Count - 1 If datas <> "" Then datas = datas & ";" datas = datas & Rs.Fields(i).Value Next i list1.AddItem datas Rs.MoveNext Loop Rs.Close Db.Close Set Rs = Nothing Set Db = Nothing End Sub ' VBA---↑↑↑↑-------------------------------------------------- (7)完成です。 ACCESS(アクセス)のフォームとクエリを使用し期間抽出するサンプル プログラム初心者には難しいVBAは1行だけ「リストボックス名.RowSource = "クエリ1"」・・・ ACCESS(アクセス)のフォームとDAOを使用し期間抽出するサンプル DAOというライブラリを使ったVBAプログラムに挑戦してみましょう・・・SQLサーバーも・・・ ACCESS(アクセス)のフォームとADOを使用し期間抽出するサンプル ADOというライブラリを使ったVBAプログラムに挑戦してみましょう・・・SQLサーバーも・・・ ACCESS(アクセス)のテーブルとEXCEL(エクセル)を使用し期間抽出するサンプル1 ACCESS(アクセス)の抽出データをEXCEL(エクセル)のシートに取り込むサンプル・・・ ACCESS(アクセス)のテーブルとEXCEL(エクセル)を使用し期間抽出するサンプル2 ACCESS(アクセス)の抽出データをEXCEL(エクセル)のシートに取り込むサンプル・・・ 今まで色々なソフトウェアの勉強をして来ましたがACCESSの勉強をした事は有りませんでした。VBもVBAも似たようなものだと思っていました。 ある時、ACCESSのデータを期間抽出する事になったのですが、意外と難しい事に気付きました。なぜ今、ACCESSなのか?と思いつつ経験不足 を否定出来ませんでした。そこで、「ACCESS(アクセス)のフォームとクエリを使用し期間抽出するサンプル」を作ろうと思いました。初心者は プログラムに恐怖心を持っているかもしれないので、「プログラム初心者には難しいVBAは1行だけ」というフレーズを付けてみました・・・ しかしACCESSデータベースを使っていてVBAを避けて通れるとは思えないのでDAO、ADOのサンプルも用意しました。ADOが必要だと思った理由は、 今はACCESSで充分でも将来的にはSQL SERVERやORACLEの存在が無視出来ないと思うからです。業務分野としては、想像しやすいストーリーとして 受注業務(営業業務)を採用しました。受注テーブルの日付カラムをFROM〜TOの期間でデータ抽出(検索と言うべきか絞込と言うべきか)し、 抽出した受注番号、受注日、担当、金額を表示するという仕様にしました。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 |