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

اضافة سجلات عن طريق حلقة تكرارية


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

السلام عليكم

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

  1.  عدم اضاقة ايام الجمعه والسبت التى تكون ضمن تاريخ البدايه وتاريخ النهايه 
  2.  عدم اضافة تواريخ محدده من جدول أخر و التى تكون ضمن تاريخ البدايه وتاريخ النهايه 

يعنى مثلا

انا عرفت احقق الشرط الاول بس مش عارفة احقق الشرط الثانى المفروض طبقا للمثال المرفق عدم اضافة ايام 

06/01/2022
12/01/2022
13/01/2022

 

مثال.mdb

رابط هذا التعليق
شارك

اتفضلى استبدلى الكود تبعك بهذا الكود 

Dim iDate       As Date
Dim strSQL      As String
Dim isHoliday   As Integer

  For iDate = Me.txtFirstDate To Me.txtLastDate
    If Format(iDate, "w") = 1 Or Format(iDate, "w") = 2 Or Format(iDate, "w") = 3 Or Format(iDate, "w") = 4 Or Format(iDate, "w") = 5 Then
      isHoliday = DCount("*", "tblHolidays", "HolidayDate = " & Format(iDate, "\#mm\/dd\/yyyy\#"))
        If isHoliday <= 0 Then
          strSQL = "INSERT INTO tblDay"
          strSQL = strSQL & " ( DayDate )"
          strSQL = strSQL & " SELECT "
          strSQL = strSQL & " '" & iDate & "';"
            DoCmd.SetWarnings False
              DoCmd.RunSQL strSQL
            DoCmd.SetWarnings True
        End If
    End If
  Next iDate

شرح التعديل

تم الاعلان عن متغير رقمى isHoliday

تم اضافة دالة المجال dcount من  جدول الاعياد tblHolidays فى حالة ان تاريخ العيد او العطلة الرسمية يساوى قيمة المتغير iDate  والذى يتم اسناد تورايخ البدء والانتهاء للحلقة التكرارية اليه
وفى حالة ان القيمة العددية للمتغير isHoliday =0 اى انه لا يوجد اى تاريخ لاى عطلة فى الجدول مسبقا تتساوى مع التاريخ الحالى فى حلقة التكرار
وفى هذه الحالة باستخدام قاعدة  IF  يتم الحاق التاريخ الى الجدول tblDay

طبعا ان كانت القيمة العددية للمتغير isHoliday >0  هذا معناه ان ان التاريخ الحالى فى الحلقة يتساوى مع احد التواريخ فى جدول الاعياد tblHolidays وسوف يتم تجاهل الالحاق لهذا التاريخ وتستمر الحلقة حتى تنتهى من عملها

 

الفكرة أعجبتنى جدا وأكثر ما أعجبنى طريقة أستاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ  @jjafferr

فى كتابة استعلام الالحاق داخل محرر الأكواد

 

تم رفع المرفق بعد التعديل للكود ..

 

مثال-(2).mdb

  • Like 3
رابط هذا التعليق
شارك

مساهمة إضافية بعد مساهمة أستاذنا @ابو جودي وبعد إذنه

Private Sub AddNewDates()
    Dim rst As Recordset
    Dim iDate As Long

    Set rst = CurrentDb.OpenRecordset("tblDay", dbopendynaset)
    
    For iDate = CLng(Me.txtFirstDate) To CLng(Me.txtLastDate)
        If IsNull(DLookup("DayDate", "tblDay", "Clng(DayDate)=" & iDate)) Then
            If Weekday(iDate, vbSunday) < vbFriday Then
                If IsNull(DLookup("HolidayDate", "tblHolidays", "Clng(HolidayDate)=" & iDate)) Then
                    With rst
                        .AddNew
                            !DayDate = iDate
                        .Update
                    End With
                End If
            End If
        End If
    Next iDate
    
    Set rst = Nothing
    MsgBox "Done"
End Sub

 

  • Like 3
رابط هذا التعليق
شارك

الان, AbuuAhmed said:

مساهمة إضافية بعد مساهمة أستاذنا @ابو جودي وبعد إذنه

يا هلا والله كود ولا أروع افضل واسرع 

جزاكم الله خيــــــــــــرا

  • Thanks 1
رابط هذا التعليق
شارك

هذه دالة من الزمن القديم لأبي هادي لعد أي يوم من أيام الأسبوع بين تاريخين وإجراء مني لطريقة استخدامها:
 

Function CountWkDay(ByVal Date1 As Date, _
                    ByVal Date2 As Date, _
                    WkDay As Byte) As Long
    'WeekDay Counter
    Date1 = Date1 - 1
    Date1 = Fix((Date1 + (7 - WkDay)) / 7)
    Date2 = Fix((Date2 + (7 - WkDay)) / 7)
  
    CountWkDay = Date2 - Date1
End Function

Sub CountWkDayTest()
    Dim Date1 As Date
    Dim Date2 As Date
    
    Date1 = DateSerial(2022, 1, 1)
    Date2 = DateSerial(2022, 1, 20)
    
    MsgBox CountWkDay(Date1, Date2, vbFriday) + _
           CountWkDay(Date1, Date2, vbSaturday)
End Sub

 

  • Like 1
رابط هذا التعليق
شارك

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