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


الملفات المرفقة
.rar   WindowsApplication2.rar (الحجم : 108.33 ك ب / التحميلات : 22)
الرد }}}
تم الشكر بواسطة: ابو انس
#2
السلام عليكم ورحمة الله وبركاته
تفضل اخي هذه هي الاكواد والمثال بعد التعديل
كود :
Imports System.Data.OleDb

Public Class Form1
   Dim dt As New DataTable()
   Dim Cmd As New OleDbCommand()
   Public Sub SelectData(Cmb As ComboBox)
       Try
           dt.Clear()
           Cmd = New OleDbCommand("select * from Table1 where datee Between  # 1/1/" & Cmb.Text & "# and # 31/12/" & Cmb.Text & "#", con)
           If con.State = ConnectionState.Open Then con.Close()
           con.Open()
           dt.Load(Cmd.ExecuteReader)
           con.Close()
       Catch ex As Exception
       End Try
   End Sub
   Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
       Dim aa As Byte = 0
       If ComboBox1.Text <> "" Then
           SelectData(ComboBox1) ' مناداة دالة جلب البيانات
           If dt.Rows.Count > 0 Then
               ' هذا الكود مختصر ولكن يجب ان تبقى التكستات متسلسة حسب الاندكس
               For Each c As Control In Me.Controls
                   If TypeOf c Is TextBox Then
                       c.Text = dt.Rows(aa).Item("mouney").ToString()
                       aa += 1
                   End If
               Next
               '' او هذا الكود الطويل
               'TextBox1.Text = dt.Rows(0).Item("mouney").ToString()
               'TextBox2.Text = dt.Rows(1).Item("mouney").ToString()
               'TextBox3.Text = dt.Rows(2).Item("mouney").ToString()
               'TextBox4.Text = dt.Rows(3).Item("mouney").ToString()
               'TextBox5.Text = dt.Rows(4).Item("mouney").ToString()
               'TextBox6.Text = dt.Rows(5).Item("mouney").ToString()
               'TextBox7.Text = dt.Rows(6).Item("mouney").ToString()
               'TextBox8.Text = dt.Rows(7).Item("mouney").ToString()
               'TextBox9.Text = dt.Rows(8).Item("mouney").ToString()
               'TextBox10.Text = dt.Rows(9).Item("mouney").ToString()
               'TextBox11.Text = dt.Rows(10).Item("mouney").ToString()
               'TextBox12.Text = dt.Rows(11).Item("mouney").ToString()
           End If
       End If
   End Sub
End Class


الملفات المرفقة
.zip   WindowsApplication2.zip (الحجم : 129.96 ك ب / التحميلات : 34)
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: ابو انس , العيدروس
#3

شكرا استاذ ابراهيم على المساعدة بارك الله فيك
فقط لو سمحت وجدت ان الحسابات غير مضبوطة لاحظ بعد اذنك فقط كمثال  مجموع شهر January لسنة 2018 من المفروض يكون 11.36 + 25.87 = 37.23
من المفروض بتاكست شهر January تظهر : 37.23
الرد }}}
تم الشكر بواسطة:
#4
السلام عليكم ورحمة الله وبركاته
اخي العيدروس
والله ياأخي لم انتبه الى انه يوجد اكثر من سجل للشهر الواحد ظننت ان كل سجل لشهر لذلك التمس منك العذر
سأحاول ايجاد الكود وسأضع لك الحل بعون الله
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: العيدروس , tryold , أبووسم , أبووسم
#5
(30-01-22, 06:47 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
اخي العيدروس
والله ياأخي لم انتبه الى انه يوجد اكثر من سجل للشهر الواحد ظننت ان كل سجل لشهر لذلك التمس منك العذر
سأحاول ايجاد الكود وسأضع لك الحل بعون الله

بارك الله فيك و يارب بميزان حسناتك
الرد }}}
تم الشكر بواسطة:
#6
السلام عليكم ورحمة الله وبركاته
اخي العيدروس 
اولا نعرف مصفوفة على مستوى كلاس الفورم نضع فيها تاريخ نهاية كل شهر  ونلاحظ ان الشهر الثاني (شباط ) فارغ وسنعطي قيمة له حسب السنة الكبيسة او العادية
كود :
   ' تعريف مصفوفة نهاية تاريخ كل شهر
   Dim MyDate() As String = {"31/1/", "", "31/3/", "30/4/", "31/5/", "30/6/", "31/7/", "31/8/", "30/9/", "31/10/", "30/11/", "31/12/"}
 الان في حدث تغيير الكومبو نكتب الكود التالي
 
