تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مثال للبحث بين تاريخين مشكلة تستحق الاهتمام
#21
(27-12-16, 05:27 PM)مساعدة كتب : السلام عليكم

جرب التعديل التالي في المرفق الذي بداية الموضوع
فهو لا يتأثر بتنسيق النظام
كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       dt.Clear()

       da = New OleDbDataAdapter("select * from جدول1 where تاريخ between @d1 and @d2 ", cn)
       da.SelectCommand.Parameters.AddWithValue("@d1", DateTimePicker1.Value.Date)
       da.SelectCommand.Parameters.AddWithValue("@d2", DateTimePicker2.Value.Date)
       da.Fill(dt)
       Me.DataGridView1.DataSource = dt

   End Sub

نعم اخى الفاضل هو كود بسيط جدا و قام بالمطلوب انا  اضفت كومبوبوكس جديد لبحث عن اسم عميل ( ناتج بحث عميل بين تاريخين ) ممكن تضيف هذا السطر و شكرا  جزيلا لك و لكل المشاركين
الرد }}}
تم الشكر بواسطة:
#22
لم أجد كومبوبوكس في المشروع لكن اعتمد نفس الطريقة مع البارامترات مع ما تفضل به أستاذ محمود بكرى إذا كان اسم الجدول او العمود يوجد فيه مسافة
فإذا كان يوجد مسافة فأمامك حلين
الأول أن تعدل الاسم في قاعدة البيانات وتستبدل المسابقة بالخط السفلي _
الثاني أن تضع الاسم بين أقواس [ ] تريد الوضع كما هو بالمسافة

وهذا مثال
كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       dt.Clear()

       da = New OleDbDataAdapter("SELECT * FROM [جدول1] WHERE [اسم العميل] = @cn AND [تاريخ] BETWEEN @dt1 AND @dt2 ", cn)
       da.SelectCommand.Parameters.AddWithValue("@cn", ComboBox1.Text)
       da.SelectCommand.Parameters.AddWithValue("@dt1", DateTimePicker1.Value.Date)
       da.SelectCommand.Parameters.AddWithValue("@dt2", DateTimePicker2.Value.Date)
       da.Fill(dt)
       Me.DataGridView1.DataSource = dt

   End Sub

كما تلاحظ كل الاسماء وضعتها بين اقواس احتياطات سواء بها مسافات أم لا وأيضا كما تلاحظ كلمات SQL جعلتها بالأحرف الكبير ومثل ما تلاحظ أوضح عند النظر للكود
الرد }}}
تم الشكر بواسطة: محمود بكرى
#23
(27-12-16, 06:08 PM)مساعدة كتب : لم أجد كومبوبوكس في المشروع لكن اعتمد نفس الطريقة مع البارامترات مع ما تفضل به أستاذ محمود بكرى إذا كان اسم الجدول او العمود يوجد فيه مسافة
فإذا كان يوجد مسافة فأمامك حلين
الأول أن تعدل الاسم في قاعدة البيانات وتستبدل المسابقة بالخط السفلي _
الثاني أن تضع الاسم بين أقواس [ ] تريد الوضع كما هو بالمسافة

وهذا مثال
كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       dt.Clear()

       da = New OleDbDataAdapter("SELECT * FROM [جدول1] WHERE [اسم العميل] = @cn AND [تاريخ] BETWEEN @dt1 AND @dt2 ", cn)
       da.SelectCommand.Parameters.AddWithValue("@dt1", DateTimePicker1.Value.Date)
       da.SelectCommand.Parameters.AddWithValue("@dt2", DateTimePicker2.Value.Date)
       da.SelectCommand.Parameters.AddWithValue("@cn", ComboBox1.Text)
       da.Fill(dt)
       Me.DataGridView1.DataSource = dt

   End Sub

كما تلاحظ كل الاسماء وضعتها بين اقواس احتياطات سواء بها مسافات أم لا وأيضا كما تلاحظ كلمات SQL جعلتها بالأحرف الكبير ومثل ما تلاحظ أوضح عند النظر للكود

اخى وضعط لك مثال  للتعديل علية فى المرفقات


الملفات المرفقة
.rar   البحث بين تاريخين.rar (الحجم : 250.02 ك ب / التحميلات : 40)
الرد }}}
تم الشكر بواسطة:
#24
تفضل التعديل

لم تقم بعمل dt.Clear كما في الكود السابق لهذا قد لا ترى تغييرات في النتيجة

كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        dt.Clear()
  
        da = New OleDbDataAdapter("SELECT * FROM [جدول1] WHERE ([اسم_العميل] = @cn) AND ([تاريخ] BETWEEN @dt1 AND @dt2) ", cn)
        da.SelectCommand.Parameters.AddWithValue("@cn", ComboBox1.Text)
        da.SelectCommand.Parameters.AddWithValue("@dt1", DateTimePicker1.Value.Date)
        da.SelectCommand.Parameters.AddWithValue("@dt2", DateTimePicker2.Value.Date)
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt

    End Sub

الخطأ كان في ترتيب البارامترات يجب أن تتوافق مع مكانها في نص الاستعلام، أعتذر

تم تعديل الخطأ في المشاركة السابقة في ترتيب البارامترات

ملاحظة: جميع مشاريعك لم تعمل لدي لاختلاف الاصدار ولكن اعتمدت على النظر في الكود بعد سحبه لمشروع شكلي في الفجوال فقط، فالخطأ وارد،
الرد }}}
تم الشكر بواسطة:
#25
(27-12-16, 07:30 PM)مساعدة كتب : تفضل التعديل

