<なぜ時間がかかるのか?>
現在,施行レースの各馬情報(施行レースサブ各馬), 詳細の各馬情報(詳細サブ各馬), レースタイム, レースタイム入線から騎手出走録を開く時に,かなり時間がかかってしまいます。
騎手出走録は,中にサブフォームとして騎手出走録サブを含んでいます。そして,そのフォームの構造は,馬出走録,馬出走録サブの構造をそのまま採用しています。
サブフォームは,以下のように親フォームとリンクしているもののみのレコードをメモリに呼び出します。
例えば,ミスタートウジン号 が,親フォームに呼び出された場合でも,サブフォームに呼び出されるレコードは,100レースほどです。
ところが,騎手の場合,親フォームに,武騎手などが呼び出された場合,何千レコードもサブフォームに呼び出されてしまいます。
このため,施行レースサブ各馬 から騎手出走録を呼び出す時は,レコード数を減らすために,2000版では,以下のように呼び出しています。(97版では異なっています。)
------------------------------------------------------------------------------------------- Set frmKis = New Form_騎手出走録 frmKis.Filter = "[騎手コード]='" & Me!騎手コード & "'" frmKis.FilterOn = True frmKis!騎手出走録サブ.Form.Filter = "RaceUma.調教師コード = '" & Me!調教師コード & "'" frmKis!騎手出走録サブ.Form.FilterOn = True frmKis.Caption = "騎手出走録 フィルタ:" & Me!騎手名漢字 & " AND " & Me!調教師名漢字 frmKis.Visible = True -------------------------------------------------------------------------------------------
調教師で,フィルタをかけているので,呼び出されるレコードが50ぐらいの時もあります。 ところがレコード数が多いときも少ない時も,一律に時間がかかります。 これは,サブフォームの次の仕様と関係しています。
親フォームにフィルタがかかった時点(つまり,リンクしているフィールドの値が確定した時点)で,サブフォームのレコードが読み込まれる。
ステップ実行してみると,
1. ここ(黄色のところ)で,フォームのコピーを取って,メモリ上に呼び出します。
2. すると,騎手出走録サブフォームの Form_Open が呼び出されます。
3. 親フォームの Form_Open が呼び出されます。
4. 親フォームの Form_Load が呼び出されます。
5. 呼び出し側に戻ってきます。
6. ここ( frmKis.FilterOn = True )で,親フォームにフィルタがかかると ...
7. サブフォームが,ロードされてしまいます。
つまり,サブフォームのフィルタがかかる前に親フォームがロードされるため,親フォームと関連したデータが一時的にすべて読み込まれてしまいます。
また,サブフォームのフィルタを先に On にすると,うまく親フォームが開かなくなります。
以下にあるいずれの方法でも,データが増えてくると辛い構造になります。
------------------------------------------------------------------------------------------- Set frmKis = New Form_騎手出走録 frmKis.Filter = "[騎手コード]='" & Me!騎手コード & "'" frmKis.FilterOn = True frmKis!騎手出走録サブ.Form.Filter = "RaceUma.調教師コード = '" & Me!調教師コード & "'" frmKis!騎手出走録サブ.Form.FilterOn = True frmKis.Caption = "騎手出走録 フィルタ:" & Me!騎手名漢字 & " AND " & Me!調教師名漢字 frmKis.Visible = True ------------------------------------------------------------------------------------------- Set frmKis = New Form_騎手出走録 frmKis.Filter = "[騎手コード]='" & Me!騎手コード & "'" frmKis!騎手出走録サブ.Form.Filter = "RaceUma.調教師コード = '" & Me!調教師コード & "'" frmKis.FilterOn = True frmKis!騎手出走録サブ.Form.FilterOn = True frmKis.Caption = "騎手出走録 フィルタ:" & Me!騎手名漢字 & " AND " & Me!調教師名漢字 frmKis.Visible = True ------------------------------------------------------------------------------------------- Set frmKis = New Form_騎手出走録 frmKis.Filter = "[騎手コード]='" & Me!騎手コード & "'" frmKis!騎手出走録サブ.Form.Filter = "RaceUma.調教師コード = '" & Me!調教師コード & "'" frmKis!騎手出走録サブ.Form.FilterOn = True frmKis.FilterOn = True '※ うまく親フォームにフィルタがかかりません。 frmKis.Caption = "騎手出走録 フィルタ:" & Me!騎手名漢字 & " AND " & Me!調教師名漢字 frmKis.Visible = True -------------------------------------------------------------------------------------------