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

أخوانى و زملائى و أساتذتى الأفاضل :
السلام عليكم و رحمة الله و بركاته
هناك موضوع شائك جدااااا أتمنى طرحه هنا للمناقشة و وضع حل نهائى له 
خاصة : ..........  و أنه طرح فى العديد من المشاركات هنا بالمنتدى ووضعت له حلول .. لكن :
ستندهشون عندما أؤكد لكم أنها جميعها حلولا ليست صحيحة 100% و لاتفضى الى نتائج صحيحة ....
الموضوع : البحث بين تاريخين فى جدول بقاعدة بيانات SQL SERVER DB
ببساطة من يطرح الحل يقدم ذلك من خلال أمرين اما :
كود :
select Date, TotalAllowance from Calculation where EmployeeId = 1 and Date between '2011/02/25' and '2011/02/27
 
 أو من خلال :

كود :
"#"& "select * from [sale2] where [fatora date] >= #" & DTPicker1.Value & "#  and  [fatora date] <= #" & DTPicker2.Value

و فى كلا الأمرين يكون كلاهما مررررررررررررررر !!!!!!
لأن لا يمكن أن تظهر النتائج كاملة بل ان بعض العمليات خلال فترة البحث لا تظهر !!!!
لأن هناك العديد من النقاط يختلف عليها الكثيرين منها :
1- نوع البيانات ( Data Type ) بحقلى التاريخ بقاعدة البيانات : هل DATE أم VARCHARE ؟؟؟
2- هل سيتم التحويل لـ STRING للتاريخ أم لا
3- فورمات التاريخ فى الأداة DTPicker1 و كذلك فورمات التاريخ بقاعدة البيانات سواء فى الادخال أو التسجيل بقاعدة البيانات هل يكون :  DD/MM/YYYY  أم MM/DD/YYYY
الى آخر ذلك من أمور تحرق الدم فى هذا الموضوع !!!!!!!!!!!1
أتمنى أن تطرحوا لنا حلا نهائيا للمشكلة 
الرد }}}}
تم الشكر بواسطة:
#2
السلام عليكم ورحمة الله

أخي الدكتور ياسر

بقي لك حل باستخدام ال Parameters
PHP كود :
Dim query As String "Select * From [table] Where [date] Between @date1 And @date2"
Dim commandSelect As New SqlCommand(querysqlConnection)

commandSelect.Parameters.AddWithValue("@date1"DateTimePicker1.Value.Date)
commandSelect.Parameters.AddWithValue("@date2"DateTimePicker2.Value.Date)
  
الرد }}}}
تم الشكر بواسطة:
#3
أخى العزيز و الغالى مهموم ( و اتمنى أن يزيل الله عنك كل هموم الدنيا ) ...
السؤال هنا : ما هو نوع البيانات بحقول التاريخ فى قاعدة البيانات ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
و بالمناسبة أحد الزملاء هنا طرح الباريميتر كطريق لحل الموضوع و لم يتم اصدار نتائج صحيحة للبحث !!!!!!!!!!!!
الرد }}}}
تم الشكر بواسطة:
#4
وعليكم السلام و رحمة الله و بركاته  

بالنسبة لي  لا يشكل اي مشكله  ،، فقط تعامل  مع  الحقل على أنه  Object  من  نوع  date  و لا تغيره  الى نصي لا في قاعدة البيانات و لا اثناء تمريره الى الاستعلام  ، أيضا اشدد انه من الاجرام لو استخدمت حقل غير النوع date  في تعريف عمود بقاعدة البيانات ،، و ساتي بمثال على ذلك و لكن قبل المثال فيه طريقة كان يستخدمها صديق لي و هي ارحم من ان تحفظ التاريخ بشكل نصي وهو انه يقوم يفصل التاريخ الى ثلاثة حقول  و هي اليوم و الشهر و السنه و يحفظها كقيم رقمية  ثم عند البحث  يقوم  باستخدام قيم رقميه  لعملية الفلتره و لكن هذا غير صحيح في وجهة نظري الشخصيه و غبيه و غير احترافيه تمام و لكن لكل شخص طريقة  على العموم  أنظر للمثال  التالي : 


''' <summary>
'''  الاستعلام عن قائمة عناصر في ( فترات الاجازة ) 
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function getRowsListFromAbsenceTable ( )  As DataTable
 Dim result as Boolean = false 
