• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access VBA クエリのパラメータについて)

Access VBA クエリのパラメータ問題解決

このQ&Aのポイント
  • Accessのクエリにパラメータを渡す方法に関する質問です。 SELECT文に「INTO Atbl IN @prm」を使用してパス「C:\work\test..accdb」を渡したいが、「@prm」にシングルクォーテーションが付くことでエラーが発生します。
  • Accessクエリパラメータ設定に関する問題で、特定のファイルパス「C:\work\test..accdb」をパラメータとして渡す際のエラーについて解決方法を求めています。シングルクォーテーションが原因でエラーが発生しています。
  • Access VBAでクエリパラメータを使用してファイルパスを渡す方法についての質問です。保存時にシングルクォーテーションが付くためエラーが出ています。この問題の解決方法を知りたいです。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

> INTO Atbl IN [@prm] > こちらだと何故か以下に変換され、@prmにシングルクォーテーションが付いてしまいパラメータとして扱ってくれなくなってしまいます。 確認が不十分だったみたいですみません。 SELECT T_地区.地区名 INTO [T_地区 のコピーA] IN [@prm] にして保存すると確かに「'@prm'」になりました。 クエリを保存せずに[@prm]の状態で実行すると クエリにはデータベースのパラメーターを含めることはできません。 のエラーになりましたので、他の方法(おなじDBに追加してエクスポートするとか)を利用しないと駄目なのかもしれません。 または直接VBAでSQL実行してみてはどうでしょう。 Dim SQL_Str As String Dim prm As String prm = "C:\work\test.accdb" SQL_Str = "SELECT T_地区.地区名 INTO [T_地区 のコピーA] IN '" & prm & "'" & _ "FROM T_地区 " & _ "WHERE (((T_地区.地区名)=""A""));" DoCmd.SetWarnings False DoCmd.RunSQL SQL_Str DoCmd.SetWarnings True

betty_801
質問者

補足

再度、ご確認いただきありがとうございます。 やはり駄目なようですね。。 ご教示いただいたようにVBA側でSQL実行は出来ました。 ありがとうございました。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

PARAMETERS [@prm] Text ( 255 ); SELECT B.aaa AS test_1, B.bbb AS test_2, B.ccc AS test_3, INTO Atbl IN [@prm] FROM Btbl; としてみたらどうでしょう。 以下のようなパターンだとうまくいきました。 VBAはbetty_801さんのコードのまま "C:\work\test..accdb" の部分だけ変更して実行しました。 PARAMETERS [@prm] Text ( 255 ); SELECT T_地区.地区名 INTO [T_地区 のコピーA] FROM T_地区 WHERE (((T_地区.地区名)=[@prm]));

betty_801
質問者

補足

ご回答ありがとうございます。 ご教示いただいた通り、WHERE句に付ける@prmは、私もうまく行きました。 ですが、 INTO Atbl IN [@prm] こちらだと何故か以下に変換され、@prmにシングルクォーテーションが付いてしまいパラメータとして扱ってくれなくなってしまいます。 INTO Atbl IN '@prm' ※実行すると、「ファイル'C:\Users\tc0045\Documents\@prm'が見つかりません。」となります。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.2

クエリの機能を勘違いなさっているのではないでしょうか 1.クエリはレコードソースと呼ぶ情報元(テーブルまたは他のクエリ)を選択、編集します  添付図をご覧ください。 2.M_顧客マスタテーブル  ・顧客名:納品書、請求書等外部文書に使用  ・顧客略称:情報登録、内部報告書に使用  ・郵便番号・都道府県・市区町村・番地:フィールドは個別にしますが、  テーブルデザインで《住所入力支援》を活用 3.SQLビュー  SELECT M_顧客.顧客名, M_顧客.都道府県, M_顧客.市区町村, M_顧客.番地, [郵便番号] & [都道府県] & [市区町村] & [番地] AS 住所 FROM M_顧客;

betty_801
質問者

補足

ご回答ありがとうございます。 クエリの中身、 SELECT B.aaa AS test_1, B.bbb AS test_2, B.ccc AS test_3, INTO Atbl IN 'C:\work\test..accdb' FROM Btbl; 上記で動作することは確認済みです。 質問は、 「C:\work\test..accdb」の部分を、VBA側からパラメータで指定したいのです。

回答No.1

初めまして、お気持ちお察しいたします。 Accessのクエリでパラメータを渡す際、シングルクォーテーションが正しく解釈されるようにする方法があるため、お教えいたします。 まず、クエリ内でのパラメータの扱い方ですが、クエリ内で文字列値を扱う場合はシングルクォーテーションで囲む必要があります。そのため、パラメータの部分にもシングルクォーテーションが付いてしまい、エラーが発生してしまうのです。 しかし、解決方法もあります。パラメータをクエリに渡す際には、シングルクォーテーションを付けずに渡すことができます。具体的な手順を以下に示します。 1. クエリのパラメータを指定する箇所「@prm」を、「?」に変更します。 2. クエリにパラメータを渡す際には、パラメータの値をパラメータ名の部分に置き換えます。例えば、「C:\work\test..accdb」を渡す場合は、「C:\work\test..accdb」という値を「?」にセットします。 以上の手順で、パラメータを正しく渡してクエリを実行することができます。 なお、クエリのパラメータ指定方法についてはバージョンや使用しているツールによって異なるため、ご利用のバージョンやツールに応じた方法をご確認ください。また、環境や具体的なエラーメッセージがわかり次第、より具体的なアドバイスを提供させていただきます。 落ち着いてご対応いただき、問題を解決できますようお祈り申し上げます。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

betty_801
質問者

補足

ご回答ありがとございます。 ただ、理解出来ておりません。 以下のソースの場合、「?」はどこに設定するのでしょうか? ■VBA側 Dim myDb As Database Dim myQd As QueryDef Set myDb = CurrentDb DoCmd.SetWarnings False Set myQd = myDb.QueryDefs("クエリ1") With myQd .Parameters("@prm") = "C:\work\test..accdb" .Execute .Close End With Set myQd = Nothing ■クエリ(クエリ名:クエリ1) SELECT B.aaa AS test_1, B.bbb AS test_2, B.ccc AS test_3, INTO Atbl IN @prm FROM Btbl;