هل يمكن اختصار هذا الكود - blida02 - 27-05-18
السلام عليكم إخوتي،
معرفتي محدودة جدا في البرمجة، وقد استخدمت هذا الكود للحصول على احصائيات من قاعدة البيانات، وهذا نتيجة للبحث عبر محتلف المنتديات
الكود الذي استخدمه يعمل معي، لكن هل يمكن صياغته بطريقة أفضل؟
كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If CheckBox1.Checked = True And CheckBox2.Checked = False Then
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ' ", connDB)
daa1.Fill(dtt1)
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ' ", connDB)
daa2.Fill(dtt2)
DataGridView1.Visible = True
DataGridView1.ColumnCount = 2
DataGridView1.Columns(0).Name = "ذكور"
DataGridView1.Columns(1).Name = "إناث"
DataGridView1.Rows(0).Cells(0).Value = dtt1.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(1).Value = dtt2.Rows(0)(0).ToString()
ElseIf CheckBox2.Checked = True And CheckBox1.Checked = False Then
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '1' ", connDB)
daa1.Fill(dtt1)
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '2' ", connDB)
daa2.Fill(dtt2)
DataGridView1.Visible = True
DataGridView1.ColumnCount = 2
DataGridView1.Columns(0).Name = "السنة الأولى"
DataGridView1.Columns(1).Name = "السنة الثانية"
DataGridView1.Rows(0).Cells(0).Value = dtt1.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(1).Value = dtt2.Rows(0)(0).ToString()
ElseIf CheckBox2.Checked = True And CheckBox1.Checked = True Then
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '1' and (Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ' ) ", connDB)
daa1.Fill(dtt1)
Dim daa12 As New OleDbDataAdapter
Dim dtt12 As New DataTable
daa12 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '1' and (Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ' ) ", connDB)
daa12.Fill(dtt12)
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '2' and (Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ') ", connDB)
daa2.Fill(dtt2)
Dim daa22 As New OleDbDataAdapter
Dim dtt22 As New DataTable
daa22 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '2' and (Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ') ", connDB)
daa22.Fill(dtt22)
DataGridView1.Visible = True
DataGridView1.ColumnCount = 4
DataGridView1.Columns(0).Name = "ذكور السنة الأولى"
DataGridView1.Columns(1).Name = "إناث السنة الأولى"
DataGridView1.Columns(2).Name = "ذكورالسنة الثانية"
DataGridView1.Columns(3).Name = "إناث السنة الثانية"
DataGridView1.Rows(0).Cells(0).Value = dtt1.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(1).Value = dtt12.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(2).Value = dtt2.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(3).Value = dtt22.Rows(0)(0).ToString()
Else
DataGridView1.Visible = False
End If
End Sub
RE: هل يمكن اختصار هذا الكود - حريف برمجة - 27-05-18
ارفق مثال صغير للجزئية هذي .
RE: هل يمكن اختصار هذا الكود - elgokr - 27-05-18
(27-05-18, 03:42 AM)blida02 كتب : السلام عليكم إخوتي،
معرفتي محدودة جدا في البرمجة، وقد استخدمت هذا الكود للحصول على احصائيات من قاعدة البيانات، وهذا نتيجة للبحث عبر محتلف المنتديات
الكود الذي استخدمه يعمل معي، لكن هل يمكن صياغته بطريقة أفضل؟
كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If CheckBox1.Checked = True And CheckBox2.Checked = False Then
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ' ", connDB)
daa1.Fill(dtt1)
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ' ", connDB)
daa2.Fill(dtt2)
DataGridView1.Visible = True
DataGridView1.ColumnCount = 2
DataGridView1.Columns(0).Name = "ذكور"
DataGridView1.Columns(1).Name = "إناث"
DataGridView1.Rows(0).Cells(0).Value = dtt1.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(1).Value = dtt2.Rows(0)(0).ToString()
ElseIf CheckBox2.Checked = True And CheckBox1.Checked = False Then
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '1' ", connDB)
daa1.Fill(dtt1)
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '2' ", connDB)
daa2.Fill(dtt2)
DataGridView1.Visible = True
DataGridView1.ColumnCount = 2
DataGridView1.Columns(0).Name = "السنة الأولى"
DataGridView1.Columns(1).Name = "السنة الثانية"
DataGridView1.Rows(0).Cells(0).Value = dtt1.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(1).Value = dtt2.Rows(0)(0).ToString()
ElseIf CheckBox2.Checked = True And CheckBox1.Checked = True Then
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '1' and (Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ' ) ", connDB)
daa1.Fill(dtt1)
Dim daa12 As New OleDbDataAdapter
Dim dtt12 As New DataTable
daa12 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '1' and (Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ' ) ", connDB)
daa12.Fill(dtt12)
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '2' and (Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ') ", connDB)
daa2.Fill(dtt2)
Dim daa22 As New OleDbDataAdapter
Dim dtt22 As New DataTable
daa22 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE AnnéeEtude = '2' and (Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ') ", connDB)
daa22.Fill(dtt22)
DataGridView1.Visible = True
DataGridView1.ColumnCount = 4
DataGridView1.Columns(0).Name = "ذكور السنة الأولى"
DataGridView1.Columns(1).Name = "إناث السنة الأولى"
DataGridView1.Columns(2).Name = "ذكورالسنة الثانية"
DataGridView1.Columns(3).Name = "إناث السنة الثانية"
DataGridView1.Rows(0).Cells(0).Value = dtt1.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(1).Value = dtt12.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(2).Value = dtt2.Rows(0)(0).ToString()
DataGridView1.Rows(0).Cells(3).Value = dtt22.Rows(0)(0).ToString()
Else
DataGridView1.Visible = False
End If
End Sub
بالتاكيد يمكن تقليل عدد الاسطر من الاكواد
ولكن لاعتماد ذلك سيتوجب عليك بناء Class
لعملية الاتصال باعدة البيانات واخرى لعملية الاستعلامات
حيث يمكن من Function واحد من داخل Class الاستعلامات
استخدامة على هيئة كلمتين فى سطر ويقوم بعديد من الاستعلام
حيث فى كل مرة تستدعي يقوم بتنفيذ استعلام معين داخل جدول محدد
على سبيل المثال كود بهذا الشكل
كود :
aaa = cls_data.count("*","Etudiants", 2)
وهو نفسه تستخدمه فى لجدول اخر او قيم مختلفة مثل
كود :
bbb = cls_data.count("ID","OtherTable", "ذكر")
فتخيل حجم استخدام الكود فى الاستعلام
بينما العام تستخدم
مرة بهذا الشكل
كود :
Dim daa1 As New OleDbDataAdapter
Dim dtt1 As New DataTable
daa1 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ' ", connDB)
daa1.Fill(dtt1)
واخري بهذا الشكل
كود :
Dim daa2 As New OleDbDataAdapter
Dim dtt2 As New DataTable
daa2 = New OleDbDataAdapter("SELECT count(*) from Etudiants WHERE Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ' ", connDB)
daa2.Fill(dtt2)
حتى تتمكن من معرة اكثر حاول الاطلاع على العديد من الدروس
فى بناء مشاريع او يكون دروس مخصصة عن هذا الموضوع
لا يهم قيامك بناء العديد من المشاريع
وكل مشروع بطرق مختلفة فى بناء الاتصال والاستعلام
الاهم هو ان تطلع على عدد اكبر لطرق التعامل والاستفادة منها
من ثم تحديد مسيرة تعاملك مع طريقة الكتابة للاكواد
لا يهم ان الدروس التى قد تطلع عليها يقوم بناء مشروع بنس فكرة مشروعك
فى كلا الاحوال بناء اى مشروع مبني على
استعلام / اضافة / تعديل / حذف بقاعدة البيانات
وهى الاهم انه كيف كل شخص بيتعامل فى الشرح مع هذا
تحياتى لك
وتمنياتى لك التوفيق
RE: هل يمكن اختصار هذا الكود - mrnooo2000 - 27-05-18
بالتأكيد يمكن اختصاره بطرق كثيرة
مثلا أنت لا تحتاج الى جدول
بل يمكنك ادراج القيمة مباشرة الى الداتا جريد
لاحظ هذا هو كود الجزء الاول من كودك بعد تعديله
كود :
connDB.Open()
DataGridView1.ColumnCount = 2
DataGridView1.Columns(0).Name = "ذكور"
DataGridView1.Columns(1).Name = "إناث"
Dim cmd As New OleDbCommand("SELECT count(*) from Etudiants WHERE Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ'", connDB)
DataGridView1.Rows(0).Cells(0).Value = cmd.ExecuteScalar
cmd = New OleDbCommand("SELECT count(*) from Etudiants WHERE Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ'", connDB)
DataGridView1.Rows(0).Cells(1).Value = cmd.ExecuteScalar
connDB.Close()
و هذه طريقة أخرى ربما تكون أكثر اختصارا و لكن ستعطى النتائج بشكل أفقى
كود :
DataGridView1.ColumnHeadersVisible = False
DataGridView1.AllowUserToAddRows = False
Dim dt As New DataTable
Dim adp As New OleDbDataAdapter("SELECT count(*) as idcount,'ذكور' as idtext from Etudiants WHERE Sexe = '1' OR Sexe = 'M' OR Sexe = 'ذ' _
union all SELECT count(*) as idcount,'إناث' as idtext from Etudiants WHERE Sexe = '2' OR Sexe = 'F' OR Sexe = 'أ'"", connDB)
adp.Fill(dt)
DataGridView1.DataSource = dt
اذا كنت تريد اختصار كامل الكود يفضل ادراج ملف قاعدة البيانات للتعديل عليه مباشرة
RE: هل يمكن اختصار هذا الكود - blida02 - 29-05-18
مشكورين إخوتي على التعاون وهذا هو الملف
RE: هل يمكن اختصار هذا الكود - mrnooo2000 - 29-05-18
ضع هذا الكود فى حدث الزر
كود :
Dim Qry As String = "SELECT Etudiants.Sexe, Etudiants.AnnéeEtude, IIf([Sexe]='1' Or [Sexe]='M' Or [Sexe]='ذ','ذكور','إناث') AS ss, IIf([AnnéeEtude]='1','السنة الأولى','السنة الثانية') AS yy, [ss] & ' ' & [yy] AS AA FROM Etudiants"
Dim SS As String = ""
If CheckBox1.Checked = True Then
SS = "Select Count([QQ].Sexe) As Counts, [QQ].ss FROM (" & Qry & ") AS [QQ] GROUP BY [QQ].ss;"
End If
If CheckBox2.Checked = True Then
If CheckBox1.Checked = True Then
SS = "Select Count([QQ].Sexe) As Counts, [QQ].AA FROM (" & Qry & ") AS [QQ] GROUP BY [QQ].AA;"
Else
SS = "Select Count([QQ].AnnéeEtude) As Counts, [QQ].yy FROM (" & Qry & ") AS [QQ] GROUP BY [QQ].yy;"
End If
End If
DataGridView1.ColumnHeadersVisible = False
Dim dt As New DataTable
Dim adp As New OleDbDataAdapter(SS, conn)
adp.Fill(dt)
DataGridView1.DataSource = dt
RE: هل يمكن اختصار هذا الكود - blida02 - 29-05-18
الله يجزيك ألف خير أخي الكريم
حقا أنت مبدع، وقد تعلمت كثيرا من مشاركتك.
|