Dim conStr As  String = "Data Source=MYMS-PC\MYSSQLSERVER;Initial Catalog=MYS-HumanResourcesManagement2015SQL;Trusted_Connection=Yes;"
Dim con As New SqlConnection(conStr)
Dim myreader As SqlDataReader
Dim selectcommand As New SqlCommand("Select   Abs_ID , Abs_empID , Abs_note FROM AbsenceTable  where Abs_Date between  @Par_Abs_start and @Par_Abs_end  ", con)
selectcommand.Parameters.Clear()
selectcommand.Parameters.AddWithValue("@Par_Abs_start", SqlDbType. Date ).Value = DTPAbsstart.Value
selectcommand.Parameters.AddWithValue("@Par_Abs_end", SqlDbType. Date ).Value = DTPAbsend.Value
If con.State = ConnectionState.Open Then con.Close()
con.Open()
Dim dt As New DataTable("AbsenceTable")

dt.Load(selectcommand.ExecuteReader())
If dt.Rows.Count > 0 Then
Return dt 
End if
con.Close()
Return  nothing
End Function 



طبعا هذا الكود للتعامل مع  قاعدة بيانات  SQL server ،  حيث  أنه يجب اتتعلم  كيف ترسل التاريخ على شكل Parameters وليس
بشكل نصي حتى يحافظ التاريخ على تنسيقه و لا تظهر اي مشاكل


لا اعلم لماذا لم يعمل معي تنسيق الأكواد ولكن  قم بنسخه و لصقه في محرر فيجول استديو حتى يتضح لك الكود بشكل صحيح
الرد }}}}
تم الشكر بواسطة:
#5
السلام عليكم ورحمة الله

جزاك الله خير أخي الدكتور ياسر

في قاعدة بيانات Sql Server هناك نوعين هما
نوع Date للتاريخ فقط كما يتعامل معه المثال السابق
ونوع DateTime يشمل الوقت وعند استخدام المثال السابق استخدم فقط DateTimePicker1.Value بدون الإضافة الأخير وهي كلمة Date.


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

أخي الدكتور ياسر

وبالنسبة لعدم اصدار نتائج صحيحة للبحث يكون ذلك عند استخدام النوع DateTime في حين أن المدخلات فقط تاريخ واستخدم معها DateTimePicker1.Value
الرد }}}}
تم الشكر بواسطة:
#6
بالنسبة لكود اخى الفاضل myalsailamy

إقتباس :طبعا هذا الكود للتعامل مع  قاعدة بيانات  SQL server ،  حيث  أنه يجب اتتعلم  كيف ترسل التاريخ على شكل Parameters وليس

بشكل نصي حتى يحافظ التاريخ على تنسيقه و لا تظهر اي مشاكل

لم يعمل !!!!!!!!!!!!!!
واضح ان مش فيه فايدة و الموضوع قعلا دون حل صحيح ....  [b]الموضوع قعلا دون حل صحيح   ....  [b]الموضوع قعلا دون حل صحيح   ....  [b]الموضوع قعلا دون حل صحيح [/b][/b][/b]
الرد }}}}
تم الشكر بواسطة:
#7
أخي الكريم "DR.YASER"
ممكن طلب بسيط؟
اذا موافق ممكن ترفق مثال بسيط (شبيه) لمشروعك مع ملف القاعدة او مواصفاتها حتى اجرب واعطيك التجربة؟

اخي الكريم انا جربت باكسس 2010


لاني لسا مثبت ويندوز 10
ساحاول تثبيت sql server  واجرب ان شاء الله
هذا الكلاس
PHP كود :
Public Class Form1
    Dim str 
As String "provider=microsoft.ace.oledb.12.0;data source=db.accdb"
 
   Dim con As New OleDb.OleDbConnection(str)
 
   Dim sql As String ""


 
   Private Function getlist(ByVal a1 As DateTimeByVal a2 As DateTime) As DataTable
        sql 
"select  *from tb where d between #" a1 "# and #" a2 "#"
 
       Dim cm As New OleDb.OleDbCommand(sqlcon)
 
       If con.State ConnectionState.Closed Then con.Open()
 
       Dim dt As New DataTable
        dt
.Load(cm.ExecuteReader)
 
       getlist dt
    End 
Function


 
   Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        Dim d1 
As DateTime t1.Text
        Dim d2 
