Microsoft Access 掲示板

ADOでレコードが飛ばされてしまう。 / 13

16 コメント
views
4 フォロー
13
あん 2024/05/02 (木) 11:39:49 b41ab@001b1

sk様
ご提示の
「Sort プロパティを使用せず Open メソッドの呼び出し時に「 ORDER BY 句付きの SELECT 文」を渡すこと」
で出来ました!

debug.printでも95が表示されますし、処理も残業区分が4になってます。

ちなみにレコードの並び替えが必要な理由は、途中略の部分にありますので(おそらく並び替えが必要な処理)

やはり、残業管理ID=130で残業区分=3にして、rs.updateで並び替えが行われているということですかね。

通報 ...
  • 15

    やはり、残業管理ID=130で残業区分=3にして、rs.updateで並び替えが行われているということですかね。

    いえ、「[残業区分]の値に 3 を代入( 1 から 3 に変更)した瞬間」です。
    Update メソッドが呼び出されるより先に並べ替えが行われています。

    Debug.Print "【値の代入前】"
    Debug.Print "[残業管理ID]の値: " & rs![残業管理ID].Value
    Debug.Print "[残業区分]の値: " & rs![残業区分].Value
    Debug.Print "レコードセット内の絶対位置: " & rs.AbsolutePosition
    rs!残業区分.Value = 3
    Debug.Print "【値の代入後】"
    Debug.Print "[残業管理ID]の値: " & rs![残業管理ID].Value
    Debug.Print "[残業区分]の値: " & rs![残業区分].Value
    Debug.Print "レコードセット内の絶対位置: " & rs.AbsolutePosition
    rs.Update
    

    (イミディエイトウィンドウへの出力結果)

    【値の代入前】
    [残業管理ID]の値: 130
    [残業区分]の値: 1
    レコードセット内の絶対位置: 2
    【値の代入後】
    [残業管理ID]の値: 130
    [残業区分]の値: 3
    レコードセット内の絶対位置: 3
    

    以上のように、AbsolutePosition プロパティの値の変化からも今回の現象の原因を説明することができます。

    16

    ご解説ありがとうございます。
    値を代入した瞬間にレコード位置が変わっていたのですか。

    Sortプロパティも良く気を付けて使わなければならないですね。
    Sort設定した瞬間だけ並び替えが行われるのものかと。