السلام عليكم ورحمة الله وبركاتة
اخواني الافاضل انا الان لدي مشكلة لا اعرف كيف احلها
انا الان املك فترتين زمنيتين ،، لكل فتره عدد 2 تيكست بوكس لادخال التاريخ
الفترة الاول لها تاريخ بداية وتاريخ نهاية
والفترة الثانية لها تاريخ بداية وتاريخ نهاية
لنفترض انني وضعت الفترة الاولى هذين التاريخين
البداية 15/9/2013 والنهاية 20/9/2013
و الفترة الثانية كانت كذلك
البداية 19/9/2013 والنهاية 30/9/2013
اريد ان تظهر رساله لانه كما تلاحظون الفترة الثانية تعارضت مع الفتره الاولى بيوم واحد
ياريت لو تساعدوني فى تطبيق الكود
ماهي المشكلة لو كل فترة بمثابة عمود في جدول؟
يعني جدول مثلا باسم tbl_first_time يحتوي عمودين :البداية والنهاية
وكذلك بالنسبة للجدول الاخر...اعتذر لو اني فهمت خطا.
(25-10-13, 09:46 AM)سعود كتب : [ -> ]ماهي المشكلة لو كل فترة بمثابة عمود في جدول؟
يعني جدول مثلا باسم tbl_first_time يحتوي عمودين :البداية والنهاية
وكذلك بالنسبة للجدول الاخر...اعتذر لو اني فهمت خطا.
ربنا يكرمك على محاولتك لمساعدتي شكرا لك
بصراحة لم افهم كيف سأستطيع التحقق من تعارض التواريخ لو وضعت كل تاريخ فى عمود
انا سأشرح لك الفكره مره اخرى
الان انا لدي قاعدة بيانات اسجل فيها دورات الموظفين
بمعنى الاخ سعود سيحصل على دوره شبكات خلال الفتره من 5/9/2013 حتى 29/9/2013
الان اريد ان ارشحك لدورة اخرى ،، فأريد ان يظهر رساله لو كانت تتعارض مع الدورة الاخرى
يعني مثلاً لو هارشحك هذه لدورة برمجة فى الفترة من 25/9/2013 حتى 10/10/2013
ستجد ان التواريخ تعارضت و الان انت ستحضر دورتين فى نفس الفترة لانه تم التعارض فى الايام التاليه (25/26/27/28/29) بين الدورتين
إن شاء الله تكون وضحت الفكره اكتر
وشاكر لك مساعدتك
السلام عليكم ورحمة الله وبركاته
تفضل أخي الكريم
1- ضع أداتي مربع نص
2- ضع أداة زر
3- ثم قم بإضافة هذا الكود:
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim New_Date(3) As Date
TextBox1.Text = "البداية 15/9/2013 والنهاية 20/9/2013"
Dim Reg As MatchCollection = Regex.Matches(TextBox1.Text, "\d{1,2}/\d{1,2}/\d{4}")
For I As Integer = 0 To Reg.Count - 1
Dim SpliDate As String() = Reg.Item(I).Value.Split("/")
New_Date(I) = New Date(Val(SpliDate(2)), Val(SpliDate(1)), Val(SpliDate(0)), New System.Globalization.GregorianCalendar)
Next
TextBox2.Text = "البداية 19/9/2013 والنهاية 30/9/2013"
Reg = Regex.Matches(TextBox2.Text, "\d{1,2}/\d{1,2}/\d{4}")
For I As Integer = 0 To Reg.Count - 1
Dim SpliDate As String() = Reg.Item(I).Value.Split("/")
New_Date(I + 2) = New Date(Val(SpliDate(2)), Val(SpliDate(1)), Val(SpliDate(0)), New System.Globalization.GregorianCalendar)
Next
If New_Date(2) < New_Date(1) Then
MsgBox("هناك تداخل بين التاريخين ومقداره:" & (New_Date(1) - New_Date(2)).TotalDays)
End If
End Sub
بالتوفيق
جزاك الله خيرا اخي الفاضل بارك الله فيك
ولكن فى مشكلة
وهي عند وضع الاكواد ظهرت الاخطاء التالية
[
attachment=492]
وجزاك الله عنا خيراً
السلام عليكم ,,
تم حل الـ Error بوضع الـ Imports System.Text.RegularExpressions
ولكن لدي إستفسار ..
الان يجب كتابة القيمتين فى التيكست بوكس الاول و القيمتين فى التيكست بوكس الثاني
هل يمكن عمل عدد 4 تيكست بوكس ,, وجعل التيكست بوكس رقم 1 خاص ببداية الفترة الثانية والتيكست بوكس رقم 2 خاص بنهاية الفترة الاولى
والتيكست بوكس رقم 3 لبداية الفترة الثانية و التيكست بوكس رقم 4 يكون لنهاية الفترة الثانية ؟
وجزاكم الله خيرا
السلام عليكم...
بالنسبة إلى اختبار التعارض يمكننا إنشاء دالة لهذا الغرض:
كود :
Public Module DateServices
Public Structure SDateInterval
Dim StartDate As Date ' تاريخ بداية الفترة
Dim EndDate As Date ' تاريخ نهاية الفترة
End Structure
' دالة الاختبار
Public Function IntervalConflict(ByVal Period1 As SDateInterval, ByVal Period2 As SDateInterval) As Boolean
If ((Period1.StartDate >= Period2.StartDate) And (Period1.StartDate <= Period2.EndDate)) Or _
((Period1.EndDate >= Period2.StartDate) And (Period1.EndDate <= Period2.EndDate)) Then
Return True ' تعارض
Else
Return False ' لا يوجد تعارض
End If
End Function
End Module
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Period1 As SDateInterval
Dim Period2 As SDateInterval
' القيم التالية للتجربة - يمكن قراءتها من مربعات نص أو غيرها
Period1.StartDate = #10/1/2013#
Period1.EndDate = #10/15/2013#
Period2.StartDate = #10/13/2013#
Period2.EndDate = #10/28/2013#
If IntervalConflict(Period2, Period1) Then
MsgBox("Conflicts")
Else
MsgBox("No conflict")
End If
End Sub
End Class
* لا يهم ترتيب الفترتين عند استدعاء الدالة.
بالنسبة إلى طريقة إدخال القيم فإنه يمكنك استعمال مربعات النص أو DateTimePicker.
نرجو الاستفادة و السلام.