|
ACCESS(アクセス)のフォームとDAOを使用し期間抽出するサンプル
|
| ち〜な〜み〜に〜 |
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
![]() 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の期間でデータ抽出(検索と言うべきか絞込と言うべきか)し、 抽出した受注番号、受注日、担当、金額を表示するという仕様にしました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
![]() |