تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[كود] الاتصال وقراءه البيانات من قاعده بيانات اكسس حجمه كبير وتحتوى على الالف البيانات
#14
اللي ظاهر عندك في جهازك .. غير اللي عم يظهر عندي في جهازي ...
الترتيب مختلف التسميات مختلفة ..
تعرض أسماء المحافظات تحت عمود اسم القرية ..
وأسماء القرى تحت اسم المحافظة ...
وكذلك خطأ بعرض المديريات والعزلات ..




ربما الخطأ لأنك تستخدم اسماء أعمدة عربية ..  وهذا خطأ جسيم  مع البرمجة ...  (لا تستخدم تسميات بغير اللغة الانكليزية أثناء كتابة الكود سواء كان برمجي أو استعلامي)..

أولاً - اختيار مسميات عربية (له نصيب وافر من تبطيء البيانات)..  هذا أول سبب للبطىء..



ثانياً - على فرض أنك قمت بتصحيح المسميات وجعلت كل مسمى في محله ...
والأفضل أن تسميها باللانكليزية --
اذهب إلى قاعدة البيانات وسميها من جديد :  فتصبح ..

المعرف : ID1
المحافظة : Governorate
المديرية : Directorate
العزلة : Isolation1
القرية : Village
وضعنا الرقم واحد (بجانب بعض المسميات لأنها أسماء محجوزة فغيرنا بها كي لا نقع بمشكلة عدم التوافق مع قاعدة البيانات)
بعد إعادة التسمية شاهد ولاحظ  : هل كل عمود يشير على محتواه من بيانات .... اذا كان لا فصحح  -- واذا صحيح فأكمل معنا..



ثالثاً - اذهب إلى البرنامج (المشروع) ..
ضمن خصائص الأداة (DataGridView1)  ــ  الخاصية (AutoSizeColumnsMode)  أنت وضعتها على (Fill)  والأفضل أن تكون على (None)
وفي الكود ضمن كود تحميل النافذة أنت وضعت الخاصية (AutoSizeRowsMode)  على (AllCells)   والأفضل أن تكون على (None)

التغيير بالخصائص أعلاه :
كأنك تقول للبرنامج اكتب سطر في الــ DataGridView1 ثم نسق الخليا خلية خلية.. وهكذا مع كل سطر يضاف لجدول العرض ..

وهذا خطأ أثناء تعبئة البيانات الكبيرة     --   وهذا هو الخطأ الثاني عندك  والمسبب الأكبر لبطئ عرض البيانات أثناء البحث.

الأسلم والأفضل والأسرع بعد كتابة البيانات أن تقوم بجعل أي عمود من الأعمدة بعرض معين
يعني أجعل العمود الأول يساوي 10 والثاني يساوي 20 والثالث.... إلخ
قيمة تقدرها أنت بحسب حاجة عرض العمود من بيانات ..
فهذه العملية تأخذ منك سطر واحد من الكود لكل عمود .. أي وقت (أربع أسطر)
بينما تنسيق بحسب الخلايا يأخ منك تنفيذ أكواد بعدد أسطر النتيجة ضرب عدد الأعمدة
فلو كان عندك 60 نتيجة فالأكواد المنفذة هي (60 ضرب 4 ضرب 2) = أي وقت 480 سطر من الاكواد على أقل تحديد
فهل وقت تنفيذ 4 أسطر يساوي أو يقارب وقت تنفيذ 480 سطر



رابعاً - كخطوة نحو كود أفضل :
أضف Module  جديد وضع فيه الكود التالي :
كود :
Imports System.Data.OleDb


