- ベストアンサー
Access VBA クエリのパラメータ問題解決
- Accessのクエリにパラメータを渡す方法に関する質問です。 SELECT文に「INTO Atbl IN @prm」を使用してパス「C:\work\test..accdb」を渡したいが、「@prm」にシングルクォーテーションが付くことでエラーが発生します。
- Accessクエリパラメータ設定に関する問題で、特定のファイルパス「C:\work\test..accdb」をパラメータとして渡す際のエラーについて解決方法を求めています。シングルクォーテーションが原因でエラーが発生しています。
- Access VBAでクエリパラメータを使用してファイルパスを渡す方法についての質問です。保存時にシングルクォーテーションが付くためエラーが出ています。この問題の解決方法を知りたいです。
- みんなの回答 (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
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1719/2589)
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]));
補足
ご回答ありがとうございます。 ご教示いただいた通り、WHERE句に付ける@prmは、私もうまく行きました。 ですが、 INTO Atbl IN [@prm] こちらだと何故か以下に変換され、@prmにシングルクォーテーションが付いてしまいパラメータとして扱ってくれなくなってしまいます。 INTO Atbl IN '@prm' ※実行すると、「ファイル'C:\Users\tc0045\Documents\@prm'が見つかりません。」となります。
- chayamati
- ベストアンサー率41% (260/624)
クエリの機能を勘違いなさっているのではないでしょうか 1.クエリはレコードソースと呼ぶ情報元(テーブルまたは他のクエリ)を選択、編集します 添付図をご覧ください。 2.M_顧客マスタテーブル ・顧客名:納品書、請求書等外部文書に使用 ・顧客略称:情報登録、内部報告書に使用 ・郵便番号・都道府県・市区町村・番地:フィールドは個別にしますが、 テーブルデザインで《住所入力支援》を活用 3.SQLビュー SELECT M_顧客.顧客名, M_顧客.都道府県, M_顧客.市区町村, M_顧客.番地, [郵便番号] & [都道府県] & [市区町村] & [番地] AS 住所 FROM M_顧客;
補足
ご回答ありがとうございます。 クエリの中身、 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側からパラメータで指定したいのです。
- AIエージェント あい(@OKWAVE-AI)
- ベストアンサー率89% (2715/3019)
初めまして、お気持ちお察しいたします。 Accessのクエリでパラメータを渡す際、シングルクォーテーションが正しく解釈されるようにする方法があるため、お教えいたします。 まず、クエリ内でのパラメータの扱い方ですが、クエリ内で文字列値を扱う場合はシングルクォーテーションで囲む必要があります。そのため、パラメータの部分にもシングルクォーテーションが付いてしまい、エラーが発生してしまうのです。 しかし、解決方法もあります。パラメータをクエリに渡す際には、シングルクォーテーションを付けずに渡すことができます。具体的な手順を以下に示します。 1. クエリのパラメータを指定する箇所「@prm」を、「?」に変更します。 2. クエリにパラメータを渡す際には、パラメータの値をパラメータ名の部分に置き換えます。例えば、「C:\work\test..accdb」を渡す場合は、「C:\work\test..accdb」という値を「?」にセットします。 以上の手順で、パラメータを正しく渡してクエリを実行することができます。 なお、クエリのパラメータ指定方法についてはバージョンや使用しているツールによって異なるため、ご利用のバージョンやツールに応じた方法をご確認ください。また、環境や具体的なエラーメッセージがわかり次第、より具体的なアドバイスを提供させていただきます。 落ち着いてご対応いただき、問題を解決できますようお祈り申し上げます。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/
補足
ご回答ありがとございます。 ただ、理解出来ておりません。 以下のソースの場合、「?」はどこに設定するのでしょうか? ■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;
補足
再度、ご確認いただきありがとうございます。 やはり駄目なようですね。。 ご教示いただいたようにVBA側でSQL実行は出来ました。 ありがとうございました。