كود :
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
     
 Dim da As New OleDbDataAdapter()
 Dim dt As New DataTable()
       Dim lst As New ListBox() ' تعريف ليست بوكس افتراضي
       lst.Items.Clear()
       If ComboBox1.Text <> "" Then
           For b As Byte = 0 To 11
               dt.Clear()
             
             
               If Convert.ToInt32(ComboBox1.Text) Mod 4 = 0 Then
                   MyDate(1) = "29/2/" ' إذا كانت السنة كبيسة

                   Dim date1 As Date = ("1 / " & b + 1 & " / " & ComboBox1.Text)
                   Dim date2 As Date = (MyDate(b) & ComboBox1.Text)
                   da = New OleDbDataAdapter("select mouney from Table1 where datee  between # " & date1.ToString("MM/dd/yyyy") & "# and #" & date2.ToString("MM/dd/yyyy") & "#", con)
                   da.Fill(dt)
               ElseIf Convert.ToInt32(ComboBox1.Text) Mod 4 > 0 Then
                   MyDate(1) = "28/2/"
                   Dim date1 As Date = ("1 / " & b + 1 & " / " & ComboBox1.Text)
                   Dim date2 As Date = (MyDate(b) & ComboBox1.Text)
                   da = New OleDbDataAdapter("select mouney from Table1 where datee  between # " & date1.ToString("MM/dd/yyyy") & "# and #" & date2.ToString("MM/dd/yyyy") & "#", con)
                   da.Fill(dt)
               End If


               If dt.Rows.Count > 0 Then
                   Dim kk As Double = 0
                   For s As Byte = 0 To dt.Rows.Count - 1
                       kk += dt.Rows(s)(0)
                   Next
                   lst.Items.Add(kk.ToString("0.00"))
               Else
                   lst.Items.Add("0.00")
               End If
           Next
       End If
       TextBox1.Text = lst.Items(0)
       TextBox2.Text = lst.Items(1)
       TextBox3.Text = lst.Items(2)
       TextBox4.Text = lst.Items(3)
       TextBox5.Text = lst.Items(4)
       TextBox6.Text = lst.Items(5)
       TextBox7.Text = lst.Items(6)
       TextBox8.Text = lst.Items(7)
       TextBox9.Text = lst.Items(8)
       TextBox10.Text = lst.Items(9)
       TextBox11.Text = lst.Items(10)
       TextBox12.Text = lst.Items(11)
   End Sub
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: tryold , tryold , العيدروس , أبووسم
#7
الهي يبارك فيك استاذ ابراهيم و يرزقك من غير حساب بالفعل تم حل المشكلة و هو المطلبوب بالضبط اشكرك جزيل الشكر فقط لو سمحت و عارف تعبتك معي تجرب تشوفو مع قاعدة بيانات sql هو مع الاكسس يشتغل تمام لكن نفس الجدول و الحقول احولهم ل sql يعطيني خطا incorrect syntax near '01
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#8
السلام عليكم ورحمة الله وبركاته
ويبارك فيك ولك اخي العيدروس ... ولا يهمك الله يقدرنا على فعل الخير
بالنسبة للسيكوال سيرفر  تختلف قليلا جملة الاستعلام وعادة مع السيكوال سيرفر انا استحدم الباراميترات 
المهم اليك الكود 
كود :
' تعريف مصفوفة نهاية تاريخ كل شهر
   Dim MyDate() As String = {"31/1/", "", "31/3/", "30/4/", "31/5/", "30/6/", "31/7/", "31/8/", "30/9/", "31/10/", "30/11/", "31/12/"}
   Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
       
       Dim dt As New DataTable()
     
       Dim Cmd As New SqlCommand()
       Dim lst As New ListBox() ' تعريف ليست بوكس افتراضي
       lst.Items.Clear()
       If ComboBox1.Text <> "" Then
           For b As Byte = 0 To 11
               dt.Clear()


               If Convert.ToInt32(ComboBox1.Text) Mod 4 = 0 Then
                   MyDate(1) = "29/2/" ' أذا كانت السنة كبيسة

                   Dim date1 As Date = ("1 / " & b + 1 & " / " & ComboBox1.Text)
                   Dim date2 As Date = (MyDate(b) & ComboBox1.Text)
                   Cmd = New SqlCommand("select mouney from Table_1 Where datee >= @DD1  And datee <= @DD2", Cn)
                   Cmd.Parameters.Add("@DD1", SqlDbType.Date).Value = date1
                   Cmd.Parameters.Add("@DD2", SqlDbType.Date).Value = date2
                   If Cn.State = ConnectionState.Closed Then Cn.Open()
                   dt.Load(Cmd.ExecuteReader())
                   Cn.Close()
               ElseIf Convert.ToInt32(ComboBox1.Text) Mod 4 > 0 Then
                   MyDate(1) = "28/2/" ' أذا كانت السنة عادية

                   Dim date1 As Date = ("1 / " & b + 1 & " / " & ComboBox1.Text)
                   Dim date2 As Date = (MyDate(b) & ComboBox1.Text)
                   Cmd = New SqlCommand("select mouney from Table_1 Where datee >= @DD1  And datee <= @DD2", Cn)
                   Cmd.Parameters.Add("@DD1", SqlDbType.Date).Value = date1
                   Cmd.Parameters.Add("@DD2", SqlDbType.Date).Value = date2
                   If Cn.State = ConnectionState.Closed Then Cn.Open()
                   dt.Load(Cmd.ExecuteReader())
                   Cn.Close()
               End If

             
               If dt.Rows.Count > 0 Then
                   Dim kk As Double = 0
                   For s As Byte = 0 To dt.Rows.Count - 1
                       kk += dt.Rows(s)(0)
                   Next
                   lst.Items.Add(kk.ToString("0.00"))
               Else
                   lst.Items.Add("0.00")
               End If
           Next
       End If
       Txt_Total_1.Text = lst.Items(0)
       Txt_Total_2.Text = lst.Items(1)
       Txt_Total_3.Text = lst.Items(2)
       Txt_Total_4.Text = lst.Items(3)
       Txt_Total_5.Text = lst.Items(4)
       Txt_Total_6.Text = lst.Items(5)
       Txt_Total_7.Text = lst.Items(6)
       Txt_Total_8.Text = lst.Items(7)
       Txt_Total_9.Text = lst.Items(8)
       Txt_Total_10.Text = lst.Items(9)
       Txt_Total_11.Text = lst.Items(10)
       Txt_Total_12.Text = lst.Items(11)
   End Sub
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: أبووسم
#9
السلام عليكم ورحمة الله وبركاته
وفوق كل ذو علم عليم
في البداية أحمد الله على أني لست ممن لا يتراجعون عن الخطأ او ممن لا يتقبلون نقدا أو رأيا افضل او نصيحة او حلا ولست ممن لا يقبل مشاركة الآخرين في حل مسألة أشارك فيها...
مرة أخرى الرجل الصالح والطيب  المجهول يتدخل ويدلي بخبرته الغنية والثرة لكن هذه المرة قام بإرسال الكود لي بدون ان يضع المشاركة هنا 
فعلا الكود الذي أورده اقوى وأصح واسرع من الكود الذي وضعته أنا حسب معرفتي 
كودي يشبه جهاز روسي ضخم يؤدي عملية 
اما كوده فهو يشبه جهاز غربي بحجم 5% من حجم الجهاز الروسي ويؤدي نفس العملية وبسرعة أضعاف مضاعفة  
بصراحة لم استطع إيجاد استعلام صحيح كما أورده هو .. بسبب قلة معرفتي بالاستعلامات والدوال الممكن استخدامها في الاستعلامات 

