私は2回のアクセスがgetData_join
とgetData_static
に照会があるとします。AccessでサブクエリSQLを動的に変更する方法はありますか。
getData_static
:
select * from someTable where someTable.property="value"
getData_join
:
select * from someTable inner join otherTable on someTable.property=otherTable.property
データベースはgetData_join
を呼び出すクエリ、例えば、items_getData
をたくさん持っている:
select * from items inner join getData_join on items.property=getData_join.property
私は、ユーザーがこれらのクエリはgetData_static
またはgetData_join
を呼び出すかどうかを選択できるようになるフロントエンドにスイッチを設定したいです。そのように、クエリ定義を使用してその場でSQLを定義し、その後
select * from someTable [insertClause]
と::
をするのではなく、私は多分のようなダミーの句で、一般的なgetData
クエリを持っていることについて考えていた、クエリ2つの別々のセットを作ります
Function modify_getData(isJoin As Boolean) As QueryDef
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("getData")
If isJoin Then
qdf.sql = Replace(qdf.sql, "[insertClause]", "inner join otherTable on someTable.property=otherTable.property")
Else
qdf.sql = Replace(qdf.sql, "[insertClause]", "where someTable.property=""value""")
End If
Set modify_getData = qdf
End Function
問題は、フロントエンドが直接getData
を呼び出さないということです、それはそのように修飾getData
クエリ定義は、ここで使用のではないでしょう作成、items_getData
を呼び出します。変更されたSQLがそれを呼び出す別のクエリで使用されるように、Access内のサブクエリのSQLを動的に変更する方法はありますか?
他の多くのクエリでもフォーム/レポートでも使用されているので、2つの別々のクエリとして扱うことをお勧めします。コードが壊れて、クエリを使用するオブジェクトが失敗します。クエリは非データアプリケーションアイテムなので、あまりにも多くの領域を占有しません。 Plus Accessのエンジンは、VBAスクリプトクエリではなく、保存されたクエリをコンパイルして最適化します。 – Parfait
@パールファット:問題は、スペースではなく、すべてのクエリのメンテナンスだと思います。 – Andre
あなたの置換は一度しか動作しません。なぜなら、その後はqdf.sqlに '[insertClause]'がなくなるからです。 – Andre