وعليكم السلام ورحمة الله وبركاته ..
بعد الإطلاع مرتين على الملف المرفق وطريقة عملك عليه ، جرب الحدثين التاليين في الأزرار ..
Private Sub a1_Click()
Dim curID As Long
Dim nxt As Variant
If Nz(Me.ek, "") = "" Then
curID = Me.no_rece + 1
Else
curID = CLng(Me.ek)
End If
nxt = DMin("no_rece", "enar_dman", "no_rece > " & curID)
If Not IsNull(nxt) Then
Me.ek = nxt
Me.Requery
Else
MsgBox "لا يوجد سجل تالي", vbInformation + vbMsgBoxRight, ""
End If
End Sub
Private Sub a2_Click()
Dim curID As Long
Dim prv As Variant
If Nz(Me.ek, "") = "" Then
curID = Me.no_rece - 1
Else
curID = CLng(Me.ek)
End If
prv = DMax("no_rece", "enar_dman", "no_rece < " & curID)
If Not IsNull(prv) Then
Me.ek = prv
Me.Requery
Else
MsgBox "لا يوجد سجل سابق", vbInformation + vbMsgBoxRight, ""
End If
End Sub
طبعاً قد تحتاج لزر "سجل جديد" إذا كان النموذج الحالي إدخال البيانات .
وهذه الفكرة بدلاً من التكرار للحدثين في الزرين ،يمكن دمجهم في دالة واحدة والإستدعاء فقط من خلال الزرين يميز السابق والتالي :-
Private Sub a1_Click()
GoToRecord True
End Sub
Private Sub a2_Click()
GoToRecord False
End Sub
Private Sub GoToRecord(isNext As Boolean)
Dim curID As Long
Dim newID As Variant
Dim fld As String: fld = "no_rece"
If Nz(Me.ek, "") = "" Then
If isNext Then
curID = Me(fld) + 1
Else
curID = Me(fld) - 1
End If
Else
curID = CLng(Me.ek)
End If
If isNext Then
newID = DMin(fld, "enar_dman", fld & " > " & curID)
Else
newID = DMax(fld, "enar_dman", fld & " < " & curID)
End If
If Not IsNull(newID) Then
Me.ek = newID
Me.Requery
Else
If isNext Then
MsgBox "لا يوجد سجل تالي", vbInformation + vbMsgBoxRight, ""
Else
MsgBox "لا يوجد سجل سابق", vbInformation + vbMsgBoxRight, ""
End If
End If
End Sub
test.zip