- ベストアンサー
GoToRecordで次のレコードを表示したい
- Access2007環境でフォームに連結のコントロールと「次へ」ボタンを配置しています。ボタンを押下すると次のレコードが表示されます。
- ボタンウィザードを使用すると、レコード件数が3件ある場合、1/3、2/3、3/3まで移動します。
- 3/3の状態で次へボタンを押下しても新規のレコードへ移動せず、「次のレコードが存在しません」とメッセージが表示されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでも良いのでは? Acc2002でも2010でも動くので2007でも大丈夫かな? Private Sub 前レコード_Click() If Me.CurrentRecord = 1 Then MsgBox "先頭です" Else DoCmd.GoToRecord acDataForm, "フォーム名", acPrevious End If End Sub Private Sub 次レコード_Click() If Me.CurrentRecord = Me.RecordsetClone.RecordCount Then MsgBox "最後です" Else DoCmd.GoToRecord acDataForm, "フォーム名", acNext End If End Sub piroin654 さんのBookMark プロパティは覚えておくと フォームのリクエリなどでレコードが先頭に行ってしまう場合などに 超ベンリです。調べてみてください。
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
No1です。最初の説明が変だったので、 説明を訂正します。 フォームのRecordsetCloneのBookMarkと フォームのBookMarkを使ってレコードセットが EOFあるいはBOFに達したか検知して達したならば それ以上は進まない、という方法をとります。 フォームのレコードの移動は、 フォームのRecordsetCloneのBookMarkと同期 させることにより、フォーム上で移動を 可視化しています。
お礼
フォームのRecordsetCloneのBookMarkというのがあるんですね。 しっかり勉強させていただきます。 ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
この場合はレコードセットのBookMarkと フォームのRecordsetCloneのBookMarkを 使ってレコードセットがEOFあるいはBOFに 達したか検知して達したならばそれ以上は 進まない、という方法をとります。 DAOを使っているので、コード表のツール、参照設定から DAOにチェックをいれてください。 Micrososft DAO 3.6 Object Library のようなものです。チェックをいれたら ↑ボタンで上げられるところまで上げて ください。 最初の、 Dim bk As Variant は、表示のようにフォームモジュールの 最初に設定してください。 ついでに前に戻るのも設定しています。 Option Compare Database Option Explicit Dim bk As Variant Private Sub BTN_次へ_Click() Dim rs As Object Set rs = Me.RecordsetClone If rs.RecordCount > 0 Then rs.Move 1, bk If Not rs.EOF Then bk = rs.Bookmark Me.Bookmark = bk Else MsgBox "これより先にレコードはありません" End If Else MsgBox "レコードがありません" End If rs.Close: Set rs = Nothing End Sub Private Sub BTN_前へ_Click() Dim rs As Object Set rs = Me.RecordsetClone If rs.RecordCount > 0 Then rs.Move -1, bk If Not rs.BOF Then bk = rs.Bookmark Me.Bookmark = bk Else rs.Move 1 MsgBox "これより前にレコードはありません" bk = rs.Bookmark End If Else MsgBox "レコードがありません" End If rs.Close: Set rs = Nothing End Sub
お礼
簡潔でわかりやすいです。 私のコーディングがはずかしいです。 ありがとうございました。