كود :
"SELECT MONTH(datee),SUM(mouney) FROM Table1 WHERE YEAR(datee)=@y GROUP BY MONTH(datee)"
 الاستعلام اعلاه أعرفه عدا هذه الجزئية MONTH(datee) - YEAR(datee) والمتعلقة بالشهر والسنة
لذلك لم اوفق في الكود مثل كوده
وحتى تعم الفائدة للجميع هذا هو الكود الذي أرسله لي وهو يعمل مع الاكسس والـ SqlServer

كود :
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  Dim cmd As New SqlCommand("SELECT MONTH(datee),SUM(mouney) FROM Table1 WHERE YEAR(datee)=@y GROUP BY MONTH(datee)", con)
  cmd.Parameters.AddWithValue("@y", ComboBox1.Text)
  Dim da As New SqlDataAdapter(cmd)
  Dim dt As New DataTable
  da.Fill(dt)
  TextBox1.Text = 0
  TextBox2.Text = 0
  TextBox3.Text = 0
  TextBox4.Text = 0
  TextBox5.Text = 0
  TextBox6.Text = 0
  TextBox7.Text = 0
  TextBox8.Text = 0
  TextBox9.Text = 0
  TextBox10.Text = 0
  TextBox11.Text = 0
  TextBox12.Text = 0
  For Each r As DataRow In dt.Rows
      If r.Item(0) = 1 Then TextBox1.Text = r.Item(1)
      If r.Item(0) = 2 Then TextBox2.Text = r.Item(1)
      If r.Item(0) = 3 Then TextBox3.Text = r.Item(1)
      If r.Item(0) = 4 Then TextBox4.Text = r.Item(1)
      If r.Item(0) = 5 Then TextBox5.Text = r.Item(1)
      If r.Item(0) = 6 Then TextBox6.Text = r.Item(1)
      If r.Item(0) = 7 Then TextBox7.Text = r.Item(1)
      If r.Item(0) = 8 Then TextBox8.Text = r.Item(1)
      If r.Item(0) = 9 Then TextBox9.Text = r.Item(1)
      If r.Item(0) = 10 Then TextBox10.Text = r.Item(1)
      If r.Item(0) = 11 Then TextBox11.Text = r.Item(1)
      If r.Item(0) = 12 Then TextBox12.Text = r.Item(1)
  Next
