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

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

  • أفضل إجابة
قام بنشر (معدل)

وعليكم السلام اخي @عمار العبيدي ,,

 

سأقدم لك طريقتين ، ولكن أولاً علينا تصحيح الأخطاء التي في النموذج "استعلام6" وهي انك جعلت مصدر البيانات للكومبوبوكس "السنة و الشهر" من نفس الاستعلام .

 

على العموم ، الطريقتين تعتمدان على تغيير مصدر بيانات الكومبوبوكسين . مع تغيير مصدر السجلات لهما بحيث يجلبان فقط رقم السنة ورقم الشهر  حسب الكومبوبوكس 

1.png.9e09cf48951da7d4be417dd71e5b7c23.png

الآن من خلال الـ VBA وهي الطريقة الأولى قمت بادخال الاستعلام في الدالة التالية :-

Private Sub MonthCounter()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim MonthNum As Long
    If IsNull(Me.السنة) Or IsNull(Me.الشهر) Then
        Me.عدد_الأشهر_المتجاوزة = Null
        Exit Sub
    End If
    strSQL = "SELECT Count(*) AS عدد_الأشهر_المتجاوزة " & _
             "FROM جدول2 " & _
             "WHERE Year([بداية الاجازة]) = " & Me.السنة & " " & _
             "AND Month([بداية الاجازة]) = " & Me.الشهر & " " & _
             "AND ((DateDiff('d',[بداية الاجازة],[نهاية الاجازة])+1)>3 " & _
             "OR (DateDiff('m',[بداية الاجازة],[نهاية الاجازة])+1)>0)"
    Set db = CurrentDb
    Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
    If Not rst.EOF Then
        MonthNum = rst!عدد_الأشهر_المتجاوزة
    Else
        MonthNum = 0
    End If
    Me.عدد_الأشهر_المتجاوزة = MonthNum
    rst.Close
    Set rst = Nothing
    Set db = Nothing
End Sub

ويتم استدعائها في حدث بعد التحديث للكومبوبوكس ( السنة و الشهر )

Private Sub السنة_AfterUpdate()
    Call MonthCounter
End Sub

Private Sub الشهر_AfterUpdate()
    Call MonthCounter
End Sub

 

والنتيجة في النموذج "استعلام6"

 

أما الطريقة الثانية ، فتعتمد على الدالة DCount باستعلام داخلي داخل مصدر بيانات مربع النص "عدد_الأشهر_المتجاوزة" . بحيث يكون مصدر بياناته هذه الجملة الاستعلامية :-

=IIf(IsNull([السنة]) Or IsNull([الشهر]),0,Nz(DCount("*","جدول2","Year([بداية الاجازة]) = " & [السنة] & " AND Month([بداية الاجازة]) = " & [الشهر] & " AND ((DateDiff('d',[بداية الاجازة],[نهاية الاجازة])+1)>3 OR (DateDiff('m',[بداية الاجازة],[نهاية الاجازة])

وهي تقوم بحساب عدد السجلات التي تتطابق مع الشرط .

ولسلامة القيمة الظاهرة في مربع النص "عدد_الأشهر_المتجاوزة" قمت باستعمال الدالة الشرطية IIF مع IsNull حتى لا تعود لك النتيجة في المربع بالقيمة Error بل بالقيمة 0 .

الملف بعد التعديل ( Database2.accdb )

 

تم تعديل بواسطه Foksh
تصحيح خطأ مطبعي

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information