تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
هل يمكن اختصار هذا الكود
#1
السلام عليكم إخوتي،
معرفتي محدودة جدا في البرمجة، وقد استخدمت هذا الكود للحصول على احصائيات من قاعدة البيانات، وهذا نتيجة للبحث عبر محتلف المنتديات
الكود الذي استخدمه يعمل معي، لكن هل يمكن صياغته بطريقة أفضل؟

كود :
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
الرد
تم الشكر بواسطة:
#2
ارفق مثال صغير للجزئية هذي .
الرد
تم الشكر بواسطة: sendbad100
#3
(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)

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

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

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

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: ابو روضة , sendbad100 , sendbad100
#4
بالتأكيد يمكن اختصاره بطرق كثيرة 
مثلا أنت لا تحتاج الى جدول 
بل يمكنك ادراج القيمة مباشرة الى الداتا جريد 

لاحظ هذا هو كود الجزء الاول من كودك بعد تعديله 

كود :
           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


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


الملفات المرفقة
.rar   expdev - Copie.rar (الحجم : 1.49 م ب / التحميلات : 45)
الرد
تم الشكر بواسطة:
#6
ضع هذا الكود فى حدث الزر 

كود :
       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
الرد
تم الشكر بواسطة: sendbad100 , elgokr
#7
الله يجزيك ألف خير أخي الكريم
حقا أنت مبدع، وقد تعلمت كثيرا من مشاركتك.
الرد
تم الشكر بواسطة: elgokr



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


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