• 締切済み

項目が一致したフィールドを追加

インポートしたデータを項目名が一致したフィールドを作業テーブルに追加クエリしたい。 ご回答ありがとうございます。是非教えてください。 ・インポートは先頭行をフィールド名として使ってません。 項目名_PP(20個)にある項目名とインポートした一時テーブルにある項目と一致したフィールドを作業テーブルに追加したいのですが取得した20フィールドを作業テーブルに追加をどうやっていいかわかりません。 作業テーブルも20項目あるのですが・・ご教授お願いします。 Set db = CurrentDb() Dim rs As DAO.Recordset Dim rstop As DAO.Recordset Dim SQL As String Dim SQLTop As String Dim iCntTop As Integer Dim sERRTXT As String Dim bFlg As Boolean Dim sSQLNM As String SQL = "項目名_PP" SQLTop = "一時テーブル" If F_RecordsetOpen(SQLTop, rstop, dbOpenSnapshot, dbReadOnly) Then If F_RecordsetOpen(SQL, rs, dbOpenSnapshot, dbReadOnly) Then Do Until rs.EOF For iCntTop = 0 To 254 sSQLNM = "" '項目名が一致したら(=必要項目)ループを抜ける If rstop.Fields(iCntTop) = rs![項目名] Then sSQLNM = rstop.Fields(iCntTop).Name Debug.Print sSQLNM Exit For End If Next iCntTop If Trim(sSQLNM) <> "" Then ' SQL = " INSERT INTO 作業テーブル ' 'sSQLNMでループで抜けたフィールドを追加作業テーブルに追加したいのですが・・・ Call F_ExecuteSQL(SQL) End If rs.MoveNext Loop End If Call S_RecordsetClose(rs) End If Call S_RecordsetClose(rstop) End Sub

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

変数dbも宣言せずにいきなり >Set db = CurrentDb() もないと思いますが。 >If F_RecordsetOpen(SQLTop, rstop, dbOpenSnapshot, dbReadOnly) Then >If F_RecordsetOpen(SQL, rs, dbOpenSnapshot, dbReadOnly) Then これは何のおまじないですか? レコードセットを開いたつもり、なのですか? あるいはF_RecordsetOpenは関数ですか? >Do Until rs.EOF レコードセットを開くと宣言せずにいきなりrs.EOFと 言われたらAccessであろうとVBであろうと文句を言われますが。 rsあるいはrstopとはどのレコードセット(テーブル、あるいはクエリ)ですか? 「取得した20フィールド」とあるのに何故 For iCntTop = 0 To 254 のように255もループする必要があるのか? あとは、わけのわからない >Call S_RecordsetClose(rs) >Call S_RecordsetClose(rstop) など。関数なのかあるいはレコードセットを閉じたつもり、 なのか。 以上、質問に対する疑問です。もしレコードセットの 扱いがまったくわからないのならば、適当にコードを 羅列して質問するよりは、 1 「インポートしたデータ」のテーブルのテーブル名、フィールド名   やフィールドの型 2 作業テーブルの名前、フィールド名など 3  「項目名_PP(20個)にある項目名」とは? こうしたことをきちんと質問に織り込むほうが まともな回答を受けやすいのでは、と思いますが。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

INSERT は、あくまでデータの変更であり、DML に分類されます。 テーブルの変更であれば DDL を実行する必要があります。 作業テーブルが作業用に作り直すテーブルなら、削除して Create Table してもいいでしょうし、カラムの変更は Alter Table です。データベース毎に方言があるので データベースの種類に合わせた SQL を実行して下さい。