質問: はじめまして。 お世話になります。 帳票形式サブフォームのレコード数の増加のタイミングについてご教授ください。 環境 -- 現在Acceess 2016を使用しています。Access2000で作成されたmdbファイルをaccdbファイルに変換して動作チェックを行っております。 現状 -- 0. フォーム1にサブフォーム2を作成しそれぞれフォーム1にはクエリ1、サブフォーム2にはクエリ2をレコードソースとして設定しています。 1. サブフォーム2帳票形式でコンボボックス1から値を選択するとそれをクエリ2から参照して、テキストボックス2に値を代入しています。 2. サブフォーム2上のテキストボックス1に"=Count(*)"と入れていて、そのテキストボックス1の値を条件に条件分岐しています。 3. 自分で調べた所、"=Conut(*)"は、レコードソースの数をカウントするとなっていましたが、クエリ1、クエリ2共に1万件近いデータが入っています。 4. フォーム1を開いた時点では、テキストボックス1の値は0(ゼロ)になっています。 5. サブフォーム2をフォーム1の参照エラーを無視しながら開くと、クエリ2の件数がテキストボックス1に代入されています。 6. テキストボックス2に値が入るとテキストボックスの値は1ずつ増えていきます。 7. VBAをテキストボックス1の名前で検索しても、条件文にしか記載されておらず、どこかでテキストボックス1の値を変えていることはありません。 疑問点 --- 1. 現状から、サブフォームの帳票形式では、コンボボックス1からテキストボックス2に値を入れた(検索された時?)時に、サブフォームで扱うクエリ2のレコード数が決定し、1ずつ増えて行くという認識であっているのでしょうか? 2. もし違っていればどういうタイミングで、帳票形式の"=Count(*)"の数は増加するのでしょうか? 具体的なコードが長いので、抽象的ですが質問させて頂きました。わかりにくくて申し訳ありません。 宜しくお願いいたします。
回答: > > 自分で調べた所、"=Conut(*)"は、レコードソースの数をカウントするとなっていましたが、 > > > その認識は間違いですね。 フォームのレコードセットのレコード件数になります。 いいかえると、フォームに表示されているレコード件数です。 レコードソースの件数とフォームに表示されているレコード件数が同じとは限りません。 フィルターがかかっていたり、サブフォームにリンクフィールドが設定されていると、レコードソースの全件が表示されないですので。 > > フォーム1を開いた時点では、テキストボックス1の値は0(ゼロ)になっています。 > > > その時に、サブフォームにはレコードが表示されていない(レコード件数 0)のでは。 サブフォームのリンク親フィールド、リンク子フィールドが設定されているか、フィルターを掛けるような処理をしていませんか。 > > 現状から、サブフォームの帳票形式では、コンボボックス1からテキストボックス2に値を入れた(検索された時?)時に、サブフォームで扱うクエリ2のレコード数が決定し、1ずつ増えて行くという認識であっているのでしょうか? > > > 新規レコードで入力した後、レコード保存アクションを起こした時にテーブルに追加されます。 レコード保存アクションはいろいろありますが、例えば、レコード移動、レコードセレクタのクリック、Shift+Enter などです。 > > もし違っていればどういうタイミングで、帳票形式の"=Count(*)"の数は増加するのでしょうか? > > > `=Count(*)` の値が変更されるのは、フォームに表示されているレコード件数が変更された時です。 新規レコードを追加した時、既存レコードを削除した時、フィルターの抽出条件が変更されて表示件数が変わった時、などです。