Module Module1

   Public Function tDataTable(pConn As OleDbConnection, sSQLSelect As String) As DataTable
       If pConn.State <> ConnectionState.Open Then pConn.Open()
       '---------------------------------------------------------
       Dim fCmd As New OleDbCommand(sSQLSelect, pConn)
       Dim fDt As New DataTable

       fDt.Load(fCmd.ExecuteReader())
       '---------------------------------------------------------
       If pConn.State <> ConnectionState.Closed Then pConn.Close()
       '---------------------------------------------------------
       If fDt.Rows.Count > 0 Then
           Return fDt
       Else
           Return Nothing
       End If
       '---------------------------------------------------------
   End Function

   Public Sub LoadDataToComboBox(cboBox1 As ComboBox, pConn As OleDbConnection, strSQLFilter As String ,pTableName As String)
       If pConn.State <> ConnectionState.Open Then pConn.Open()
       '---------------------------------------------------------
       cboBox1.ValueMember = pTableName
       cboBox1.DisplayMember = pTableName

       cboBox1.DataSource = tDataTable(pConn, strSQLFilter)
       '---------------------------------------------------------
       If pConn.State <> ConnectionState.Closed Then pConn.Close()
       '---------------------------------------------------------
   End Sub

End Module



خامساً -    اذهب لنافذة المشروع وأضف عليها :

اضف ثلاث CmboBox
ComboBox1    وفوقها ليبل  (المحافظة)
ComboBox2   وفوقها ليبل  (المديرية)
ComboBox3   وفوقها ليبل  (العزلة)

ضمن كود حدث تحميل الفورم يصبح الكود :
كود :
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       LoadDataToComboBox(ComboBox1, con, "SELECT DISTINCT(Governorate)  FROM [Coverage Claims]", "Governorate")

       'DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
       'DataGridView1.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True

       For Each l In InputLanguage.InstalledInputLanguages
           If l.culture.ToString.StartsWith("ar") Then InputLanguage.CurrentInputLanguage = l
       Next
   End Sub



الأدوات الجديدة (ComboBox1 ، ComboBox2) :  لها أكواد ضمن أحداثها  وهي :
كود :
   Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
       LoadDataToComboBox(ComboBox2, con, "SELECT DISTINCT(Directorate)  FROM [Coverage Claims] Where [Governorate] ='" & ComboBox1.Text & "' ", "Directorate")
   End Sub

   Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
       LoadDataToComboBox(ComboBox3, con, "SELECT DISTINCT(Isolation1)  FROM [Coverage Claims] Where [Governorate] ='" & ComboBox1.Text & "' and  [Directorate] = '" & ComboBox2.Text & "' ", "Isolation1")
   End Sub



الآن  : كود البحث يصبح  :
كود :
   Private Sub textSerch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles textSerch.TextChanged
       Label1.Hide()

       Dim txt As String = ""


       ' If textSerch.Text.Trim = "" Then Label1.Visible = False : Exit Sub

       ' If textSerch.Text.Trim.Length < 2 Then
       If textSerch.Text.Length < 2 Then
           Label1.Visible = True
           Dim dt2 As New DataTable

           DataGridView1.DataSource = Nothing
           Exit Sub
       End If


       Label1.Hide()
       'If textSerch.Text.Trim.Length >= 2 Then
       If textSerch.Text.Length >= 2 Then

           Dim strSS1 As String = " [Governorate] as [المحافظة], [Directorate] as [المديرية], [Isolation1] as [العزلة], [Village] as [القرية] "
           Dim strSerch1 As String = textSerch.Text.Replace(" ", "%")
           DataGridView1.DataSource = tDataTable(con, "SELECT " & strSS1 & " FROM [Coverage Claims] Where [Governorate] Like '%" & ComboBox1.Text & "%'  And  [Directorate] Like '%" & ComboBox2.Text & "%'  And  [Isolation1] Like '%" & ComboBox3.Text & "%' And [Village] like '%" & strSerch1 & "%'")

           DataGridView1.ClearSelection()
           'If dt.Rows.Count = 0 Then Label1.Show()
       Else


       End If

       If textSerch.Text = "" Then
           Label2.Show()
       Else
           Label2.Hide()
       End If


        DataGridView1.Columns(0).Width = 150
        DataGridView1.Columns(1).Width = 150
        DataGridView1.Columns(2).Width = 150
        DataGridView1.Columns(3).Width = 150


   End Sub

   

الآن بإمكانك تجريب البرنامج  - وتحقق من تصنيف وسرعة البحث ..



