アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前、教えていただいたにもかかわらず、作業が上手くいったことで、理解を深めることを疎かに
してしまい、一部を修正したところ、わからなくなってしまいました。
申し訳ございませんが、教えてください。

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)

元となるクエリを直接実行すると正しく動作します。

A 回答 (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

のように。

この回答への補足

ありがとうございます。上手くいきました。>クエリZを適当に作成 不適当だったのかもしれません。
また、よろしくお願いします。とても助かりました。

補足日時:2006/07/19 09:10
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。私の説明不足のようで、試したところまったく同じ結果でした。
伝え直すと、
, Replace:="テーブルX1" _ は , Replace:=変数A _
元となるクエリを直接実行すると正しく動作 は
クエリY⇒テーブルXを手動で実行すると正しく動作 です。
ど素人の感覚ですが、フィールド1の抽出条件が上手く反映されていないような感じです。
BBBという文字列を含むという単純な条件なのですが。
お手数おかけして恐縮です。

お礼日時:2006/07/18 19:25

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ビューと見比べる。
これで原因が調べられると思います。
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございます。試したところ、テーブル名が変わっていませんでしたが、
正常な場合は、デバッグ箇所のところで既にテーブルX1になっているべきなのでしょうか?
実は、テーブル名は変数でフォーム入力で都度指定するようになっており、デバッグ時に、コード上
で該当箇所にカーソルを合わせると、指定した名称が正しく表示されます。
よくわかっていなくて申し訳ございません。

お礼日時:2006/07/18 18:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A