サブフォームのRecordSourceでデータの件数を取得する方法は?

このQ&Aのポイント
  • Access2007環境で、SQL Server 2005のデータベースを使用しています。メインフォームに表示された日付のデータをサブフォームに表示するために、RecordSourceを設定しています。
  • サブフォームのフォームヘッダーに置いたテキストボックスのコントロールソースを`=Count(*)`と設定しているが、`#エラー`と表示されてしまっています。
  • 質問者は困っていて、なぜエラーが発生しているか教えていただきたいと求めています。
回答を見る
  • ベストアンサー

サブフォームのRecordSourceの件数を取得したい

<環境>access2007、db:sqlserver2005 メインフォームに日付のテキストボックスがあり、その日付に一致したデータをサブフォームに表示しています。 メインフォームのOPEN時処理 Set FM = Forms![FTop] Set FS = Forms![FTop]![FTop_sub].Form FS.RecordSource = "select * from aaa where day = '"& fm!day &"'" この時、RecordSourceにセットしたデータの件数を取得したいのですが、 サブフォームのフォームヘッダーにテキストボックスを配置して、 そのコントロールソースを =Count(*) としました。 しかし、"#エラー"と表示されてしまいます。 サブフォームは"帳票フォーム"です。 どこが悪いのか困っています。どなたかご教授お願いします。

noname#208236
noname#208236

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

DataCountではなくRecordCountでしたね。失礼しました。 この場合、RecordsetCloneでも問題ないと思いますが、Recordsetの方が効率がいいのではないかと思います。 RecordsetCloneを使用せざるを得ないのは、フォームに表示しているレコードを移動させずにレコード操作を行うような場合だったような気がします。

noname#208236
質問者

お礼

ありがとうございます。 大変参考になりました。

その他の回答 (2)

回答No.2

訂正です。 Form![FTop]!以下省略... ではなく Forms![FTop]!以下省略... でした。 また、サブフォームのテキストボックスなら =Forms![FTop]!以下省略... という記述ではなく =Recordset.なんとか という記述が可能だと思います。

noname#208236
質問者

お礼

お返事ありがとうございます。 以下の通りで親フォームから取得することができました。 また、いろいろ調べた結果RecordsetCloneでも取得できました。 どちらを使っても問題ないでしょうか? <親フォームレコードセット後の処理> Dim FS As Form Set FS = Forms![FTop]![FTop_sub].Form (1) Me!txt_RecCnt = FS.Recordset.RecordCount (2) If Not (FS.RecordsetClone.EOF) = True Then FS.RecordsetClone.MoveLast End If Me!txt_RecCnt = FS.RecordsetClone.RecordCount

回答No.1

Form![FTop]![FTop_sub].Form.Recordset.DataCountか何かで(DataCountという名前だったかどうか定かではありません)件数が取得できると思いますので、それをコントロールソースに設定してやればできると思います。 (=Form![FTop]![FTop_sub].Form.Recordset.DataCountのような感じ)