As DateTime t2.Text
        d1 
d1.ToShortDateString
        d2 
d2.ToShortDateString
        ListBox1
.DataSource getlist(d1d2)
 
       ListBox1.DisplayMember "tn"
 
   End Sub
End 
Class 


الملفات المرفقة
.zip   JOJO.zip (الحجم : 156.7 ك ب / التحميلات : 23)
أستودعكم الله الذي لا تضيع ودائعه أرجو ان تجدوا بمشاركاتي ما يجعلكم تدعون لي بخير ان تحتم غيابي.
الرد }}}}
تم الشكر بواسطة:
#8
جربت المثال على sql server 2014 النسخة express adv
وهذا الكلاس
PHP كود :
Public Class Form1
    Dim str 
As String "Server=saudpc\sqlexpress;Database=db;Trusted_Connection=True;"
 
   Dim con As New SqlClient.SqlConnection(str)
 
   Dim sql As String ""
 
   Private Function getlist(ByVal a1 As DateByVal a2 As Date) As DataTable
        sql 
"select * from tb where d between '" a1 "' and '" a2 "'"
 
       Dim cm As New SqlClient.SqlCommand(sqlcon)
 
       If con.State ConnectionState.Closed Then con.Open()
 
       Dim dt As New DataTable
        dt
.Load(cm.ExecuteReader)
 
       getlist dt
    End 
Function
 
   Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        Dim d1 
As Date t1.Text
        Dim d2 
As Date t2.Text
        d1 
d1.ToShortDateString
        d2 
d2.ToShortDateString
        ListBox1
.DataSource getlist(d1d2)
 
       ListBox1.DisplayMember "tn"
 
   End Sub
End 
Class 


الملفات المرفقة
.zip   JOJO.zip (الحجم : 157.2 ك ب / التحميلات : 22)
أستودعكم الله الذي لا تضيع ودائعه أرجو ان تجدوا بمشاركاتي ما يجعلكم تدعون لي بخير ان تحتم غيابي.
الرد }}}}
تم الشكر بواسطة:
#9
تعديل بسيط وهو في sql server اخترت نوع date
أستودعكم الله الذي لا تضيع ودائعه أرجو ان تجدوا بمشاركاتي ما يجعلكم تدعون لي بخير ان تحتم غيابي.
الرد }}}}
تم الشكر بواسطة:
#10
يا صاحب السؤال ... هل وجدت حل ؟
تذكر ان نسخ sql server تختلف ففيها انواع تدعم مزايا معينة وتفتقر لاخرى وتوجد انواع او قل نوع متكامل فيه كافة ميزات البحث.
أستودعكم الله الذي لا تضيع ودائعه أرجو ان تجدوا بمشاركاتي ما يجعلكم تدعون لي بخير ان تحتم غيابي.
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] كود البحث لا يظهر اي نتائج ولا اي اخطاء Asmaa adel 1 39 منذ 5 ساعة مضت
آخر رد: ابراهيم النعيمي
  [سؤال] كيف اجعل البرنامج يحفظ بيانات؟ The Light Fire 3 55 أمس, 10:02 PM
آخر رد: ابراهيم النعيمي
  [VB.NET] استدعاء بيانات من الاكسس لل vb.net مهند الموسوي 1 63 أمس, 03:14 PM
آخر رد: مهند الموسوي
  انشاء قاعدة بيانات بإمتداد خاص بك thevirus 0 42 01-12-16, 07:56 PM
آخر رد: thevirus
  [كود] تعديل كود البحث بين تاريخينب hglogtd 2 37 29-11-16, 01:37 AM
آخر رد: hglogtd
  البحث مثل جوجل Samosoft 4 59 29-11-16, 01:35 AM
آخر رد: Samosoft
  خطأ عند البحث khalid475 1 44 28-11-16, 06:23 PM
آخر رد: khalid475
  [سؤال] كود البحث عن طريق اسم naden 1 68 28-11-16, 02:05 PM
آخر رد: Adrees
  [سؤال] مشاركة برنامج متصل بقاعدة بيانات sql على شبكه محلية mohammedbassim 3 79 24-11-16, 11:40 PM
آخر رد: mohammedbassim
  [VB.NET] الاتصال بقاعدة البيانات في التقارير (الكريستال ريبورت) thevirus 2 79 23-11-16, 11:05 AM
آخر رد: thevirus

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم