Lesson8 非連結フォームからレコードを操作する【レコード追加編】

テーブルを1つ、フォームを1つ用意します。

テーブルの名前は、基本情報とします。テーブルのフィールドは以下のとおり設定してください。

なお、テーブルのフィールドには書式設定やIMEの入力モードを指定する箇所がありますが、非連結フォームを使用する場合、これらは使用しません。

仮に使用してもフォームには反映しません。


フィールド名属性備考
ID長整数型各人ごとに振られたIDを保存します。
氏名テキスト型漢字氏名を保存します。
シメイテキスト型カナ氏名を保存します。
生年月日日付/時刻型生年月日を保存します。

続いてフォームを作ります。フォームの名前は入力画面とします。

フォームには4つのラベル、4つのテキストボックス、1つのボタンを設置しました。

テキストボックスの名前は上から txt_ID、txt_氏名、txt_シメイ、txt_生年月日。

ボタンの名前は、btn_追加 とします。

 

txt_生年月日には 書式に日付(S) をセットし、日付が入力されるようにしておきます。

 

フォームをデザインビューで開き、「クリック時」へ[イベントプロシージャ]を設定します。

 

設定できたら右にある「・・・」ボタンをクリックすると、VBEが起動しますので、以下のとおりコードを記述してください。

なお、Access2000、Access2002はデーターベースとのやり取りにADOを使用しているため、このページの下にある設定が必要です。

Option Compare Database
Option Explicit

Dim db As DAO.Database
Dim strSQL As String

Private Sub btn_追加_Click()

Set db = CurrentDb
strSQL = "insert into 基本情報 (ID,氏名,シメイ,生年月日) " & _
        "values(" & Me.txt_ID & ",'" & Me.txt_氏名 & "','" & Me.txt_シメイ & "',#" & Me.txt_生年月日 & "#) "

db.Execute strSQL
End Sub

フォームビューに戻り、データを入力しましょう。

ID、氏名、シメイ、生年月日すべてが入力できたら追加ボタンを1回だけ押します。

今回のコードは入力チェックやエラー時の処理を入れていませんので、入力もれやミスの無いように入力してください。とくに生年月日はAccessが理解できる日付の形(西暦表示で年、月、日は/区切り)になっているか注意してください。

 

ではテーブル「基本情報」を見てみましょう。

なんと!フォームに入力したデータが追加されていますね。

レコードの追加ができました。

 

解説です

Dim db As DAO.Database →変数 db はデーターベースとして宣言します。
Dim strSQL As String →変数 strSQL を文字列として宣言します。
この部分は、DAO を使うための定型文と考えてください。
Set db = CurrentDb → DAO が操作するデーターベースを指定します。
CurrentDb とは、自身が保存されているmdbファイル(accdbファイル)を指します。
dbに他のmdbファイルを指定することで、別ファイルのデーターベースのレコードを操作することもできます。
strSQL = "insert into 基本情報 (ID,氏名,シメイ,生年月日) " & _
        "values(" & Me.txt_ID & ",'" & Me.txt_氏名 & "','" & Me.txt_シメイ & "',#" & Me.txt_生年月日 & "#) "

変数 strSQL に SQL文を組み立てて代入しています。

SQL文とは、データーベースを操作する命令文のことです。
ここでは、レコードの追加を行うので、追加クエリに相当するSQL文を組み立てています。

insertinto■[レコードを追加するテーブル名]■
([データを入力するフィールド名1],[データを入力するフィールド名2],…[データを入力するフィールド名n])■ 
values([フィールド名1に入力するデータ],[フィールド名2に入力するデータ],…[フィールド名nに入力するデータ])

■は半角スペースを表しています。

Me というキーワードがでてきました。これは、フォームに組み込まれたモジュールが使えるキーワードで、フォームの名前を Me で置き換えることができます。

Me.txt_ID とは、このフォーム(入力画面)にある txt_ID というテキストボックスの値を指しています。

ちなみに全く省略しない記述の仕方は、[Forms]![入力画面]![txt_ID].value です。

この例では変数 strSQL に代入された値は、

insert into 基本情報 (ID,氏名,シメイ,生年月日) values(1,’てすと 太郎’,’テスト タロウ’,#2014/08/10#)となります。

SQL文のルールですが、テキスト型のフィールドに値を入れる場合、「 ‘ 」(シングルクォーテーション)で値を囲みます。

同様に、日付/時刻型のフィールドに値を入れる場合、「#」(シャープ)で値を囲みます。

最後に、組み立てたSQL文をデーターベースに対して実行します。これで、指定したテーブルにレコードが追加されます。

db.Execute strSQL →指定したデーターベースに対して、変数 strSQL に代入したSQL文を実行せよ、という命令です。

では、次回は追加したレコードに対し、更新クエリを実行してレコードの内容を変更してみましょう。

Access2000、Access2002 ユーザー の設定について

[ツール]-[参照設定]を選択します。

その後、優先順位の上矢印をクリックし、Micosoft DAO 3.6 Object Library の優先順位を上げれるだけ上げます。

以上で、Access2000、Access2002で DAO を使用する準備ができました。

 

 

コメントをどうぞ!