تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مساعدة البحث بين تاريخين
#1
السلام عليكم
اواجه مشكلة في البحث بين تاريخين
المشروع في المرفقات
مع الشكر مقدماً للجميع


الملفات المرفقة
.rar   Date2Date.rar (الحجم : 1.65 م ب / التحميلات : 31)
اللهم ارحم من أسس هذا المنتدى (اباليث) و أجعل كل علم نافع تعلمناه في هذا المنتدى أجر له و صدقة تنفعه في قبره
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

الحقل عندك في قاعدة البيانات من نوع نصي وليس تاريخ

وأنت تخزن فيه القيمة بحسب ما يوجد بداخل أداة عرض التاريخ والوقت..
فكلما اختلف تنسيق الجهاز سيختلف تنسيق القيمة المخزنة وهذا سيسبب مشاكل بالبحث

فإما أن تبقيه حقل نصي وتصنع دالة تقوم بأخذ التاريخ من الأداة وتحوله لتنسيق رقمي بحيث السنة من اليسار ثم الشهر ثم اليوم..
مثلاً  : 1425/01/25
ويجب أن يكون حفظك للتاريخ في قاعدة البيانات بنفس الصيغة..  لا أن تخزنه من الأداة مباشرة ..

بالتالي إن بحثت بطريقة التاريخ عليك أن تجعل الدالة أيضاً تأخذ التاريخ من الأداتين قبل وبعد..
وتحول صيغ التاريخ إلى نفس الصيغة  .. وستحصل على نتائج كما تتوقع وأكثر..

---------
أو تجعل الحقل من نوع (تاريخ و وقت) وتتعامل معه بالكود على أنه حقل تاريخ
ومهما كانت تنسيق التخزين سيتم البحث عن القيم بين التاريخين كما هو في تفكيرك 
دون الحاجة لصنع أداة تنسق التاريخ قبل الحفظ وقبل البحث ..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: أبووسم , أبووسم
#3
التعامل مع الأمر كـ حقل نصي : 
مثلا نصنع الدالة التي تعيد التاريخ بطريقة الصيغة الرقمية : القيمة الأكبر من اليسار ثم الأصغر عن يمينها فـ الأصغر.. 
أقصد السنين ثم الشهور ثم الأيام ..
كود :
Public Function ReFormatDate(pDate As DateTime) As String
   Return pDate.ToString("yyyy/MM/dd")
End Function

نحتاج التعديل على أكواد الحفظ والبحث ..
كود زر الحفظ  يصبح  :
كود :
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
   Insert_Notes(ID.Text, Ename.Text, UpGrade.Text, ReFormatDate(DateG.Value))
   SelectAll_Notes(dgv_Notes)
   ClearControls()
End Sub

كود زر البحث يصبح :
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   SEARCH2DATE(ReFormatDate(DateTimePicker1.Value), ReFormatDate(DateTimePicker2.Value))
   dgv_Notes.DataSource = DT_SEARCH
End Sub

كود البحث يصبح (قارن بين الأكواد التي تم تعطيلها وبين الأكواد التي حلت محلها):
كود :
'Public Sub SEARCH2DATE(ByVal DateG As Date, ByVal DateG2 As Date)
Public Sub SEARCH2DATE(ByVal DateG As String, ByVal DateG2 As String)
   DT_SEARCH.Clear()
   Dim CMDSEARCH As New OleDbCommand(" SELECT * FROM Notes WHERE DateG >= @DateG AND DateG <= @DateG2", Con)
   CMDSEARCH.Parameters.Clear()
   'CMDSEARCH.Parameters.Add("@DateG", OleDbType.Date).Value = "#" & DateG & "#"
   CMDSEARCH.Parameters.Add("@DateG", OleDbType.Char).Value = DateG
   'CMDSEARCH.Parameters.Add("@DateG2", OleDbType.Date).Value = "#" & DateG2 & "#"
   CMDSEARCH.Parameters.Add("@DateG2", OleDbType.Char).Value = DateG2

   Try
       If Con.State = 1 Then Con.Close()
       Con.Open()
       DT_SEARCH.Load(CMDSEARCH.ExecuteReader)
       Con.Close()
       CMDSEARCH = Nothing
   Catch ex As Exception
       Con.Close()
       MsgBox(Err.Description, MsgBoxStyle.Information)
   Finally
       If Con.State = ConnectionState.Open Then Con.Close()
   End Try
End Sub

بالرغم من أنك كتبت أكواد خطأ - لكن الفيجول بيزك دوت نت لم ينبهك لها وحاول أن يغيرها ويصححها لما يناسب البرنامج
ومع ذلك لم تحصل على ما تريد .. فالخطأ تجاوز حدود الفيجول بيزك.. (لأنه لا يستطيع أن يصحح كل شيء).

وهذه من مشاكل الفيجول بيزك ..  مقارنة بلغات برمجة أخرى كـ السي شارب (كمثال من نفس البيئة)
حيث أن السي شارب تمنعك من إكمال كتابة الكود إن أخطأت بنوع المتغير الذي تستخدمه .. (فكل شيء يجب أن يكون في محله)..

إن كنت لازلت تحت الثلاثين من عمرك، نصيحة توجه لـ السي شارب.. ولا تضيع وقتك بحصر خبرتك في تعلم الفيجول بيزك ..
ومع ذلك فكل شيء تنفذه على السي شارب ستستطيع تنفيذه على الفيجول بيزك(يعني لن تفقد مهارتك في هذه اللغة)..

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

نصيحة / أغتنم وقتك من الآن ..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: أبووسم , أبووسم , salamandal
#4
يعجز لساني عن شكرك

يا أخي طلبت منك حل مشكلة الكود فقط ،، فقدمت الحل و قدمت الطريقة و سهلت فهم المشكلة و طريقة حلها

اسأل الله العظيم في يوم هذا الجمعة ان يرزقك حتى يغنيك و يعطيك حتى يرضيك

الف شكر ولك تحياتي
اللهم ارحم من أسس هذا المنتدى (اباليث) و أجعل كل علم نافع تعلمناه في هذا المنتدى أجر له و صدقة تنفعه في قبره
الرد }}}
تم الشكر بواسطة: Taha Okla



التنقل السريع :


يقوم بقرائة الموضوع: