• ベストアンサー

AccessのDAOでフィールド名を配列に格納して・・・

Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。 Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable) Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable) Do Until Rs1.EOF Rs2.AddNew Rs2!FL1 = Rs1!名前 Rs2!FL2= Rs1!性別 Rs2!FL3= Rs1!郵便番号 Rs2!FL4= Rs1!住所    ・    ・ Rs2! FL50= Rs1! 50番目 Rs2.Update Rs1.MoveNext Loop 複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述するのが大変ですし、ものすごく長いコードになります。そこで、配列にしてやったらどうだろうかとこんなことをしてみましたがだめでした。 Dim I Dim FieldsName FieldsName=Array("名前","性別",・・・"50番目")            ・            ・ Do Until Rs1.EOF Rs2.AddNew For I=0 To 49 Rs2!フィールド(I) = Rs1!FieldsName(I) Next Rs2.Update Rs1.MoveNext Loop じゃあTebleDifのTd.Fields().Nameを使って・・・・やっぱり失敗しました。 For I=0 To 49 Rs2!フィールド(I) = Rs1!Td.Fields(I).Name Next やりたいこと分かっていただけますでしょうか?要するにフィールド名を配列の様なもので格納しておいて、レコードの追加時に50回ループさせてRS2のフィールドにいれたいのです。何か良い方法は無いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#2です。 一応自分なりにコードを作ってみました。 Dim I As Integer, Db As Database, Rs1 As Recordset, Rs2 As Recordset Set Db = CurrentDb Set Rs1 = Db.OpenRecordset("複写元") Set Rs2 = Db.OpenRecordset("複写先") Do Until Rs1.EOF Rs2.AddNew For I = 0 To 49 Rs2.Fields(I).Value = Rs1.Fields(I).Value Next Rs2.Update Rs1.MoveNext Loop Rs2.Close Rs1.Close Set Rs2 = Nothing Set Rs1 = Nothing Set Db = Nothing でいいと思います。ただし、前提条件として、テーブル「複写先」を作っていないとできませんが。 ご参考までに。

souta_n
質問者

お礼

重ね重ね親切丁寧なコーディング例ありがとうございます。 今後とも宜しくお願いします。

その他の回答 (2)

回答No.2

こんにちわ。 Dim I As Integr Set Rs1 = Db.OpenRecordset("複写元") Set Rs2 = Db.OpenRecordset("複写先") For I=0 To 49 Rs2.Fields(I).Value= Rs1.Fields(I).Value Next でいいはずです。ちなみに、Dbは、 Set Db = CurrentDb ってしてます(・・?

souta_n
質問者

お礼

できました、できました。ありがとうございます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Rs2.Fields(FieldsName(I)) = Rs1.Fields(FieldsName(I)) でどうですか。

souta_n
質問者

お礼

maruru01さん、いつもお世話になります。 やってみましたが、エラーになりFieldsNameが青色に、プロシージャ名の行が黄色になり、SubまたはFunctionが無いとのたまいよります。多分私のコーディングのどこかがおかしいのでしょう。#2の答えでうまく動きましたので、とりあえずそちらでやります。ありがとうございました。

関連するQ&A