<なぜ時間がかかるのか?>

現在,施行レースの各馬情報(施行レースサブ各馬), 詳細の各馬情報(詳細サブ各馬), レースタイムレースタイム入線から騎手出走録を開く時に,かなり時間がかかってしまいます。

騎手出走録は,中にサブフォームとして騎手出走録サブを含んでいます。そして,そのフォームの構造は,馬出走録馬出走録サブの構造をそのまま採用しています。

サブフォームは,以下のように親フォームリンクしているもののみのレコードをメモリに呼び出します。

例えば,ミスタートウジン号 が,親フォームに呼び出された場合でも,サブフォームに呼び出されるレコードは,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
-------------------------------------------------------------------------------------------