- ベストアンサー
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のフィールドにいれたいのです。何か良い方法は無いでしょうか。
- みんなの回答 (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 でいいと思います。ただし、前提条件として、テーブル「複写先」を作っていないとできませんが。 ご参考までに。
その他の回答 (2)
- kinokoyasan2004
- ベストアンサー率59% (16/27)
こんにちわ。 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 ってしてます(・・?
お礼
できました、できました。ありがとうございます。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 Rs2.Fields(FieldsName(I)) = Rs1.Fields(FieldsName(I)) でどうですか。
お礼
maruru01さん、いつもお世話になります。 やってみましたが、エラーになりFieldsNameが青色に、プロシージャ名の行が黄色になり、SubまたはFunctionが無いとのたまいよります。多分私のコーディングのどこかがおかしいのでしょう。#2の答えでうまく動きましたので、とりあえずそちらでやります。ありがとうございました。
お礼
重ね重ね親切丁寧なコーディング例ありがとうございます。 今後とも宜しくお願いします。