السلام عليكم اخواني برجاء المساعدة من فضلكم
عندي جدول به حقل للتاريخ و حقل للمبلغ
عندي فورم به السنوات و 12 تاكست بكس كل تكست بكس مخصص لشهر من شهور السنة
اريد لما اختار السنة من الكومبوبوكس تتوزعلي في التاكسات بكس مجموع المبالغ حسب كل شهر و بارك الله فيكم
السلام عليكم ورحمة الله وبركاته
تفضل اخي هذه هي الاكواد والمثال بعد التعديل
كود :
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
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
شكرا استاذ ابراهيم على المساعدة بارك الله فيك
فقط لو سمحت وجدت ان الحسابات غير مضبوطة لاحظ بعد اذنك فقط كمثال مجموع شهر January لسنة 2018 من المفروض يكون 11.36 + 25.87 = 37.23
من المفروض بتاكست شهر January تظهر : 37.23
السلام عليكم ورحمة الله وبركاته
اخي العيدروس
والله ياأخي لم انتبه الى انه يوجد اكثر من سجل للشهر الواحد ظننت ان كل سجل لشهر لذلك التمس منك العذر
سأحاول ايجاد الكود وسأضع لك الحل بعون الله
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
(30-01-22, 06:47 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
اخي العيدروس
والله ياأخي لم انتبه الى انه يوجد اكثر من سجل للشهر الواحد ظننت ان كل سجل لشهر لذلك التمس منك العذر
سأحاول ايجاد الكود وسأضع لك الحل بعون الله
30-01-22, 07:05 PM (آخر تعديل لهذه المشاركة : 30-01-22, 07:23 PM {2} بواسطة ابراهيم ايبو.)
السلام عليكم ورحمة الله وبركاته
اخي العيدروس
اولا نعرف مصفوفة على مستوى كلاس الفورم نضع فيها تاريخ نهاية كل شهر ونلاحظ ان الشهر الثاني (شباط ) فارغ وسنعطي قيمة له حسب السنة الكبيسة او العادية
كود :
' تعريف مصفوفة نهاية تاريخ كل شهر
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
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
31-01-22, 01:13 AM (آخر تعديل لهذه المشاركة : 31-01-22, 04:13 AM {2} بواسطة العيدروس.)
الهي يبارك فيك استاذ ابراهيم و يرزقك من غير حساب بالفعل تم حل المشكلة و هو المطلبوب بالضبط اشكرك جزيل الشكر فقط لو سمحت و عارف تعبتك معي تجرب تشوفو مع قاعدة بيانات sql هو مع الاكسس يشتغل تمام لكن نفس الجدول و الحقول احولهم ل sql يعطيني خطا incorrect syntax near '01
31-01-22, 10:33 PM (آخر تعديل لهذه المشاركة : 01-02-22, 09:18 AM {2} بواسطة ابراهيم ايبو.)
السلام عليكم ورحمة الله وبركاته
ويبارك فيك ولك اخي العيدروس ... ولا يهمك الله يقدرنا على فعل الخير
بالنسبة للسيكوال سيرفر تختلف قليلا جملة الاستعلام وعادة مع السيكوال سيرفر انا استحدم الباراميترات
المهم اليك الكود
كود :
' تعريف مصفوفة نهاية تاريخ كل شهر
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
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
01-02-22, 02:20 PM (آخر تعديل لهذه المشاركة : 01-02-22, 03:45 PM {2} بواسطة ابراهيم ايبو.)
السلام عليكم ورحمة الله وبركاته
وفوق كل ذو علم عليم
في البداية أحمد الله على أني لست ممن لا يتراجعون عن الخطأ او ممن لا يتقبلون نقدا أو رأيا افضل او نصيحة او حلا ولست ممن لا يقبل مشاركة الآخرين في حل مسألة أشارك فيها...
مرة أخرى الرجل الصالح والطيب المجهول يتدخل ويدلي بخبرته الغنية والثرة لكن هذه المرة قام بإرسال الكود لي بدون ان يضع المشاركة هنا
فعلا الكود الذي أورده اقوى وأصح واسرع من الكود الذي وضعته أنا حسب معرفتي
كودي يشبه جهاز روسي ضخم يؤدي عملية
اما كوده فهو يشبه جهاز غربي بحجم 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
مرة أخرى لا يسعني الا الدعاء له بالعمر الطويل والصحة والعافية والرزق الوفير
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
(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
مرة أخرى لا يسعني الا الدعاء له بالعمر الطويل والصحة والعافية والرزق الوفير
الله يبارك فيك و لك و يرزقك طول العمر و يرزقك من حيث لا تحتسب