Microsoft Access 掲示板

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

16 コメント
views
4 フォロー
10

ならば考えられる原因は 1 つだけです。

rs.Sort = "日付 ASC, 担当者ID ASC, 残業区分 ASC"

rs!残業区分 = 3

[残業管理ID]の値が 130 であるレコードの[残業区分]の値に 3 を代入( 1 から 3 に変更)した瞬間に、そのレコードが 2 番目から 3 番目のレコードに、[残業管理ID]の値が 95 である([残業区分]の値が 2 である)レコードが 3 番目から 2 番目のレコードになった(レコードセット内での絶対位置が入れ替わった)からです。

【 3 を代入する直前の状態】
画像1

【 3 を代入した直後の状態】
画像2

順番が入れ替わってもその時点でのカレントレコードは[残業管理ID]の値が 130 であるレコードのままなので、その後 MoveNext メソッドを呼び出せばその次( 4 番目)のレコードは[残業管理ID]の値が 85 であるレコードとなります。

回避手段としては、Sort プロパティを使用せず Open メソッドの呼び出し時に「 ORDER BY 句付きの SELECT 文」を渡すことが挙げられます。

rs.Open "SELECT * FROM [tbl残業管理] ORDER BY [日付] ASC, [担当者ID] ASC, [残業区分] ASC", cn, adOpenKeyset, adLockOptimistic
通報 ...
  • 12

    もっとも、「[日付]の値が休日に該当する場合は[残業区分]の値を書き換える」という処理だけに着目するのであれば、そもそもレコードを並べ替えること自体が不要であるとも言えますが。