- ベストアンサー
アクセス VBA クエリSQL文変更
以前、教えていただいたにもかかわらず、作業が上手くいったことで、理解を深めることを疎かに してしまい、一部を修正したところ、わからなくなってしまいました。 申し訳ございませんが、教えてください。 Xと同一の構成である X1~という複数のテーブルから一つを選択して、クエリYを実行 クエリYは、フィールド1の値が BBBであるレコードの、フィールド1、3、5を抽出 Dim dbs As DAO.Database Dim qrdef As DAO.QueryDef Set dbs = Currentdb Set qrdef = dbs.QueryDefs("クエリY") qrdef.SQL = Replace(Expression:=qrdef.SQL _ , Find:="テーブルX" _ , Replace:="テーブルX1" _ , Compare:=vbTextCompare) Set qrdef = Nothing Set dbs = Nothing 実行時エラー3075 クエリ式'テーブルX1.フィールド1'の構文エラー:演算子がありません デバッグ qrdef.SQL = Replace(Expression:=qrdef.SQL _ , Find:="テーブルX" _ , Replace:="テーブルX1" _ , Compare:=vbTextCompare) 元となるクエリを直接実行すると正しく動作します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> qrdef.SQL = Replace(Expression:=qrdef.SQL _ > , Find:="テーブルX" _ > , Replace:="テーブルX1" _ > , Compare:=vbTextCompare) Find 引数・Replace 引数を固定で指定して、クエリのSQL文を上書きする ようになっています。 なので、 > 元となるクエリを直接実行すると正しく動作します。 これをテンプレートのような使い方をして、別のクエリを使うようにした方が いいと思います。 現在のクエリを「クエリY」としたら、「クエリZ」というのを適当に作成してください。 Dim dbs As DAO.Database Dim sqrdef As DAO.QueryDef Dim tqrdef As DAO.QueryDef Set dbs = Currentdb Set sqrdef = dbs.QueryDefs("クエリY") Set tqrdef = dbs.QueryDefs("クエリZ") tqrdef.SQL = Replace(Expression:=sqrdef.SQL _ , Find:="テーブルX" _ , Replace:="テーブルX1" _ , Compare:=vbTextCompare) Set sqrdef = Nothing Set tqrdef = Nothing Set dbs = Nothing のように。
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
Set qrdef = dbs.QueryDefs("クエリY") debug.print "OK " & qrdef.SQL qrdef.SQL = Replace(Expression:=qrdef.SQL _ , Find:="テーブルX" _ , Replace:="テーブルX1" _ , Compare:=vbTextCompare) debug.print "NG " & qrdef.SQL としてみてイミディエイトウィンドウに出力されたものを 見比べてみる。 手動で作成したうまく作動するテーブルX1のクエリのSQLビューと見比べる。 これで原因が調べられると思います。
お礼
さっそくのご回答ありがとうございます。試したところ、テーブル名が変わっていませんでしたが、 正常な場合は、デバッグ箇所のところで既にテーブルX1になっているべきなのでしょうか? 実は、テーブル名は変数でフォーム入力で都度指定するようになっており、デバッグ時に、コード上 で該当箇所にカーソルを合わせると、指定した名称が正しく表示されます。 よくわかっていなくて申し訳ございません。
お礼
ご回答ありがとうございます。私の説明不足のようで、試したところまったく同じ結果でした。 伝え直すと、 , Replace:="テーブルX1" _ は , Replace:=変数A _ 元となるクエリを直接実行すると正しく動作 は クエリY⇒テーブルXを手動で実行すると正しく動作 です。 ど素人の感覚ですが、フィールド1の抽出条件が上手く反映されていないような感じです。 BBBという文字列を含むという単純な条件なのですが。 お手数おかけして恐縮です。
補足
ありがとうございます。上手くいきました。>クエリZを適当に作成 不適当だったのかもしれません。 また、よろしくお願いします。とても助かりました。