MS ACCESS 2003 - 非バインド フォームからレポートへの情報の受け渡しに関する質問

StackOverflow https://stackoverflow.com/questions/2065214

質問

以下のようなものを使用して、ある非バインドフォームから別のフォームに情報を渡します(エラーチェックはありません)。

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 にフィルターをかけないのはなぜでしょうか。これにより、フォームを開かなくてもレポートを実行できます。

フォームがバインドされていない場合、またはその場で計算するのにコストがかかるフィールドがある場合を除き、レポートをフォームにバインドする利点はまったくわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top