لعرض كل بيانات قاعدة البيانات كلها  :
- فرغ اسم المحافظة من الكتابة :  (ConboBox1) أمسح الكتابة  منها   (يعني)
- فرغ حقل المديرية من الكتابة.   (ConboBox2)
- فرغ حقل العزلة من الكتابة.       (ConboBox3)
- في حقل البحث (اضغط ع المسافة مرتين أو أكتب فيه (%%))
فيعرض لك كل ما في الجدول من بيانات.

لعرض كل بيانات محافظة ما :
- اختر اسم المحافظة .  من          (ConboBox1)
- فرغ حقل المديرية من الكتابة.   (ConboBox2)
- فرغ حقل العزلة من الكتابة.       (ConboBox3)
- أكتب في حقل البحث (اضغط ع المسافة مرتين أو أكتب فيه (%%))
فيعرض لك كل ما في المحافظة.

لعرض محتويات مديرية :
- اختر اسم المحافظة .
- اختر المديرية.
- فرغ حقل العزلة من الكتابة.
- أكتب في حقل البحث (اضغط ع المسافة مرتين أو أكتب فيه (%%))
فيعرض لك كل ما في المديرية.

لعرض محتويات عزلة:
- اختر اسم المحافظة .
- اختر المديرية.
- اختر العزلة.
- أكتب في حقل البحث (اضغط ع المسافة مرتين أو أكتب فيه (%%))
فيعرض لك كل ما في العزلة.

للبحث عن قرية :
- اختر اسم المحافظة .   أو فرغها..
- اختر المديرية.         أو فرغها..
- اختر اسم العزلة.      أو فرغها..
- أكتب في حقل البحث حرفين أو أكثر من اسم القرية ..
فيعرض لك كل النتائج المشابهة.

لو كنت مش متأكد من طريقة كتابة اسم قرية  فتشك بشكل حرف ما (أتركه وأكتب مكانه مسافه)
مثلاً : لا تدري تكتب (المنخ)  أو (المناخ)   اترك مكان الألف فراغ واكتب (المن خ) وستحصل على نتائج
إن كنت تشكل بوجود (أل التعريف) من عدمه أتركها وأكتب ما كنت متأكد منه فتصبح الكلمة (من خ)



الكود أعلاه تجربة على الطاير ..
وهذه فكرة سريعة : شيء بسيط وبإمكانك عمل أكثر من هذا بكثير ..


بالتوفيق ...
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: salamandal , محمد مسافر


الردود في هذا الموضوع
RE: الاتصال وقراءه البيانات من قاعده بيانات اكسس حجمه كبير وتحتوى على الالف البيانات - بواسطة Taha Okla - 13-09-24, 08:36 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] كود الاتصال بالنت mmaalmesry 4 871 04-09-25, 02:28 PM
آخر رد: أبو خالد الشكري
  تصدير البيانات إلى ملف RTF مصمم هاوي 4 823 15-08-25, 04:13 PM
آخر رد: أبو خالد الشكري
  [VB.NET] ما هو أفضل موقع استضافة لقواعد البيانات MSSQL ؟ mmaalmesry 0 796 16-07-25, 10:45 PM
آخر رد: mmaalmesry
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,221 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  مشكلة في حفظ البيانات مصمم هاوي 2 1,019 30-06-25, 08:51 AM
آخر رد: مصمم هاوي
  بطء في جلب البيانات مصمم هاوي 9 1,001 08-05-25, 07:51 AM
آخر رد: مصمم هاوي
  [Acces2007] مشكلة ملف قاعدة بيانات access للقراءة فقط mmaalmesry 11 1,453 29-04-25, 08:55 PM
آخر رد: mmaalmesry
  تعديل كود تحديث البيانات مصمم هاوي 1 784 26-04-25, 06:07 PM
آخر رد: مصمم هاوي
Photo لايمكن تعرف على تنسيق قاعدة البيانات الدريساوي 2 697 26-04-25, 12:24 AM
آخر رد: الدريساوي
  مساعدة في طريقة تحميل الفيديوهات المخزنة في قاعدة البيانات foad8920 0 660 24-04-25, 12:58 PM
آخر رد: foad8920

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


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