43

多数のテーブルを結合するかなり大きなクエリがあり、id フィールド (例: : )に基づいてレコードを取得したいと考えていますbetween nStartID and nEndID

2 つのパラメーターを作成し、基準としてテストしたところ、正常に動作しました。

問題は、このメイン クエリから挿入クエリを実行する必要があり、メイン クエリ内のパラメーターが必要であるということです。そのため、プログラムでパラメーターを渡す必要があります。

これをどのように行うことができるかについて、誰にも手がかりがありますか?

ありがとう。

4

5 に答える 5

67

これをテストしたところ、Access 2010 で動作します。

パラメータを含む SELECT クエリがあるとします。

PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));

そのクエリを対話的に実行すると、[startID] と [endID] の入力を求められます。これでうまくいくので、そのクエリを [MemberSubset] として保存します。

次に、そのクエリに基づいて UPDATE クエリを作成します。

UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));

そのクエリを対話的に実行すると、[startID] と [endID] の入力を求めるプロンプトが再度表示されますが、うまく機能するので、[MemberSubsetUpdate] として保存します。

[MemberSubsetUpdate] のパラメーターとして [startID] と [endID] の値を指定することで、VBA コードから [MemberSubsetUpdate] を実行できますが、これらは実際には [MemberSubset] のパラメーターです。これらのパラメーター値は、必要な場所まで「細流」になり、クエリは人間の介入なしで機能します。

Sub paramTest()
    Dim qdf As DAO.QueryDef
    Set qdf = CurrentDb.QueryDefs("MemberSubsetUpdate")
    qdf!startID = 1  ' specify
    qdf!endID = 2    '     parameters
    qdf.Execute
    Set qdf = Nothing
End Sub
于 2013-05-15T17:13:59.500 に答える
23

QueryDefs を使用してみてください。パラメータを使用してクエリを作成します。次に、次のようなものを使用します。

Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef

Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("Your Query Name")

qdf.Parameters("Parameter 1").Value = "Parameter Value"
qdf.Parameters("Parameter 2").Value = "Parameter Value"
qdf.Execute
qdf.Close

Set qdf = Nothing
Set dbs = Nothing
于 2014-07-02T15:21:50.497 に答える
4

QueryDefs コレクションの使用に関する情報をありがとうございます。私はしばらくこれについて疑問に思っていました。

クエリ パラメータを含むテーブルを使用して、VBA を使用せずに別の方法で実行しました。

例えば:

SELECT a_table.a_field 
FROM QueryParameters, a_table 
WHERE a_table.a_field BETWEEN QueryParameters.a_field_min 
AND QueryParameters.a_field_max

は 2 つのフィールドQueryParametersを持つテーブルでa_field_mina_field_max

句にクエリ パラメータ フィールドを含め、句のパラメータ フィールドに演算子GROUP BYを含めると、で使用することもできます。GROUP BYFIRSTHAVING

于 2014-04-09T00:02:02.813 に答える