テーブルを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文を組み立てています。 insert■into■[レコードを追加するテーブル名]■ ([データを入力するフィールド名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 を使用する準備ができました。
コメントをどうぞ!
この説明通りにまったく一緒のものを作成したのですが、テーブルに追加されません。
どうしてでしょうか。
Aさん、コメントありがとうございます。
原因は色々考えられるのですが、すぐに回答は難しいです。
ですが、私も最初の頃は、思ったように実行されなかった経験があります。
そこで、私がハマったところを中心にチェックをお願いします。
コマンドボタンクリック時にイベントプロシージャを設定していますか?
→ボタンにコードが割り当てられていなくて、そもそも実行されていないことがありました。
追加ボタンを押すと、何かエラーが表示されますか?もし、されるのであれば、そのメッセージを教えてください。解決の糸口になるかもしれません。
ここまでがOKであれば、SQL文に問題があるかもしれません。
テーブルのフィールド名とSQL文のフィールド名は一致していますか?
→テーブルのフィールド名の前に空白が入っていたりしませんか?シメイは全角のカタカナになっていますか?
SQL文の空白は、半角になっていますか?
SQL文中のvaluesの前に半角スペースはありますか?
テキスト型のフィールドへ追加するときは、値を半角のシングルクォーテーションで囲むルール、日付型のフィールドへ追加するときは、値を半角の#で囲むルールがあります。
例: ’てすと 太郎’ #2014/08/10#
これで問題なければ、1項目ずつ追加してみてください。
フォーム上のtxt_IDに適当な数値を入力した状態で
strSQL = “insert into 基本情報 (ID) ” & _
“values(” & Me.txt_ID & “) ”
db.Execute strSQL
を実行してみてください。
このSQL文を実行すると、基本情報テーブルのIDフィールドにtxt_IDに入力した値が入力され、その他のフィールドは空白が入力されます。
これがうまくできれば、フォーム上のtxt_IDに適当な数値を入力し、txt_氏名に名前を入力した状態で、
strSQL = “insert into 基本情報 (ID,氏名) ” & _
“values(” & Me.txt_ID & “,'” & Me.txt_氏名 & “) ”
db.Execute strSQL
を実行してみてください。
このSQL文を実行すると、基本情報テーブルのIDフィールドにtxt_IDに入力した値が入力され、氏名フィールドにtxt_氏名に入力した名前が入力され、その他のフィールドは空白が入力されます。
このようにして、どこのフィールドを追加しようとしたときにエラーが生じるか検証してみてください。
よろしくお願いします。