لم تقم بعمل dt.Clear كما في الكود السابق لهذا قد لا ترى تغييرات في النتيجة

كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       dt.Clear()
 
       da = New OleDbDataAdapter("SELECT * FROM [جدول1] WHERE ([اسم_العميل] = @cn) AND ([تاريخ] BETWEEN @dt1 AND @dt2) ", cn)
       da.SelectCommand.Parameters.AddWithValue("@cn", ComboBox1.Text)
       da.SelectCommand.Parameters.AddWithValue("@dt1", DateTimePicker1.Value.Date)
       da.SelectCommand.Parameters.AddWithValue("@dt2", DateTimePicker2.Value.Date)
       da.Fill(dt)
       Me.DataGridView1.DataSource = dt

   End Sub

الخطأ كان في ترتيب البارامترات يجب أن تتوافق مع مكانها في نص الاستعلام، أعتذر

تم تعديل الخطأ في المشاركة السابقة في ترتيب البارامترات

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

اخى الفاضل انت مشكور على مجهودك  و جزاكم  الله خيرا الكود يعمل جيدا .
و 50 % من فكرتي تفضلتم بمساعدتى لاتمامها مشكور اخى و مشكور جميع الاساتذة الكرام على مجهوداتهم .

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

فامامنا طريقين 
1- اما ان نعتمد على الداتا سيت فى  البحث و فى حالة استدعاء البيانات على التقرير سوف يتم رفع ما ظهر على الداتا جريد فيو

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

و انا افضل الطريقة الاولى لانى تعودة على استخدام التقارير و عرضها من خلال الداتا ست .

فرجاء لو لديك طريقة للبحث عن عميل محدد بين تاريخين داخل داتا ست فقد اتممت جميلك اخى 

مشكورين اخوتى
الرد }}}
تم الشكر بواسطة:
#26
تفضل هذه المحاولة
لاحظت انك تعتمد على الاستعلام (جدول1_استعلام)
كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim query As IEnumerable(Of adxDataSet.جدول1_استعلامRow) =
           AdxDataSet.جدول1_استعلام.
           Where(Function(x As adxDataSet.جدول1_استعلامRow) x.اسم_العميل.Equals(ComboBox1.Text) And
                     x.تاريخ >= DateTimePicker1.Value.Date And x.تاريخ <= DateTimePicker2.Value.Date)

       If query.Count > 0 Then
           Me.DataGridView1.DataSource = query.CopyToDataTable
       End If

   End Sub

بالنسبة للتقارير كل ما عليك ربط ناتج الاستعلام query بالتقرير مثل ما تم ربطه هنا مع الداتاجريدفيو
الرد }}}
تم الشكر بواسطة:
#27
(27-12-16, 10:54 PM)مساعدة كتب : تفضل هذه المحاولة
لاحظت انك تعتمد على الاستعلام (جدول1_استعلام)
كود :
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim query As IEnumerable(Of adxDataSet.جدول1_استعلامRow) =
           AdxDataSet.جدول1_استعلام.
           Where(Function(x As adxDataSet.جدول1_استعلامRow) x.اسم_العميل.Equals(ComboBox1.Text) And
                     x.تاريخ >= DateTimePicker1.Value.Date And x.تاريخ <= DateTimePicker2.Value.Date)

       If query.Count > 0 Then
           Me.DataGridView1.DataSource = query.CopyToDataTable
       End If

   End Sub

بالنسبة للتقارير كل ما عليك ربط ناتج الاستعلام query بالتقرير مثل ما تم ربطه هنا مع الداتاجريدفيو

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

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


   Dim report As New CrystalReport1

        report.SetDataSource(AdxDataSet)

        Form2.CrystalReportViewer1.ReportSource = report
        Form2.Show()
الرد }}}
تم الشكر بواسطة:
#28
حسنا، كما أخبرتك ان تربط ناتج اللاستعلام بالتقرير
نفس الكود السابق ولكن جزء If سيكون هكذا
كود :
If query.Count > 0 Then
    Dim report As New CrystalReport1

    report.SetDataSource(query.CopyToDataTable)

    Form2.CrystalReportViewer1.ReportSource = report
    Form2.Show()
End If
الرد }}}
تم الشكر بواسطة:
#29
(28-12-16, 02:15 AM)مساعدة كتب : حسنا، كما أخبرتك ان تربط ناتج اللاستعلام بالتقرير
نفس الكود السابق ولكن جزء If سيكون هكذا
كود :
If query.Count > 0 Then
   Dim report As New CrystalReport1

   report.SetDataSource(query.CopyToDataTable)

   Form2.CrystalReportViewer1.ReportSource = report
   Form2.Show()
End If

السلام عليكم اخى كود التقرير اعطانى هذا الخطاء انظر الصورة

الرد }}}
تم الشكر بواسطة:
#30
لكن تفضل الكود
كود :
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim query As IEnumerable(Of adxDataSet.جدول1_استعلامRow) =
        AdxDataSet.جدول1_استعلام.
        Where(Function(x As adxDataSet.جدول1_استعلامRow) x.اسم_العميل.Equals(ComboBox1.Text) And
                     x.تاريخ >= DateTimePicker1.Value.Date And x.تاريخ <= DateTimePicker2.Value.Date)

    If query.Count > 0 Then
       Dim report As New CrystalReport1

        report.SetDataSource(query.CopyToDataTable)

        Form2.CrystalReportViewer1.ReportSource = report
        Form2.Show()
    End If

   End Sub
الرد }}}
تم الشكر بواسطة: nabil.1710



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


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