تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
حذف الاسطرالمكررة في جدول
#11
(04-06-17, 01:34 AM)rabeh.ram كتب : رغم اني ساحتاج بعض الوقت لفهم الكود الحل كان في الصميم شكرا لمجهودك الرائع كما ارجو ان تضع لنا شرح مصور للاكواد الموجودة و هذا عندما تكون متفرغ
اخي الغالي رابح هذا الحل لم يعجبنى كثيرا ولاكن هو المتاح فى مخيلتي وهو مكون من 3 اجزاء
1- التعامل مع قاعدة البيانات من خلال دالة لجلب البيانات واجراء للعمليات على القاعدة وهو دائما اسلوب اتبعه عند تصميم طبقة  (كلاس )للاتصال اسميه دائما data access lyear
2- لقد استفدت من خاصية group by التجميع حسب حقول معينة فى عمل تجميع للسطور حسب الحقول جميعها وذلك لان التكرار هنا شامل الصف كله فان التجميع حسب كل الحقول سوف ياتى لنا بسطر واحد من كل تكرار 
3- قد وضعت هذا الاستعلام فى الوضع المنفصل داخل datatable جدول مؤقت (بمعني لدى فى الذاكرة جدول به المطلوب (صفوف غير مكررة) من خلال الادبتر
4- حذفت جميع البيانات من الجدول الاصلى من خلال الاجراء senddata وجملة الاستعلام delete * from -- اخى وهذه النقطة التى تجعلنى غير راضي عن الحل
فهى تعرض البيانات فى خطر اذا انقطع التيار (كنت اتمني ان اعمل تحديث للجدول من الداتا تيبل datatable ولكنه لم ينفع معي )
فلم يكن امامي غير ان احذف الجدول لتجهيزه للبيانات بعد المعالجة
5- عملت تكرار بعدد صفوف الداتا تيبل datatable ياخد سطر سطر منها  ويضيفه فى الجدول وكل ده من خلال الاجراء senddata مع رقم الصف 
اتمني ان اكون وضحت 
وصح فطورك اخي الجزائري رابح   Smile
الرد }}}
تم الشكر بواسطة:
#12
تعقيب صغير اخي بعد ان  ظهر لي ان الاشكال قد حل في الاول تبين مشكل اخر وهو اني في الاول طبقت على المثال المرفق لقاعدة البيانات لكن عند التجريب على قاعدة البيانات الاصلية و التي يمكن ان تصل الى 000 300 سطر بعد الضغط على زر حذف المكرر لم يظهر اي شئ واعتقد ان البرنامج يكون قد بدا في المعالجة لكن لحجم قاعدة البيانات الكبير ياخذ وقد انتظرت حوالي 5 د ولم يحدث اي تغيير
الرد }}}
تم الشكر بواسطة:
#13
(04-06-17, 06:14 PM)rabeh.ram كتب : تعقيب صغير اخي بعد ان  ظهر لي ان الاشكال قد حل في الاول تبين مشكل اخر وهو اني في الاول طبقت على المثال المرفق لقاعدة البيانات لكن عند التجريب على قاعدة البيانات الاصلية و التي يمكن ان تصل الى 000 300 سطر بعد الضغط على زر حذف المكرر لم يظهر اي شئ واعتقد ان البرنامج يكون قد بدا في المعالجة لكن لحجم قاعدة البيانات الكبير ياخذ وقد انتظرت حوالي 5 د ولم يحدث اي تغيير
بالطبع الموضوع هنا يعتمد على امكانيات وسرعة الحاسوب  300 الف شيئ كبير ولاكن لا غني عن الاستعلام واسهل وابسط استعلام لتلافى المكرر هو عن طريق المجموعات كما فعلت فى المثال  وذلك لا يعني الحل الوحيد نتمني الافادة من الزملاء وسوف ابحث معك عن حل ولاكن دائما اجعل لديك نسخة من قاعدة بياناتك محفوظة احتياطيا
الرد }}}
تم الشكر بواسطة:
#14
شكرا لك اخي محمود انت و الاخ alma2 على اهتمامكما الدائم بحل مشاكل اعضاء المنتدى

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

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



البرنامج مع قاعدة البيانات الاصلية مرفق واعذروني لم افع القاعدة في الاول لكوني فكرت ان مجرد مثال عنها يكفي


 
اما بخصوص حلك اخي alma2  والذي يعتمد على ادراج مفتاح للجدول و من ثم حذفه فلا اشكال في ذالك اخي المهم ان ترجع قاعدة البيانات بعد حذف المكرر الى شكلها الاول بنهاية عملية الحذف و بامتدادها  Access2003 .mdb 

ملاحظة نظرا لحجم البرنامج مع قاعدة البيانات 48Mo و الذي لم يقبل الرفع على المنتدى رفعته على الرابط من هنا
الرد }}}
تم الشكر بواسطة:
#15
قمت بتجربة طريقتي بالاعتماد على تكرار العمود [الموضع (text)] للعدد (60277)
فكانت المدة   00:57:01 (تقريبا ساعة كاملة) أعتقد مدة طويلة غير مناسبة
ولكنها حذفت المكرر في النهاية فأصبحت العدد (59661)

