生涯エンジニアの備忘録

アクセスカウンタ

zoom RSS エクセルVBAとアクセスDBの使い方(5) ーアクセスDBー

<<   作成日時 : 2017/02/06 23:47   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

今回はいよいおアクセスDBについての説明です。
マイクロソフトオフィスアクセス2007を起動すると、下記のような画面が現れます。アクセス2013ではまた違った画面が現れますが、選択するのは、空のデータベースで同じです。
画像

ファイル名に会議室予約と入力し、開くボタンをクリックすると、次のようなテーブルのフィールド構成画面が現れます。
画像

黄色に表示されている、新しいフィールドの追加をダブルクリックすると、そこのフィールドが入力モードになり、フィールド名が入力できます。会議室予約の予約者名をいれます。
画像

同じように、会議室、目的、利用日、開始時間、利用時間とフィールド名を設定していきます。
フィールドのデータ型はデフォルトではテキスト型になっているので、利用日は日付ですので、データシートメニュー内のデータ型で日付/時刻型を選択します。
画像

データ型の下に表示形式がありますので、日付(標準)を選択します。同様に開始時刻も利用時間もデータ型を日付/時刻型にして表示形式を時間(S)にします。時間(L)にすると秒表示までしますが、会議室予約ではそこまで必要ないでしょう。
画像

これでテーブルのフィールドの設定は終わりました。
各フィールドにはデータがそのまま入力できます。特に、日付/時間型のデータ位置をクリックすると右側にカレンダアイコンが現れます。日付のときは、このアイコンをクリックするとカレンダが現れますので、日をクリックすると、日付がデータとしてはいります。
直接入力するよりも、エクセルVBAから入力しますので、これでアクセスDBの設定は終了し、VBAに戻ります。
会議室予約のアクセスファイルができたことを確認しておいてください。
エクセルと同じフォルダに置かないとプログラムが面倒になります。

さて、ここでエクセルVBAを表示します。入力フォームの予約コマンドボタンを修正します。これまでは入力した内容をエクセルシートに書き出すようにしていましたが、今度はアクセスDBに書き出すようにします。
コマンドボタンのSubを次のように変更します。

Private Sub CommandButton1_Click() '予約ボタン
Dim adoCON As New ADODB.Connection
Dim adoRS As New ADODB.Recordset
Dim strSQL As String
Dim odbdDB As Variant
Dim wSheetName As Variant
Dim i As Integer
Dim time_rs, time_re, time1_rs, time1_re As Date

time_rs = CDate(TextBox5.Text)
time_re = time_rs + CDate(TextBox6.Text)

'カレントディレクトリのデータベースパスを取得
odbdDB = ActiveWorkbook.Path & "\会議室予約_be.accdb"

'データベースに接続する
adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=" & odbdDB & ""
adoCON.Open
'DB接続用SQL
strSQL = "SELECT テーブル1.* FROM table1 WHERE 使用日 = #" & TextBox4.Text & "# AND 会議室 = '" & TextBox2.Text & "';"
'レコードセットを開く
adoRS.Open strSQL, adoCON, adOpenDynamic
If Not adoRS.EOF Then

'テーブルの読み込み
Debug.Print strSQL; adoRS!使用日;
Do Until adoRS.EOF

Debug.Print time_rs; time_re; time1_rs; time1_re
If (time_rs >= time1_rs) And (time_rs < time1_re) Then
MsgBox ("開始時間がすでに予約された時間帯に重なっています")
Timezone.Show
Exit Sub
End If
If (time_re <= time1_re) And (time_re > time1_rs) Then
MsgBox ("終了時間がすでに予約された時間帯に重なっています")
Timezone.Show
Exit Sub
End If
adoRS.MoveNext
   End If
Loop

adoRS.MoveLast

'追加処理
strSQL = "INSERT INTO テーブル1(予約者氏名,会議室, 目的, 使用日, 開始時刻, 使用時間, 予約日) VALUES('" & _
TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & _
TextBox6.Text & "','" & Now() & "')"

adoCON.Execute strSQL
adoCON.Close
'クローズ処理
adoRS.Close
Set adoRS = Nothing
adoCON.Close
Set adoCON = Nothing
End Sub

大きな流れは、まず、開始時間と終了時間をtime_rsとtime_reにいれます。アクセスDBから利用日、会議室のレコードのみ抜き出します。既存の予約レコードを1レコード読み出し、その開始時間と小領事館をtime1_rsとtime1_reとして、 time_rs,time_reとを比較します。新しい時間帯がすでに予約された時間帯と重なっていなければ、空きがあるということですから、予約します。
DBでは、SQLというインタフェースが標準化されていて、Oracle、MySQL,ProgreSQL,アクセスであろうと、操作が統一されています。もともとIBMのDB2用のインタフェースだったと思いますが、非常に使いやすい文法です。
ここでは、基本的なコマンドである、SELECTとINSERTを使いました。
SELECTはDBから条件に合ったレコードを選び出してくるものです。条件の指定が非常に柔軟に組めるので、エクセルでフィルタをかけるよりもずっと複雑なことが簡単にできます。
INSERTはレコードの追加ですが、DBの各フィールドとエクセルVBAのフォームの各コントロールの値を結び付け、書き込みます。
非常に簡単なプログラムでDBを操作できることがわかるでしょう。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
エクセルVBAとアクセスDBの使い方(5) ーアクセスDBー 生涯エンジニアの備忘録/BIGLOBEウェブリブログ
文字サイズ:       閉じる