اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

السلام عليكم ,,  زملائي الاكابر اريد مساعده في التنقل بين السجلات فيي النموذج الفرعي (بدون امر Requery) لانه بيعمل مشاكل في الارقام وشكرا

انا عملت طريقه بالتنقل  

Me.ek = Me.ek - 1
DoCmd.Requery

--------

Me.ek = Me.ek - 1
DoCmd.Requery
ولكن بتعمل مشاكل  بالارقام عند التنقل او البحث

مرفق

test.accdb

قام بنشر (معدل)

وعليكم السلام ورحمة الله وبركاته ..

بعد الإطلاع مرتين على الملف المرفق وطريقة عملك عليه ، جرب الحدثين التاليين في الأزرار ..

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

تم تعديل بواسطه Foksh
إضافة فكرة تقلل التكرار ..
قام بنشر

بالإضافة إلى ماذكره الأخ @Foksh يمكنك العمل برقم السجل بدلا من رقم الحساب

مرفق لك مثالك بعد التعديل حيث قمت بإضافة مربع نص يظهر رقم السجل الحالي ويمكنك إدخال رقم السجل المطلوب للإنتقال إليه مباشرة بالإضافة إلى زري تنقل قمت بإنشائهما عن طريق المعالج بشكل طبيعي

تحياتي

test.accdb

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information