|
|||||
ち〜な〜み〜に〜 |
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ACCESS(アクセス)データベースを使用し、フォームとADOにより期間でデータを抽出(日付のFROM〜TOで絞込)するサンプルです。 ADOというライブラリを使ったVBAプログラムに挑戦してみましょう。 クエリ版はこちらです。 DAO版はこちらです。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 ActiveX Data Objects X.X Liblary」を追加 されている事を確認します。X.XXの部分はADOのバージョン番号ですが、このサンプルでは2.1でした。 ' 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 Cn As ADODB.Connection Dim Rs As ADODB.Recordset Dim i As Long Dim widths As String Dim titles As String Dim datas As String Dim sql As String ' Set Cn = New ADODB.Connection ' Cn.Provider = "SQLOLEDB" ' Cn.ConnectionString = "Data Source=SQLサーバ名;" & _ ' "Database=DB名;" & _ ' "User ID=ユーザID;" & _ ' "Password=パスワード;" ' Cn.Open Set Cn = CurrentProject.Connection 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") & "' " 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") & "' " sql = sql & "受注日 <= #" & Format(Me.date2, "yyyy/mm/dd") & "# " End If sql = sql & "ORDER BY 受注日 " Set Rs = New ADODB.Recordset Rs.Open sql, Cn 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 Cn.Close Set Rs = Nothing Set Cn = 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の期間でデータ抽出(検索と言うべきか絞込と言うべきか)し、 抽出した受注番号、受注日、担当、金額を表示するという仕様にしました。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 |