関連するQ&A

  • Access サブフォームのレコードソースを変更するには

    Accessのプロシージャについて教えてください。 フォーム FM0020 上に、2つのサブフォーム FS002001 と、FS002002 があります。 メインフォームにある値を使って、サブフォームのレコードソースを変更したい のですが、どうもうまくできません。 FS002001のレコードソースは下記の1行目のコードで変数strSQLに代入出来るのですが、 FS002002のレコードソースは下記の2行目のようにしても 「オブジェクトまたはクラスがこのイベントセットをサポートしていません」 となり、代入出来ないのです。 2つ目のサブフォーム上にあるテキストボックス HMCD が下記3行目のように すると代入できるので、サブフォームの名前を間違えているわけではないと思うのですが...。 他に原因としては何が考えられますか? 下記の3行を同じモジュール内に続けて書いても2行目だけがひっかかるのでもうお手上げ 状態です..。 なんとか助けてください。 お願いします。 strSQL = Forms!FM0020.FS002001.Form.RecordSource strSQL = Forms!FM0020.FS002002.Form.RecordSource strSQL = Forms!FM0020.FS002002!HMCD

  • 【Access2007】サブフォームのRecordSourceの設定で

    【Access2007】サブフォームのRecordSourceの設定で実行時エラー 2146500594が発生します。 Access2007SP2で、メインフォーム上に帳票フォーム形式のサブフォームがあります。 サブフォームのRecordSourceプロパティを下記のようなコードで設定していますが、添付画像のようなエラーになってしまいます。 Forms![親フォーム]![サブフォーム].Form!RecordSource = strSQL strSQL(sql文)自体は正しく値を取得できることを確認済みです。 原因や解決策を何度か検索してみましたが、見つかりませんでした。 対処方法をご存知でしたらご教示お願いします。

  • ACCESSサブフォームにデータ反映されない

    よろしくお願いします。 Access2010を使っています。 メインフォームにあるテキストボックス2つに条件を入力し、 抽出したデータをサブフォームで表示させたいと思います。 ●メインフォーム名「フォーム1」 テキストボックス2つ「tex1」「tex2」 ●データ元クエリ「q1」 フィールド名「ID1」「ID2」「Name」 ●サブフォームSQL SELECT q1.Name FROM q1 WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And ((q1.ID2) = Forms![フォーム1]!tex2))); フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。 サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。 サブフォームのコントロールソースへSQLを入力するだけでは、 メインフォーム内でのデータは反映されないんでしょうか??

  • Accessメインサブフォームにて・・・

    Accessのサブフォームで、入力するためのフォームと、 実際にメインフォームの中で表示させる時のサブフォームの表示を 変えたいのですが・・・。 (1)ボタンをクリックして、入力するためのサブフォームを表示させる。  これは帳票形式で、テキストボックスの罫線が表示されているよう  にします。 (2)入力し終わったら、メインフォームに戻る。  こちらで表示されるサブフォームは、テキストボックスの罫線が表示  されていないようにする。 上記のようなことはできるでしょうか?よろしくお願いします。  

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • サブフォームのリクエリー

    accessにて開発を行ってるのですが・・・ まず、メインフォームとサブフォームがあり、メインフォームのテキストボックスに入力したデータにマッチしたデータのみをサブフォーム上に表示させるには・・・ ちなみに・・・ ・サブフォームにはクエリーデータを常時表示 ・メインフォームより入力があったらその条件でサブフォーム表示の更新 っていう感じです・・・よろしくお願いします。

  • サブフォームのテキストボックスにフォーカスを戻す

    Access2010です。 メインフォームにいくつかのテキストボックスやコンボボックスと「登録」ボタンがあり、メインフォームの中には帳票形式のサブフォームがあります。 サブフォームには ・数量 ・単価 ・金額 のテキストボックスがあります。 フォーカスがサブフォームのいずれかのテキストボックスにある状態で、「登録」ボタンをクリックするとYES/NOボタンがある確認画面が表示されます。 そこでNOを選択した場合に、直前までフォーカスがあったサブフォームのテキストボックスへフォーカスを戻すにはどうしたら良いでしょうか?

  • サブフォームを利用したクエリーの抽出条件について

    環境:ACCESS2003&XP Pro メインフォーム&サブフォームのフォームを作成しています。 このサブフォームにテキストボックスをつけ、このテキストボックスの値を抽出条件にしたクエリーを作成しましたが、抽出条件がうまくいかないようで クエリー実行時にパラメータを聞いてきます。 クエリーの抽出条件は forms![メインフォーム名].[サブフォーム名].[テキストボックス名] です。 上記の書き方がおかしいのだと思います。 よろしくお願いします。

  • Access2007のサブフォームのRequeryで悩んでいます。。

    Access2007のサブフォームのRequeryで悩んでいます。。 Aメインフォーム Bサブフォーム埋め込みコントロール Cサブフォーム リストボックスう AにBを貼り付けBのソースオブジェクトにCを指定しています。 Cは帳票形式です リストボックスをクリックしたら、 CのRecordSourceにSQLを挿入し、 CをRequeryしていますが、全くRequery出来ていない模様なのです。。 B.SourceObject="C"も試したのですが、全く思った通りのデータが抽出されません。 B.Form.Requery Me.B.Form.Requery どれも試して駄目でした。 CのRecordSourceに直接SQLを貼り付けたら思った通りに出ますが、 Requeryが機能していない気がします。 実行結果は、数件対象データはあるのに、Cの中身は空になります。。。 正しくRequeryする方法、もしくは違うやり方があればご教授頂けないでしょうか?

  • Accessのサブフォームについて

    Accessのサブフォームのテキストボックスをクリックするとメインフォームのテキストボックスにサブフォームのテキストボックスの値を反映させるために以下のロジックを組み込んだ所エラーが発生してしまいました。 調べてみても分かりませんでしたので解決方法が分かる方は教えて下さい。 よろしくお願いします。 ロジック Form!メインフォーム!テキストボックス=サブフォームのテキストボックス エラー 「指定した式で参照されている’メインフォーム’フィールドが見つかりません」 「コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません」