【課題】
PREF_CD が 40 以上の都道府県名の前後に、半角の「*」アスタリスクを、自動的に挿入する。
Accessではいろんな方法が用意されていて、答えは一つではありません。すぐに思い付く方法としては、以下の3つがあります。
1.更新クエリを使う方法
2.プログラムで処理する方法
3.SQL文を使う方法
「更新クエリを使う方法」は、プログラミングが不要で、GUIで視覚的にクエリをデザインするだけで簡単にできます。(初心者向き)
しかしこの講座は VBA のプログラミングが目的なので、まずは「プログラムで処理する方法」で考えてください。
後に「SQL文を使う方法」に書き換えることで、SQL文の便利さと、強力なことがより実感できます。
いきなり「プログラムを作ってください」と言われても、どうしたらよいかわからないと思うので、準備段階までは一緒にやりましょう。
【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」をコピーして、「T01Prefecture2」を作成します。
*レコードの更新は、T01Prefecture2 に対して行ないます。(重要)
【2】VBE を起動して、新しく標準モジュール test7 を作成します。
*VBEは「Altキー」+「F11キー」で起動できます。
【3】標準モジュールの「test7」に以下のように、Subプロシージャ dispDataTest() を追加します。
Sub dispDataTest()
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("T01Prefecture2")
Do Until rs.EOF
Debug.Print rs.Fields("PREF_CD") & " " & rs.Fields("PREF_NAME")
'Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
ほとんど dispData() と同じなので、コピーで作成してかまいません。違う部分だけ赤枠で囲んでいます。テーブルは「T01Prefecture2」であることに注意してください。
【4】「test7」にもう一つ Subプロシージャ editDataTest() を追加します。
Sub editDataTest()
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("T01Prefecture2")
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
Debug.Print "レコードを更新しました。"
dispDataTest
End Sub
*赤枠で囲んである部分に注意してください。(重要)
【5】課題の準備ができたので、途中のプログラムを考えてみてください。
editDataTest()は未完成なので、完成させてください。今まで学習してきたプログラムを組み合わせるだけで可能です。
【注意点】
PREF_NAMEのフィールドサイズは「10文字」までなので、課題のプログラムを何度も実行すると、文字数がオーバーしてエラーが出ます。その場合は、「T01Prefecture2」を新しくコピーし直してください。
【ヒント】
以下にヒントを掲載しますが、ほとんど答えのようなものなので、できるだけ見ないで作ってください。
(1)追加するプログラムは8行です。書き方によっては増減あり。
(2)処理を繰り返す
Do Until Loop ステートメント
(3)EOF(End Of File)はレコードの終端を表す記号
rs.EOF
(4)処理を分岐する
If Then End If ステートメント
(5)条件式で 40以上
rs!PREF_CD >= 40
(6)次のレコードに移動する
rs.MoveNext
(7)現在のレコードのフィールドの値を取得する
rs!PREF_NAME
(8)値を設定するには代入する
rs!PREF_NAME = ここに値
(9)編集開始と更新
rs.Edit
ここに処理
rs.Update
(10)文字列を連結するには「&」アンパサンドを使う
"あいう" & "えお"