Microsoft Access 掲示板

サブフォームのレコードを更新する際に起こるエラーについて / 7

13 コメント
views
4 フォロー
7
hiroton 2021/07/19 (月) 16:40:04 77018@f966d >> 6

高速化を考えるなら

フォームの Recordset, RecorsetClone, RecordSet.Clone の違いとは?(hatena chipsさん)

データの操作・更新とともにフォームの表示も一緒にやるかどうかでかなり速度が変わります

If .RecordCount = 0 Thenを使うなら「ループ自体を2パターンにする」ですね

If .RecordCount = 0 Then
    For i = 0 To monthNum Step s
        '全部新規登録
    Next
Else
    For i = 0 To monthNum Step s
        .FindFirst "入金月 = " & "#" & DateAdd("m", i, startDate) & "#"
        '(省略)
    Next
End If

新規契約(.RecordCount = 0)の割合が高ければ効果的ですが、正直あまり使う形じゃないかなぁと。もう少し条件を変えて「startDate以上の[入金月]が無ければ」でレコード数チェック(Dcount)するなら実行頻度もあがるかも?


もう一つは、チェックするデータがなくなったら残り全てを登録するという手法もありますが、「チェックしなくていいデータ」(チェックの終えたデータ)をどう表現するかということになるのでちょっと難易度が上がります

まぁ、今回の件だとデータ数はかなり少ないでしょうからチェック手法での差はほとんど出ないと思います。まずは冒頭の「フォームの更新が同時に起こる操作」に注目してみてください

通報 ...
  • 10
    だいふくもち 2021/07/20 (火) 10:24:52 >> 7

    >hirotonさん
    参考資料をありがとうございます!とても分かりやすかったです!
    そもそもRecordsetChoneとRecordset.Cloneの2種類があることをはじめて知りました!
    千件単位のデータを処理すると、処理時間にはっきりと差が出るのですね…
    これからはこの差を念頭に置いて、どの処理を使用すべきかを考えたいと思いました。

    確かにForループを2つに分けた方がごちゃごちゃせず見やすいです!
    そして、「実行頻度の高さから処理方法を考える」という視点を持っていなかったので、肝に銘じました…
    だいたいひとつくらいしか処理するアイデアが浮かばないので
    もっとこうできないかな?と発想を広げられるよう頑張ります!