<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > テーブルへレコード追加
  1 2



テーブルへレコード追加

さてさて、それでは次にお話しする内容なんですが・・・。

  ・テーブルへレコード追加
  ・テーブル内のレコード検索
  ・テーブル内のレコードの更新
  ・テーブル内のレコードの削除

と、大まかに分けて、こんな感じのことをお話していこうと思います。

でもこれふつうは、クエリでやることばかりです。

  ・追加クエリ
  ・選択クエリ(いわゆるふつうのクエリ)
  ・更新クエリ
  ・削除クエリ

これらのクエリについて、ほとんど知らない、クエリってよく存在価値がわからない、という方は、ここから先をお読みになる前に「クエリ」というものについて習得しておいてください。マクロのお話のところでも申しましたが、実際に使うかどうかは別にしてMS-Accessの基本機能である「クエリ」というオブジェクトのことをろくに知りもしないでVBAで処理なんて書けませんから・・・。

「自分はプログラムとかとても詳しいので、クエリってほとんど使わないんですよねーVBAでやったうんですよねー」なんて自慢げに話している人ははっきりいって勘違いもはなはだしい。ほんとこういう人って迷惑な存在です。こんな人の言っていることを鵜呑みにしてはいけませんよ。MS-Accessというソフトウェアを使用するなら、まずクエリを理解し、その上で、クエリでは難しそうなこと、返って複雑になってしまいそうなことを、VBAを使ったプロシージャとして作っていきます。最終的に、クエリでやるか、VBAで処理を作るかは、皆さんご自身の判断。でも、正しく判断するためには、両方の仕組みや役割をちゃんと知っておかなければならないはずです。

そういうつもりで取り組んでくださいね。
テーブルのデータを扱う処理を考えるなら、まず、各クエリをシッカリ理解すること、です。




まずは手始めに・・・・テーブルへレコードを1件追加する処理を作ってみましょう。
ここまでは↓みなさん、完成していますか?

変数rsが、現在の「商品テーブル」そのものに当たりますので、「rsに対して新規にレコードの追加」をやることになります。
新規にレコードの追加、という命令(メソッド)は、Addnewといいます。
rs.Addnew で、「rsに新規レコード追加をしろ」という意味になります。

もうちょっと細かく書きますと、

  rs.Addnew
    rs!フィールドA = 100
    rs!フィールドB = ”あいうえお”
    rs!フィールドC = #2002/1/15#
     ・
     ・
     ・
  rs.Update

と、こんな感じで、1レコード分の「フィールドへの追加」を書き並べた後、Updateというメソッドで締めくくります。
Updateというメソッドをやらないと、追加はされないので(ちょうど、レコードの保存みたいなもん)、これはもうセットで考えちゃったほうがいいと思います。

追加はレコード単位で行われます。フィールド単位で行われるのではないので、AddnewからUpdateの間に、1レコード分の必要な処理をすべて書く必要があります。
また、上の例でもわかるように、代入する先のフィールドが数値なのか文字なのか日付時刻なのかによって、リテラルの使用などが変わります。これも注意点ですね。



今回、練習用に作ったテーブルのデザインは、

   商品名 :テキスト型
   値段 :数値型(長整数型)

にしてあります。
それぞれのフィールドに直接値を代入するように、

こんなふうに↑書いてみました。

え?血塗られた盾って何かって?そんなことここでは言えませんよ。

2500000という金額は数字なので、なぜ2500000なのかは分からなくても、2500000という数値は、VBAにも理解できます。
でも、VBAには漢字やひらがなはわかりません。血塗られた盾を代入すると言われても、見たこともない字なので何をどうしていいかわかりません。そこで「なんでもいいからとにかく言われたとおりに代入しろよ」という意味で、” ”で囲みます。
・・・と、なんでダブルコーテーションで囲むか理解できてない方は、いらっしゃらないですよね。



AddnewからUpdateまでの間は、少し入れ子にして見やすくしたほうがいいかもしれないですね。

Tabキーを使ってもいいし、スペースをちょこちょことあけてもいいです。


あと、いろいろなことを考えると・・・。

こうして、フィールド名を半角のカギカッコで囲んどくといいかもしれません。
フィールド名に、記号とか、半角スペースとか使ってる人、いません?
ぜったいそういう名前をつけないようにしてらっしゃれば特に問題ないと思いますけれどね。。。。
+とか/とか入ってると、ちゃんとフィールド名として認識してくれないかもしれないじゃないですか。
なので、「これはフィールド名です!」とちゃんと分からせるために、カギカッコで囲んどくのです。

入力できたら、コンパイルして最終チェックです。



では、実験です。
このプロシージャ、実行してみましょう。
イミディエイトウィンドウにプロシージャ名を入力して、Enterキーを押しましょう。

単に、プロシージャ名を入れて、Enterキーを押せばOKですよ。プロシージャ名間違えたらエラーになりますからね。当たり前ですけど。
(イミディエイトウィンドウは、メニューバーの[表示]→[イミディエイトウィンドウ]で、画面のどこかに出てきます。っていうか最初から出てる可能性大)

特に何も問題がなければ、次の行にカーソルが移動して、それ以外は何も起こらないと思います。
ちゃんと実行できてるかなー。
Accessのウィンドウを開いて、[商品テーブル]を開いて見てみましょう。
入力されてます?

そしたら、あとは、

ここの部分を↑工夫すれば、いかようにも「レコードの追加」が可能になるわけですな。ふふふ。
当然ですけど、テーブルのフィールド数が多ければ多いほど、書くのも大変になります。
フィールド名は完結に、フィールドのデザインもシンプルに作っておくこと・・・これはすべてに於いて言えることかもしれないですね。