Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2010)
実行時エラー3061について
投稿日時: 17/10/17 17:50:53
投稿者: タルタル5050

お世話になっております。
 
SQLで下記のコードを実行すると実行時エラー3061:「パラメータが少なすぎます。2を指定してください。」とエラーメッセージが表示されます。
 
 
原因や解決策など、お力添えいただければ幸いです。
 
   Dim LoQuery As QueryDef
   Dim MySet As Recordset
   Dim Mysql As String
    
On Error GoTo Err_Ordata_AM_Create
 
   Mysql = Mysql & " insert into dbo_注文者データ"
   Mysql = Mysql & " ("
   Mysql = Mysql & " お客様管理番号"
   Mysql = Mysql & " , 送り状種別"
   Mysql = Mysql & " , クール区分"
   Mysql = Mysql & " , 伝票番号"
   Mysql = Mysql & " , 出荷予定日"
   Mysql = Mysql & " , お届け予定(指定)日"
   Mysql = Mysql & " , 配達時間帯"
   Mysql = Mysql & " , お届け先コード"
   Mysql = Mysql & " , お届け先電話番号"
   Mysql = Mysql & " , お届け先電話番号枝番"
   Mysql = Mysql & " , お届け先郵便番号"
   Mysql = Mysql & " , お届け先住所"
   Mysql = Mysql & " , お届け先住所(アパートマンション名)"
   Mysql = Mysql & " , お届け先会社・部門名1"
   Mysql = Mysql & " , お届け先会社・部門名2"
   Mysql = Mysql & " , お届け先名"
   Mysql = Mysql & " , お届け先名略称カナ"
   Mysql = Mysql & " , 敬称"
   Mysql = Mysql & " , ご依頼主コード"
   Mysql = Mysql & " , ご依頼主電話番号"
   Mysql = Mysql & " , ご依頼主電話番号枝番"
   Mysql = Mysql & " , ご依頼主郵便番号"
   Mysql = Mysql & " , ご依頼主住所1"
   Mysql = Mysql & " , ご依頼主住所(アパートマンション名)"
   Mysql = Mysql & " , ご依頼主名"
   Mysql = Mysql & " , ご依頼主略称カナ"
   Mysql = Mysql & " , 品名コード1"
   Mysql = Mysql & " , 品名1"
   Mysql = Mysql & " , 品名コード2"
   Mysql = Mysql & " , 品名2"
   Mysql = Mysql & " , 荷扱い1"
   Mysql = Mysql & " , 荷扱い2"
   Mysql = Mysql & " , 記事"
   Mysql = Mysql & " , コレクト代金引換額(税込)"
   Mysql = Mysql & " , コレクト内消費税額等"
   Mysql = Mysql & " , 営業所止置き"
   Mysql = Mysql & " , 営業所コード"
   Mysql = Mysql & " , 発行枚数"
   Mysql = Mysql & " , 個数口表示フラグ"
   Mysql = Mysql & " , 請求先顧客コード"
   Mysql = Mysql & " , 請求先分類コード"
   Mysql = Mysql & " , 運賃管理番号"
   Mysql = Mysql & " , 注文時カード払いデータ登録"
   Mysql = Mysql & " , 注文時カード払い加盟店番号"
   Mysql = Mysql & " , 注文時カード払い申込受付番号1"
   Mysql = Mysql & " , 注文時カード払い申込受付番号2"
   Mysql = Mysql & " , 注文時カード払い申込受付番号3"
   Mysql = Mysql & " , お届け予定eメール利用区分"
   Mysql = Mysql & " , [お届け予定eメールe-mailアドレス]"
   Mysql = Mysql & " , 入力機種"
   Mysql = Mysql & " , お届け予定eメールメッセージ"
   Mysql = Mysql & " , お届け完了eメール利用区分"
   Mysql = Mysql & " , [お届け完了eメールe-mailアドレス]"
   Mysql = Mysql & " , お届け完了eメールメッセージ"
   Mysql = Mysql & " , クロネコ収納代行利用区分"
   Mysql = Mysql & " , 決済QRコード印字フラグ"
   Mysql = Mysql & " , [収納代行請求金額(税込)]"
   Mysql = Mysql & " , 収納代行内消費税額等"
   Mysql = Mysql & " , 収納代行請求先郵便番号"
   Mysql = Mysql & " , 収納代行請求先住所"
   Mysql = Mysql & " , 収納代行請求先住所(アパートマンション名)"
   Mysql = Mysql & " , 収納代行請求先会社・部門名1"
   Mysql = Mysql & " , 収納代行請求先会社・部門名2"
   Mysql = Mysql & " , [収納代行請求先名(漢字)]"
   Mysql = Mysql & " , [収納代行請求先名(カナ)]"
   Mysql = Mysql & " , [収納代行問合せ先名(漢字)]"
   Mysql = Mysql & " , 収納代行問合せ先郵便番号"
   Mysql = Mysql & " , 収納代行問合せ先住所"
   Mysql = Mysql & " , 収納代行問合せ先住所(アパートマンション名)"
   Mysql = Mysql & " , 収納代行問合せ先電話番号"
   Mysql = Mysql & " , 収納代行管理番号"
   Mysql = Mysql & " , 収納代行品名"
   Mysql = Mysql & " , 収納代行備考"
   Mysql = Mysql & " , 予備01"
   Mysql = Mysql & " , 予備02"
   Mysql = Mysql & " , 予備03"
   Mysql = Mysql & " , 予備04"
   Mysql = Mysql & " , 予備05"
   Mysql = Mysql & " , 予備06"
   Mysql = Mysql & " , 予備07"
   Mysql = Mysql & " , 予備08"
   Mysql = Mysql & " , 予備09"
   Mysql = Mysql & " , 予備10"
   Mysql = Mysql & " , 予備11"
   Mysql = Mysql & " , 予備12"
   Mysql = Mysql & " , 予備13"
   Mysql = Mysql & " , 投函予定メール利用区分"
   Mysql = Mysql & " , [投函予定メールe-mailアドレス]"
   Mysql = Mysql & " , 投函予定メールメッセージ"
   Mysql = Mysql & " , [投函完了メール(お届け先宛)利用区分]"
   Mysql = Mysql & " , [投函完了メール(お届け先宛)e-mailアドレス]"
   Mysql = Mysql & " , [投函完了メール(お届け先宛)メッセージ]"
   Mysql = Mysql & " , [投函完了メール(ご依頼主宛)利用区分]"
   Mysql = Mysql & " , [投函完了メール(ご依頼主宛)e-mailアドレス]"
   Mysql = Mysql & " , [投函完了メール(ご依頼主宛)メッセージ]"
   Mysql = Mysql & " )"
   Mysql = Mysql & " select "
   Mysql = Mysql & " Nz(顧客管理番号)"
   Mysql = Mysql & " , Nz(送状種別)"
   Mysql = Mysql & " , Nz(温度区分)"
   Mysql = Mysql & " , Nz(伝票番号)"
   Mysql = Mysql & " , Nz(出荷予定日)"
   Mysql = Mysql & " , Nz(配達予定日)"
   Mysql = Mysql & " , Nz(配達時間帯区分)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(届先電話番号)"
   Mysql = Mysql & " , Nz(届先電話番号枝番)"
   Mysql = Mysql & " , Nz(届先郵便番号)"
   Mysql = Mysql & " , Nz(納品先住所1)"
   Mysql = Mysql & " , Nz(納品先住所2)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(届先名漢字)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(敬称)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(依頼主電話番号)"
   Mysql = Mysql & " , Nz(依頼主電話番号枝番)"
   Mysql = Mysql & " , Nz(依頼主郵便番号)"
   Mysql = Mysql & " , Nz(依頼主住所1)"
   Mysql = Mysql & " , Nz(依頼主住所2)"
   Mysql = Mysql & " , Nz(依頼主名漢字)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(品名コード1)"
   Mysql = Mysql & " , Nz(品名1)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(品名2)"
   Mysql = Mysql & " , Nz(荷扱1)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(記事)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(営業所止置)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(発行枚数)"
   Mysql = Mysql & " , Nz(口枠印字個数)"
   Mysql = Mysql & " , Nz(請求先顧客コード)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(運賃管理番号)"
   Mysql = Mysql & " , Nz(注文時カード払データ登録)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(配達予定eメール利用区分)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(入力機種)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(配達完了eメール利用区分)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , Nz(クロネコ収納代行利用区分)"
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " , """""
   Mysql = Mysql & " FROM V_注文データ"
   Mysql = Mysql & " order by V_注文データ.顧客管理番号 asc"
 
   Set MyQuery = CurrentDb.CreateQueryDef("")
 
   MyQuery.sql = Mysql
   MyQuery.ODBCTimeout = 0
   MyQuery.Execute    ←ここでエラー?
   MyQuery.Close

回答
投稿日時: 17/10/17 18:57:16
投稿者: Suzu

えっと。。
正直見たくないです。
 
実行時エラー3061:「パラメータが少なすぎます。2を指定してください。」
の原因の多くは、SQLのつもりとして渡した文字列を、Access君がSQLとして認識できない場合に出ます。
 
最終的に出来た文字列を
 
Debug.Print Mysql
 
を使い、デバッグウィンドに吐き出し、クエリのSQLビューに貼り付け
デザインビューに変更しようとしててみてください。
運が良ければ、Access君が悪い部分を指摘してくれます。
 
 
判らない場合には、各フィールド名を [ ] で括ってください。
ご提示の中でも [ ] で 括っている箇所がありますよね?
 
それは、Access君のSQLの中の使ってはいけない文字があります。
 
【Access データベースでの作業時に使用すべきでない特殊文字】
https://support.microsoft.com/ja-jp/help/826763/error-message-when-you-use-special-characters-in-access-databases
 
それでもどうしても使いたい場合、[ ] で括るとSQLの中で使える文字があります。
それを、クエリに使用する際、Access君はSQLの中で、自動で [ ] で括ってくれます。
 
そのSQLビューの文字列を VBAにしたのですよね?
 
今回のSQLの中だと、半角の中括弧 () なんかがそれに当たります。
その他に、「・」全角の中括弧「(」「)」、全角のローマ数字 なんかもフィールド名に含まれるなら、
 [ ] で括っておいた方が良いです。
 
なので、フィールド名を [ ] で括ってみてください。
 
 
あと。。のちのち、コードをメンテナンスする際、メンテナンスをし易い様に工夫しましょう。
 
SELECT句に 「""」を多数使用されていますよね。
それは、INSERTされるテーブル側に空白文字列を渡しなさいという事ですが、
INSERTされるテーブルのフィールドでNullが許可されているなら
初めから INSERT句のフィールドに 含まなければ良いのでは。
 
少なくとも私はこのSQLを一言一句見る気にはなれませんでした。

投稿日時: 17/10/19 17:52:39
投稿者: タルタル5050

ソース間違っておりました。
申し訳ありません。
 
Suzuさんありがとうございました。