aceess2000の処理で質問なのですが、今「テーブルA」というものがあるとします。

これを一件一件読んで処理を行おうとしています。
処理概要ですが、以下の通りです。

1.「テーブルA」の1件目を読む
2.読み込んだテーブルの「フィールド1」を「テーブルB」に出力する。
3.読み込んだテーブルの「フィールド2」と「フィールド3」を足した結果を「テーブルBに出力する」。
4.1に戻り、ファイルが終わるまで1~4のループ処理

テーブルAの一件に対して、テーブルBが二件出来る感じです。
DAOを使うと思うのですが、初心者のためどうしたらいいのか分かりません。
ソースを書いていただくと、次から雛形として使えますので、
面倒ですが実際の処理のソースの記述でお願いします。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2010/01/29 13:50:21
  • 終了:2010/01/29 18:26:24

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692010/01/29 14:49:46

ポイント60pt

DAOだとこんな感じですかね。

テーブルBにインデックスがついてたりすると挿入するフィールドが違ってくるけど

だいたいやってることはわかると思います。


Option Compare Database
Option Explicit

Sub Macro()
    Dim db As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    
    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("テーブルA")
    Set rs2 = db.OpenRecordset("テーブルB")
    
    Do Until rs1.EOF
        rs2.AddNew
        rs2.Fields(0) = rs1!フィールド1
        rs2.Update
        
        rs2.AddNew
        rs2.Fields(0) = rs1!フィールド2 & rs1!フィールド3
        rs2.Update
        rs1.MoveNext
    Loop
    
    Set db = Nothing
    Set rs1 = Nothing
    Set rs2 = Nothing
End Sub
id:digttahic

SALINGERさんありがとうございます(^o^)

お書きになったソースで質問があるのですが、

テーブルBに「フィールド1」と「フィールド2」と二つあって、

「フィールド1」に書き込みたい時は

rs2.Fields(0) = rs1!フィールド1

になって

「フィールド2」に書き込みたい時は

rs2.Fields(1) = rs1!フィールド1

になるということでしょうか?

2010/01/29 15:17:13
  • id:SALINGER
    「足した」ってことはフィールド2とフィールド3は数値でしたか。
    &じゃなくて+でした。
  • id:kn1967
    SQL 1つで出来るけど、どうしてもVBAなのかな?
    (Access2000でもFROM句にサブクエリを使う技があるので、
    UNIONしたものをテーブルBにINSERTすることもできるよ。)
  • id:SALINGER
    質問文中に、「フィールド1」や「フィールド2」のように書いてあったので、
    それをフィールド名として処理しました。
    レコードのフィールドを指定する方法として、名前と番号を使う方法があって、
    rs!フィールド1とrs.Fields(0)がそれに当たります。
    >rs2.Fields(1) = rs1!フィールド1になるということでしょうか?
    そうなります。
    実際はFields(0)をインデックスにして、主キーにした方がいいでしょうね。
  • id:digttahic
    kn1967さん
    サブクエリは私にはちょっと高度そうですので、
    次の機会によろしくお願い致します(^o^;

    SALINGERさん
    無事に処理できました!
    ありがとうございましたm(_ _)m
  • id:kn1967
    INSERT INTO テーブルB
    SELECT *
    FROM [
      SELECT フィールド1
      FROM テーブルA
      UNION ALL
      SELECT フィールド2 + フィールド3
      FROM テーブルA
    ]. AS Tx;

    [かっこ]. の最後のピリオドがミソ。これが無いと動かない。
    (かっこ)で括ってもOK。自動的に[かっこ].に変換される。

    SQLだと上のような感じで、VBA使うより遥かに簡単だし、
    SQL使うのが本来の方法だから、覚える努力はしましょう。
  • id:SALINGER
    イルカありがとうございます。
    今回はDAOについての質問でしたので関係ない話には言及は避けます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません