ここに私が到着した解決策があります。それにはいくつかの欠陥がありますが、私はいつも特定のフォームへの参照を私の質問から守りながら、Accessで通常の方法でクエリを保存することができます:
私はParamというモジュールを作成しました。コード:
Option Compare Database
Private m_params As Collection
Public Function ParamLookup(paramName As String) As Variant
If Not m_params Is Nothing Then
ParamLookup = m_params(paramName)
End If
End Function
Public Function FeedParamsTo(reportName As String, theParams As Collection)
Set m_params = theParams
If Application.CurrentProject.AllReports(reportName).IsLoaded Then
DoCmd.Close acReport, reportName
End If
DoCmd.OpenReport reportName, acViewPreview
End Function
はその後、私の入力コントロールを含むフォームで、私は、以下のクリックハンドラで例えばボタン:レポートは、私ができる使用するクエリで最後に
Private Sub Button_Click()
Dim params As Collection
Set params = New Collection
params.Add Me!AnInputControl, "param1"
params.Add Me!AnotherInputControl, "param2"
Param.FeedParamsTo "nameOfSomeReport", params
End Sub
、 ParamLookup fuを使用してパラメータparam1とparam2を参照してくださいnctionは、そのよう:
SELECT * FROM someTable WHERE someColumn = ParamLookup("param1") AND someOtherColumn = ParamLookup("param2")
いくつかの欠点:
- それはグローバルモジュールですので、一度に読み取ることができ、パラメータのセットは1つだけです。 2つのレポートをロードすると、最初のレポートのパラメータが上書きされ、フォームのリフレッシュによって奇妙なエラーが発生する可能性があります。もちろん、このアイデアをクラスに拡張して、フォームごとに1つのインスタンスを作成することは可能ですが、現時点ではそれほど魅力的なものは必要ありません。
- あなたが(例えばアクセスオブジェクトパネルから)ボタンを使用せずにレポートビューでレポートを開き、ひいてはFeedParamsTo方法、場合、ParamLookupsは失敗とレポートがレコードなし
これがあると現れますすべてAccessで、残念ながら – ralbatross