Microsoft Access 掲示板

CurrentDb.Execute strSQLでは何故かエラー / 1

6 コメント
views
1
hiroton 2025/04/14 (月) 14:09:42 c632e@f966d

DoCmdは「ACCESS」の機能を呼び出します
「ACCESS」は、自身がどんなフォームがあるだとか、そこにどんなコントロールがあるだとか認識できます。なので、クエリ実行時(DoCmd.RunSQL)にForms![F_改修履歴に追加設定]![tx受付日付代入用]が何者か判断できます

CurrentDb.Executeは「DAO」の機能を呼び出します
「DAO」はACCESSの構文を解釈する機能はないので、Forms![F_改修履歴に追加設定]![tx受付日付代入用]を一つの、そのような名称のパラメータ(変数)として解釈しようとします。結果、そのようなパラメータを用意していないDAOを実行しようとして、パラメータが少なすぎますとエラーを返してきています

CurrentDb.Executeを使うのであれば、DAOで実行する前に、VBAで値の変換を済ませておく(strSQLの中にフィールド指定の構文を入れない)必要があります

strSQL = _
    " INSERT INTO T_登録中継用_改修履歴" & _
          " (製造履歴ID, 受付日付, 改修内容, 完了日付, MEMO)" & _
    " SELECT" & _
          " 製造履歴ID" & _
          ", #" & Forms![F_改修履歴に追加設定]![tx受付日付代入用] & "#" & _
          ", '" & Forms![F_改修履歴に追加設定]![tx改修内容代入用] & "'" & _
          ", #" & Forms![F_改修履歴に追加設定]![tx完了日付代入用] & "#" & _
          ", '" & Forms![F_改修履歴に追加設定]![tx_memo代入用] & "'" & _
    " FROM T_製造履歴" & _
    " WHERE check=True;"

参考
パラメータクエリを含むSQLをVBAから実行する(hatena chipsさん)


英語でのエラーだと、たとえば

"Run-time error '3061'. Too few parameters. Expected 1."

のようになるようです。ネイティブならすんなり意味が分かるんでしょうか。日本語にするなら

”実行時エラー'3061'
パラメータが少なすぎます。パラメータが1つ必要です。”

隠れた文字が表現されているといいと思いますし、意訳して「パラメータが1つ不足しています」とかなるとわかりやすいんじゃないかと

通報 ...