MS ACCESS 2003 - 非バインド フォームからレポートへの情報の受け渡しに関する質問
-
20-09-2019 - |
質問
以下のようなものを使用して、ある非バインドフォームから別のフォームに情報を渡します(エラーチェックはありません)。
Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string
docmd.openform "NextFormIamAbouttoUse"
sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"
' usually debug here
set db = currentdb
set rs = db.openrecordset(sql)
if rs.eof then
msgbox "oops message"
else
rs.movefirst
[Forms]![NextFormIamAbouttoUse].as_mainID = rs![MainID]
[forms]![NextFormIamAbouttoUse].value1 = rs![value1]
' etc
rs.close
set db = nothing
set rs = nothing
sql = ""
end if
'error stuff
end sub
わかりました。フォームからレポートに情報を転送するためにこの種のものを使用することもできますか?私はダッシュボードとしてテキスト ボックスだらけのフォームをたくさん使用していますが、テキスト ボックスは入力の目的ではなく、むしろ簡単な情報を表示するために使用されています。
ユーザーはさまざまなフォームをナビゲートして好みに合わせた「ダッシュボードのような」フォームを構築し、ある時点で印刷したいと考えます。そこで、各時点で(提供されるデータの観点から)類似したレポートを作成し、これらのフォームを通じて構築した情報のページを印刷できるようにしたいと考えました。
そこで私はレポートでこれを実行しようとしました:
Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string
docmd.openreport "ReportTester", acViewPreview
sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"
' usually debug here
set db = currentdb
set rs = db.openrecordset(sql)
if rs.eof then
msgbox "oops message"
else
rs.movefirst
[reports]![ReportTester].as_mainID = rs![MainID]
[reports]![ReportTester].value1 = rs![value1]
' etc
rs.close
set db = nothing
set rs = nothing
sql = ""
end if
'error stuff
end sub
単なる推測ですが、うまくいきませんでした。エラーも何もありません。この方法では何も情報が表示されません。ID番号も渡しません。
したがって、AcViewPreview でレポートを開くということは、事後的にこれらのテキスト ボックスに情報を追加できないことを意味すると考えていますが、確証はありません。したがって、これに関するアドバイスをいただければ幸いです。ありがとう!
解決
いくつかの選択肢があります。クエリを作成し、その値にフォーム コントロールの値を渡すことで、レポートのベースとなる 1 レコードのクエリを作成できます。
各列は次のようになります。 データ:フォーム![MyForm]![MyControl]
または、フォームのコントロールをレポート コントロールに直接バインドすることもできます。
これらのルートのいずれかを選択する場合は、レポートを開いている間、値を含むフォームを開いたままにしておく必要があります。複雑なコードは必要ありません。
他のヒント
何かが足りないと思います。レポートの Recordsource をフォームの Recordsource と同じにし、実行時に DoCmd.OpenReport の WhereCondition 引数で特定の MainID にフィルターをかけないのはなぜでしょうか。これにより、フォームを開かなくてもレポートを実行できます。
フォームがバインドされていない場合、またはその場で計算するのにコストがかかるフィールドがある場合を除き、レポートをフォームにバインドする利点はまったくわかりません。