كود :
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Cursor = Cursors.WaitCursor


        ''''''''''''''''''''هنا يكتب كود السلكت والحذف للمكرر ''''''''''''''''''''''''''
        Dim c As Integer = 0
        If con.State <> ConnectionState.Open Then con.Open()

        Dim cmd As New OleDbCommand(String.Empty, con)
        '------------------------------------------------------------------
        'التأكد من وجود مكرر
        'cmd.CommandText = "SELECT COUNT(c) FROM (SELECT COUNT([alpha]) AS c FROM [Table1] GROUP BY [alpha] HAVING COUNT([alpha]) > 1) "
        cmd.CommandText = "SELECT COUNT(c) FROM (SELECT COUNT([الموضع (text)]) AS c FROM [Table1] GROUP BY [الموضع (text)] HAVING COUNT([الموضع (text)]) > 1) "
        c = cmd.ExecuteScalar

        If c > 0 Then
            Dim msg As String =
                "يوجد (" & c & ") بيانات لها أسطر مكررة" & vbNewLine & vbNewLine & _
                "هل تود حذف الأسطر المكررة لهذه البيانات؟"
            If MsgBox(msg, MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.YesNo + MsgBoxStyle.Exclamation, "حذف الأسطر المكررة للبيانات") = MsgBoxResult.Yes Then
                '------------------------------------------------------------------
                Try
                    'إضافة عمود ترقيم تلقائي
                    cmd.CommandText = "ALTER TABLE [Table1] ADD [id] INT IDENTITY(1,1)"
                    cmd.ExecuteNonQuery()

                Catch ex As OleDbException
                End Try
                '------------------------------------------------------------------
                'حذف المكرر
                cmd.CommandText = "DELETE FROM [Table1] WHERE [ID] NOT IN (SELECT MIN(ID) FROM [Table1] GROUP BY [الموضع (text)]);"
                cmd.ExecuteNonQuery()
                '------------------------------------------------------------------
                Try
                    'حذف عمود الترقيم التلقائي
                    cmd.CommandText = "ALTER TABLE [Table1] ADD [id] INT IDENTITY(1,1)"
                    cmd.ExecuteNonQuery()
                Catch ex As OleDbException
                End Try
                '------------------------------------------------------------------
                MsgBox("تم حذف (" & c & ") أسطر بنجاح")

            Else
                MsgBox("تم الغاء الحذف ")

            End If

        Else
            MsgBox("لا توجد بيانات مكررة")

        End If

        con.Close()

        Me.Cursor = Cursors.Default
    End Sub
الرد }}}
تم الشكر بواسطة:
#16
شكرا لمجهودك الرائع اخي alma2
هل استغرق البرنامج هذه المدة رغم تخصيص التاريخ وهل تعتقد انه لاتوجد طريقة اخرى اسرع نظرا لحجم القاعدة
على العموم مجهودك يذكر ويشكر وانا انتظر افكار جديدة  منك جعل المعالجة في وقت اقل
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف يتم عرض جدول من قائمة listbox في داتاقريدفيو ahmedfa71 5 883 04-09-25, 02:59 PM
آخر رد: ahmedfa71
  اريد كود يحذف جميع سجلات جدول بقاعدة بيانات اكسس دفعه واحده khalidalwdi 2 645 18-11-24, 01:02 AM
آخر رد: rdxdz
  أسرع طريقة يمكن بها نقل جدول Table من قاعدة بيانات على النت إلى أخرى محلية mmaalmesry 2 598 19-10-24, 09:26 PM
آخر رد: mmaalmesry
  أريد تحديد صلاحيات المستخدمين عن طريق حقل في جدول قاعدة البيانات F.H.M 0 330 12-09-24, 06:29 PM
آخر رد: F.H.M
  [VB.NET] السلام عليكم لدي جدول فرعي وارد تحديث الجدول الرئيسي raedre22 2 376 06-07-24, 12:50 PM
آخر رد: raedre22
  نقل ملف pdf من جدول لجدول آخر في قاعدة بيانات SQL صالح عبدالله 1 384 23-06-24, 02:38 AM
آخر رد: صالح عبدالله
  [VB.NET] تحديث بيانات فى كلاس من جدول سيكوال asdfar1977 6 736 26-02-24, 01:07 AM
آخر رد: asdfar1977
  طريقة إسناد اكثر من جدول للكريستال ريبورت Adel27213 2 667 25-11-23, 11:51 PM
آخر رد: Adel27213
  [سؤال] اريد تغيير اسم حقل ضمن جدول بقاعدة بيانات اكسس mh66 1 818 08-11-23, 08:16 AM
آخر رد: justforit
  طريقة نقل بيانات عمود من جدول إلى جدول اخر Adel27213 4 808 06-11-23, 07:35 AM
آخر رد: justforit

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


يقوم بقرائة الموضوع: