質問: Accessのレコード移動を非連結にて実装したいです。 ■本文 以下のイメージの様にフォームを作成しています。
回答: メインフォームが非連結だとすると、 DoCmd.GotoRecord は使えません。 なぜ非連結にしているのかわかりませんが、非連結の場合、前のレコード、後のレコードというものはありません。クエリもテーブルも連結してないのだから当然です。なので、すべてコードで記述する必要があります。 サブフォームのレコードソースがどうなっているのかわかりませんが、サブフォームの前後の行のレコードに移動してその各フィールドの値をフォームのテキストボックスに表示したいなら、お目当てのレコードのDAO.Recordsetを作り、その各フィールドの値をフォームのテキストボックスに代入する必要があります。 移動ボタンを押したらその都度、です。 また、DAO.Recordsetは作成すると最初のレコードがカレントレコードになるのが仕様なので、何らかの方法でお目当てのレコードに移動する必要があります。通常はIDでしょうが、IDの値を抽出条件にしたSELECT文からDAO.Recordsetを作ることになります。 ところが、非連結のため移動先のIDの値がわかりません。結果、移動はできないということになります。 サブフォームと同じ構造のDAO.Recordsetを開いたままにしておいて、みたいなことは考えられなくもないですが管理がとても煩雑になるはずで、やったことはありません。 非連結フォームは大変手間のかかるやり方、コーディングの量が増えるのでAccessでやる意味がないという人もいるくらいですが、それでもやるメリットは私の場合はあって、実際、単票フォームはめったにない例外を除いてすべて非連結にしていますが、質問のケースは、そのめったにない例外に該当するケースです。 前後のレコードに移動する、というのがそれです。 結論から言うと、ご希望の機能を非連結で実装するのは無理ですね。用意されたボタンは連結フォームでしか意味を持ちません。 あと、このフォームを開いた時は各テキストボックスは空欄だと思いますが、登録済みのデータを呼び出して変更を加えて保存したい場合はどうするんですか? これでできますか? それとも、必要ないですか? どうしても非連結にする必要があるなら、私だったらサブフォームのかわりにリストボックスを使います。そこで選択したレコードをメインフォームに呼び出して表示、これで新規登録も修正もできますけど。 ただし、前後のレコードへの移動という概念はなくなります。