• ベストアンサー

テーブルに追加できない

アクセス初心者です。 ACCESS2002で在庫DBを作成中ですが、レコードをテーブルに追加する処理がうまくいきません。 やりたいことは、 1.受払テーブルからレコードセットを抽出 (パラメータは在庫場所、開始日、終了日の3つで、明細表作成フォームから入力しVBAで利用)。 2.抽出レコードを仮テーブルに書込む。 3.仮テーブルのクエリをソースにして明細フォームを表示する。 1については、データが正しく抽出されていることをイミディエイトで確認しています。 しかし、仮テーブルに書き込む段階で次のエラーが発生し停止します。 「実行時エラー'-2147217904(80040e10)': 1つ以上の必要なパラメータの値が設定されていません。」。 問題個所のプロシージャは次の通りです。(フォーム読み込み時) cmd.commandtextでレコードセットを作成・・・ With rst cmd.CommandText = "DELETE * from T_temp2;" cmd.Execute Do Until rst.EOF cmd.CommandText = "INSERT INTO T_temp2 " & _          "(入力ID,払出日,略称,物品ID,払出元ID,払出先ID,払出)VALUES (" & _         .Fields("入力ID") & ", " & _          .Fields("払出日") & ", " & _         .Fields("略称") & ", " & _          .Fields("物品ID") & ", " & _         .Fields("払出元ID") & ", " & _          .Fields("払出先ID") & ", " & _         .Fields("数量") & ");" cmd.Execute .MoveNext Loop End With rst.Close: Set rst = Nothing cnc.Close: Set cnc = Nothing End Sub ご指導のほどよろしくお願いいたします。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

INSERT INTO T_temp2 SELECT .... FROM 受払テーブル WHERE .... として一括でT_temp2に書き込んでしまうのではダメなのですか。 Dim MySql As String MySql = "INSERT INTO T_temp2 (入力ID,払出日,略称,物品ID,払出元ID,払出先ID,払出) SELECT 入力ID,払出日,略称,物品ID,払出元ID,払出先ID,数量 FROM 受払テーブル WHERE ・・・・;" DoCmd.RunSQL MySql とか Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset rstはセットしてあるとして rs.Open "T_temp2", cn, adOpenKeyset, adLockBatchOptimistic, adCmdTableDirect Do Until rst.EOF 入力ID = rs.AddNew 払出日 = rst.Fields("入力ID") rs.払出日 = rst.Fields("払出日") rs.略称 = rst.Fields("略称") rs.物品ID = rst.Fields("物品ID") rs.払出元ID = rst.ields("払出元ID")  rs.払出先ID = rst.Fields("払出先ID") rs.払出 = rst.Fields("数量") rs.Update rst.MoveNext Loop では

jetstream
質問者

お礼

O_cyanさまいつもお世話になります。 早速回答いただきありがとうございました。 ADDNEWを使った方でうまく表示されるようになりました! ・・・ rs.Open "T_temp2", cnc, adOpenKeyset, adLockOptimistic Do Until rst.EOF rs.AddNew rs!入力ID = rst.Fields("入力ID") rs!払出日 = rst.Fields("払出日") rs!略称 = rst.Fields("略称") rs!物品ID = rst.Fields("物品ID") rs!払出元ID = rst.Fields("払出元ID") rs!払出先ID = rst.Fields("払出先ID") rs!払出 = rst.Fields("数量") rs.update rst.MoveNext Loop DoCmd.Requery 感謝いたします。 またよろしくお願いします。

その他の回答 (1)

noname#22222
noname#22222
回答No.1

某HPの<SQL リファレンス>からの抜粋です。 <注意事項> 列名を指定する場合には、必ずカッコで囲みます。 複数個の列名を指定する時には、カンマで区切ります。 列名を省略した場合は、表で定義している列の順番で対応する値を VALUES節に記述します。 キーワード VALUES の後には、挿入する行の各列の値を指定します。 複数個を指定する場合には、カンマで区切り、全体をカッコで囲みます。 キーワード VALUES の後に続く CHAR型や DATE型は、それらの値をシングルクォーテーション(’)で囲みます。 <表へ行を挿入する例文>   CnnExecute("INSERT INTO id管理表                (id_name, final_value)             VALUES                ('Perform', 0)")

jetstream
質問者

お礼

回答いただきありがとうございます。 SQLは記述方法に慣れないと一回では難しいですね! 勉強になりました。またよろしくお願いいたします。

関連するQ&A