End Sub

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







الرد }}}
تم الشكر بواسطة:
#10
(01-02-22, 02:20 PM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
وفوق كل ذو علم عليم
في البداية أحمد الله على أني لست ممن لا يتراجعون عن الخطأ او ممن لا يتقبلون نقدا أو رأيا افضل او نصيحة او حلا ولست ممن لا يقبل مشاركة الآخرين في حل مسألة أشارك فيها...
مرة أخرى الرجل الصالح والطيب  المجهول يتدخل ويدلي بخبرته الغنية والثرة لكن هذه المرة قام بإرسال الكود لي بدون ان يضع المشاركة هنا 
فعلا الكود الذي أورده اقوى وأصح واسرع من الكود الذي وضعته أنا حسب معرفتي 
كودي يشبه جهاز روسي ضخم يؤدي عملية 
اما كوده فهو يشبه جهاز غربي بحجم 5% من حجم الجهاز الروسي ويؤدي نفس العملية وبسرعة أضعاف مضاعفة  
بصراحة لم استطع إيجاد استعلام صحيح كما أورده هو .. بسبب قلة معرفتي بالاستعلامات والدوال الممكن استخدامها في الاستعلامات 

كود :
"SELECT MONTH(datee),SUM(mouney) FROM Table1 WHERE YEAR(datee)=@y GROUP BY MONTH(datee)"
 الاستعلام اعلاه أعرفه عدا هذه الجزئية MONTH(datee) - YEAR(datee) والمتعلقة بالشهر والسنة
لذلك لم اوفق في الكود مثل كوده
وحتى تعم الفائدة للجميع هذا هو الكود الذي أرسله لي وهو يعمل مع الاكسس والـ SqlServer

كود :
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  Dim cmd As New SqlCommand("SELECT MONTH(datee),SUM(mouney) FROM Table1 WHERE YEAR(datee)=@y GROUP BY MONTH(datee)", con)
  cmd.Parameters.AddWithValue("@y", ComboBox1.Text)
  Dim da As New SqlDataAdapter(cmd)
  Dim dt As New DataTable
  da.Fill(dt)
  TextBox1.Text = 0
  TextBox2.Text = 0
  TextBox3.Text = 0
  TextBox4.Text = 0
  TextBox5.Text = 0
  TextBox6.Text = 0
  TextBox7.Text = 0
  TextBox8.Text = 0
  TextBox9.Text = 0
  TextBox10.Text = 0
  TextBox11.Text = 0
  TextBox12.Text = 0
  For Each r As DataRow In dt.Rows
      If r.Item(0) = 1 Then TextBox1.Text = r.Item(1)
      If r.Item(0) = 2 Then TextBox2.Text = r.Item(1)
      If r.Item(0) = 3 Then TextBox3.Text = r.Item(1)
      If r.Item(0) = 4 Then TextBox4.Text = r.Item(1)
      If r.Item(0) = 5 Then TextBox5.Text = r.Item(1)
      If r.Item(0) = 6 Then TextBox6.Text = r.Item(1)
      If r.Item(0) = 7 Then TextBox7.Text = r.Item(1)
      If r.Item(0) = 8 Then TextBox8.Text = r.Item(1)
      If r.Item(0) = 9 Then TextBox9.Text = r.Item(1)
      If r.Item(0) = 10 Then TextBox10.Text = r.Item(1)
      If r.Item(0) = 11 Then TextBox11.Text = r.Item(1)
      If r.Item(0) = 12 Then TextBox12.Text = r.Item(1)
  Next
End Sub

مرة أخرى لا يسعني الا الدعاء له بالعمر الطويل والصحة والعافية  والرزق الوفير

الله يبارك فيك و لك و يرزقك طول العمر و يرزقك من حيث لا تحتسب
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , ابراهيم ايبو



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


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