ACCESSでRequeryを行っても一覧の状態が変わらないようにするには?(2)
ADPでは、MDBと異なりサブフォーム・コントロール名に対しRequeryを実行すると、なぜか復元できないようです。
ADPのバグなのか、仕様なのか定かではありませんが….
しかも、Bookmarkでの復元も、ADPでは正確に元の状態に戻らないようです。
その為、別も方法で復元する方法を考えてみました。
本来ならば、表示されている先頭レコード番号が取得できれば良いのですが残念ながら提供されていません。
詳細セクションの高さ、選択レコードの高さから表示されている先頭レコード番号を求めます。
◆サンプルソース
Dim Top, Top1, Top2 As Long Dim TopRecNo As Long Me.Painting = False '画面描画をOFFにする Me![埋め込み1].SetFocus '現在選択しているレコード番号を保存 CurrentRecNo = Me![埋め込み1].Form.CurrentRecord '現在選択しているレコードの高さ保存 Top = Me![埋め込み1].Form.CurrentSectionTop '1レコードを移動させてそれぞれの高さを保存 If Me![埋め込み1].Form.CurrentRecord = 1 Then Top1 = Me![埋め込み1].Form.CurrentSectionTop DoCmd.GoToRecord acActiveDataObject, , acNext Top2 = Me![埋め込み1].Form.CurrentSectionTop Else DoCmd.GoToRecord acActiveDataObject, , acPrevious Top1 = Me![埋め込み1].Form.CurrentSectionTop DoCmd.GoToRecord acActiveDataObject, , acNext Top2 = Me![埋め込み1].Form.CurrentSectionTop End If '表示されている先頭のレコード番号を求める TopRecNo = CurrentRecNo - Int(Top / (Top2 - Top1)) '整数化することによる誤差を補正する If TopRecNo < 1 Then TopRecNo = 1 End If '再クエリー実行 Me![埋め込み1].Requery '表示位置を復元します。 DoCmd.GoToRecord acActiveDataObject, , acLast DoCmd.GoToRecord acActiveDataObject, , acGoTo, TopRecNo DoCmd.GoToRecord acActiveDataObject, , acGoTo, CurrentRecNo
◆サンプルDB Download