بطء في جلب البيانات - مصمم هاوي - 06-05-25
لمـاذا البطء في جلب البيانـات في الداتا قريدفيو على الرغم من البيانات لا تتعدي 10 اسطر
كود :
Private Sub FillCCourses()
' صب عرض الدرجــات حسب اســم المـادة
If DataGridView1.Rows.Count = 0 Then Exit Sub
For i As Integer = 0 To DataGridView1.Rows.Count - IIf(DataGridView1.AllowUserToAddRows, 2, 1)
DataGridView1.Rows(i).Cells(4).Value = ""
DataGridView1.Rows(i).Cells(5).Value = ""
DataGridView1.Rows(i).Cells(6).Value = ""
Next
For i As Integer = 0 To DataGridView1.Rows.Count - IIf(DataGridView1.AllowUserToAddRows, 2, 1)
Dim clasIndex As Integer = FormMin.ListBoxClas.SelectedIndex + 1
Dim roomIndex As Integer = Me.Combroom.SelectedIndex + 1
Dim sql As String = "select stID, on" & CombCourses.SelectedIndex + 1 & ", to" & CombCourses.SelectedIndex + 1 & ", tr" & CombCourses.SelectedIndex + 1 & " from TBL_Final1 where IDStudent=" & DataGridView1.Rows(i).Cells(0).Value & " and IDClas=" & FormMin.ListBoxClas.SelectedIndex + 1 & " and ClassroomID=" & Me.Combroom.SelectedIndex + 1 & " and SemesterID=" & Trim$(CombSemester.Text)
Dim cm As New OleDb.OleDbCommand(sql, Con)
cm.Parameters.AddWithValue("IDStudent", DataGridView1.Rows(i).Cells(0).Value)
cm.Parameters.AddWithValue("IDClas", FormMin.ListBoxClas.SelectedIndex + 1)
cm.Parameters.AddWithValue("ClassroomID", Me.Combroom.SelectedIndex + 1)
cm.Parameters.AddWithValue("SemesterID", Trim$(CombSemester.Text))
Try
If Con.State = ConnectionState.Closed Then Con.Open()
Dim dr As OleDb.OleDbDataReader = cm.ExecuteReader
If dr.Read Then
DataGridView1.Rows(i).Cells(4).Value = dr(1)
DataGridView1.Rows(i).Cells(5).Value = dr(2)
DataGridView1.Rows(i).Cells(6).Value = dr(3)
End If
dr.Close()
Catch ex As Exception
MessageBox.Show("خطأ: " & ex.Message)
Finally
If Con.State = ConnectionState.Open Then Con.Close()
End Try
Next
End Sub
واستخدمت هذا الكود ولكن لم يضبط معي
كود :
' صب عرض الدرجــات حسب اســم المـادة
If DataGridView1.Rows.Count = 0 Then Exit Sub
Dim sql As String = "select IDStudent, on" & CombCourses.SelectedIndex + 1 & ", to" & CombCourses.SelectedIndex + 1 & ", tr" & CombCourses.SelectedIndex + 1 & " from TBL_Final1 where IDClas=@IDClas and ClassroomID=@ClassroomID and SemesterID=@SemesterID"
Dim dt As New DataTable()
Using Con As New OleDb.OleDbConnection("...")
Con.Open()
Using cmd As New OleDb.OleDbCommand(sql, Con)
cmd.Parameters.AddWithValue("@IDClas", FormMin.ListBoxClas.SelectedIndex + 1)
cmd.Parameters.AddWithValue("@ClassroomID", Me.Combroom.SelectedIndex + 1)
cmd.Parameters.AddWithValue("@SemesterID", Trim$(CombSemester.Text))
Using adapter As New OleDb.OleDbDataAdapter(cmd)
adapter.Fill(dt)
End Using
End Using
End Using
For Each row As DataRow In dt.Rows
For i As Integer = 0 To DataGridView1.Rows.Count - 1
If DataGridView1.Rows(i).Cells(0).Value.ToString() = row("IDStudent").ToString() Then
DataGridView1.Rows(i).Cells(4).Value = row(1)
DataGridView1.Rows(i).Cells(5).Value = row(2)
DataGridView1.Rows(i).Cells(6).Value = row(3)
Exit For
End If
Next
Next
RE: بطء في جلب البيانات - مصمم هاوي - 06-05-25
هذا مثال لمشكلة بطء جلب البيانات في الداتا قريدفيو
اختر الفصل الأول من الليست بوكس في الفورم الرئيسي
ثم اختر من الكومبوكس أعمال الفصل
ومن قائمــة رصد الدرجـات - أعمال الفصل
وفي الفورم FormSemester1
اختر من الكومبوكس Combroom - اسم القسم (عام)
ثم من الكومبوكس CombCourses - اختر أي مادة
سوف تلاحظ بطء في جلب البيانات
[attachment=30076]
RE: بطء في جلب البيانات - princelovelorn - 06-05-25
جرب الكود بالطريقة التالية
كود :
Private Sub FillCCourses()
' صب عرض الدرجــات حسب اســم المـادة
If Con.State = ConnectionState.Closed Then Con.Open()
If DataGridView1.Rows.Count = 0 Then Exit Sub
For i As Integer = 0 To DataGridView1.Rows.Count - IIf(DataGridView1.AllowUserToAddRows, 2, 1)
DataGridView1.Rows(i).Cells(4).Value = ""
DataGridView1.Rows(i).Cells(5).Value = ""
DataGridView1.Rows(i).Cells(6).Value = ""
Dim clasIndex As Integer = FormMin.ListBoxClas.SelectedIndex + 1
Dim roomIndex As Integer = Me.Combroom.SelectedIndex + 1
Dim sql As String = "select stID, on" & CombCourses.SelectedIndex + 1 & ", to" & CombCourses.SelectedIndex + 1 & ", tr" & CombCourses.SelectedIndex + 1 & " from TBL_Final1 where IDStudent=" & DataGridView1.Rows(i).Cells(0).Value & " and IDClas=" & FormMin.ListBoxClas.SelectedIndex + 1 & " and ClassroomID=" & Me.Combroom.SelectedIndex + 1 & " and SemesterID=" & Trim$(CombSemester.Text)
Dim cm As New OleDb.OleDbCommand(sql, Con)
cm.Parameters.AddWithValue("IDStudent", DataGridView1.Rows(i).Cells(0).Value)
cm.Parameters.AddWithValue("IDClas", FormMin.ListBoxClas.SelectedIndex + 1)
cm.Parameters.AddWithValue("ClassroomID", Me.Combroom.SelectedIndex + 1)
cm.Parameters.AddWithValue("SemesterID", Trim$(CombSemester.Text))
Try
Dim dr As OleDb.OleDbDataReader = cm.ExecuteReader
If dr.Read Then
DataGridView1.Rows(i).Cells(4).Value = dr(1)
DataGridView1.Rows(i).Cells(5).Value = dr(2)
DataGridView1.Rows(i).Cells(6).Value = dr(3)
End If
dr.Close()
Catch ex As Exception
MessageBox.Show("خطأ: " & ex.Message)
Finally
End Try
Next
If Con.State = ConnectionState.Open Then Con.Close()
End Sub
RE: بطء في جلب البيانات - مصمم هاوي - 06-05-25
(06-05-25, 07:57 PM)princelovelorn كتب : جرب الكود بالطريقة التالية
كود :
Private Sub FillCCourses()
' صب عرض الدرجــات حسب اســم المـادة
If Con.State = ConnectionState.Closed Then Con.Open()
If DataGridView1.Rows.Count = 0 Then Exit Sub
For i As Integer = 0 To DataGridView1.Rows.Count - IIf(DataGridView1.AllowUserToAddRows, 2, 1)
DataGridView1.Rows(i).Cells(4).Value = ""
DataGridView1.Rows(i).Cells(5).Value = ""
DataGridView1.Rows(i).Cells(6).Value = ""
Dim clasIndex As Integer = FormMin.ListBoxClas.SelectedIndex + 1
Dim roomIndex As Integer = Me.Combroom.SelectedIndex + 1
Dim sql As String = "select stID, on" & CombCourses.SelectedIndex + 1 & ", to" & CombCourses.SelectedIndex + 1 & ", tr" & CombCourses.SelectedIndex + 1 & " from TBL_Final1 where IDStudent=" & DataGridView1.Rows(i).Cells(0).Value & " and IDClas=" & FormMin.ListBoxClas.SelectedIndex + 1 & " and ClassroomID=" & Me.Combroom.SelectedIndex + 1 & " and SemesterID=" & Trim$(CombSemester.Text)
Dim cm As New OleDb.OleDbCommand(sql, Con)
cm.Parameters.AddWithValue("IDStudent", DataGridView1.Rows(i).Cells(0).Value)
cm.Parameters.AddWithValue("IDClas", FormMin.ListBoxClas.SelectedIndex + 1)
cm.Parameters.AddWithValue("ClassroomID", Me.Combroom.SelectedIndex + 1)
cm.Parameters.AddWithValue("SemesterID", Trim$(CombSemester.Text))
Try
Dim dr As OleDb.OleDbDataReader = cm.ExecuteReader
If dr.Read Then
DataGridView1.Rows(i).Cells(4).Value = dr(1)
DataGridView1.Rows(i).Cells(5).Value = dr(2)
DataGridView1.Rows(i).Cells(6).Value = dr(3)
End If
dr.Close()
Catch ex As Exception
MessageBox.Show("خطأ: " & ex.Message)
Finally
End Try
Next
If Con.State = ConnectionState.Open Then Con.Close()
End Sub
باركــ الله فيكـــــ أخـي الحبيب princelovelorn
أفضـل من قبــل بكثير
خيرٌ من سرعـــة السُلحفاة هههههههه
RE: بطء في جلب البيانات - princelovelorn - 06-05-25
إقتباس :باركــ الله فيكـــــ أخـي الحبيب princelovelorn
أفضـل من قبــل بكثير
خيرٌ من سرعـــة السُلحفاة هههههههه
اللهم أمين وإياكم أخي
الحمد لله والشكر لله
RE: بطء في جلب البيانات - Zuhare - 07-05-25
تاكد انك لا تستدعي جلب البيانات اكثر مره
RE: بطء في جلب البيانات - مصمم هاوي - 07-05-25
(07-05-25, 10:02 AM)Zuhare كتب : تاكد انك لا تستدعي جلب البيانات اكثر مره
أجرب المرفق وأخبرك بالنتيجة
الأساتذة الكرام
princelovelorn
Zuhare
صنيعكم جميل طوق عنقي
أخي Zuhare
التعديل في منتهى الروعة وجاء بالنتيجة التي كنت أريدها بالضبط
فلا شلت يمينك أنت والأخ الفاضل المفضال
princelovelorn
RE: بطء في جلب البيانات - مصمم هاوي - 08-05-25
أخي Zuhare
قمت بإفراغ جدول الدرجات ثم استدعاء بيانات الطلبة فلاخظت الٱتي:
أولا: لم يتم جلب البيانات من جدول الطلاب.
والمفروض يجب جلب البيانات حسب الصف والقسم حتى يتم تسجيل الدرجات حسب المادة ورقم الامتحان.
ثانيا: يتم استدعاء الدرجات حسب IDSemester
والمادة المختار
في العموم لو تم تعديل المثال وفق المطلوب فحتما سيكون مثالا ممتازا
RE: بطء في جلب البيانات - Taha Okla - 08-05-25
ملاحظة :
عند طلب تنفيذ كود بحلقة تكرارية عليك مراعات :
- عدم تكرار الأكواد التي لا داعي لها ضمن الحلقة (في المثال هنا - فتح واغلاق قاعدة البيانات مع كل دورة لا داعي له).
- لا تستخدم عناصر من نافذة أو كائن مرئي، استبدلها بمتغيرات. :
. يعني عليك استخدام متغيرات تقوم باسناد قيم العناصر المرئية لتلك المتغيرات.. ثم تقوم بتنفيذ الحلقة التكرارية على تلك المتغيرات وليس الكائنات المرئية.
. الفرق بين سرعة استخدام حلقة تكرارية لمتغيرات عن كائنات مرئية أكثر من 20 ضعف بل هذا رقم صغير جداً بالنسبة لبعض الأجهزة وستلاحظ هذا بوضوح كلما كبر أو كثر عدد السجلات.
في كودك هذا استخدمت عناصر مرئية منها :
CombCourses.SelectedIndex
FormMin.ListBoxClas.SelectedIndex
Me.Combroom.SelectedIndex
CombSemester.Text
بإمكانك تخزين كل واحدة منها في متغير - قبل الدخول للحلقة ومن ثم تستخدم المتغير.
DataGridView1.Rows(i).Cells(0).Value
بإمكانك تخزين القيم ضمن مصفوفة قبل الدخول للحلقة وتستخدم المصفوفة ضمن الحلقة.
RE: بطء في جلب البيانات - مصمم هاوي - 08-05-25
نصيحة بجمل
1. تخزين القيم في متغيرات قبل الدخول للحلقة:
Dim C As Integer = FormMin.ListBoxClas.SelectedIndex
Dim R As Integer = Me.Combroom.SelectedIndex
Dim S As String = CombSemester.Tex
2. ' تخزين القيم في مصفوفة قبل الدخول للحلقة
Dim valuesArray(dt.Rows.Count - 1, 3) As Object
For i As Integer = 0 To dt.Rows.Count - 1
valuesArray(i, 0) = dt.Rows(i).Item(0).ToString
valuesArray(i, 1) = dt.Rows(i).Item(1).ToString
valuesArray(i, 2) = dt.Rows(i).Item(2).ToString
valuesArray(i, 3) = dt.Rows(i).Item(3).ToString
Next
|