اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

ايجاد سجلات الاسماء المتكررة في جدولين وحذفها من جدول tbl2 بشرط تساوي حقل الـ degree


sandanet

الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

أما بعد،،

في المرفق جدولين tbl1 و tbl2 وفي النموذج زر أمر المطلوب فيه هو عند النفر على الزر يقوم بايجاد الاسماء المتكررة في الجدولين بشرط تساوي حقل الـ  degree وحذفها من tbl2

 

ارجو ان تكون الفكرة واضحة

 

تحياتي

test‬.rar

رابط هذا التعليق
شارك

37 دقائق مضت, jjafferr said:

وعليكم السلام:smile:

 

تفضل:smile:

607.Clipboard01.jpg.8407bceabb23c2f48dfe5b975961a5e7.jpg

 

جعفر

عفوا منك استاذي القدير " جعفر " :fff:
لكن هناك راح يمسح كل الاسم اللي في جدول تابل2 
وحسب فهمي لازم تنطيها الشروط
كما مبينة في الصورة
1.JPG.2582291e1e575be05c1a70480eef6b74.JPG

وشوف النتائج بعد اعطاء الشروط
2.JPG.5d4204071f891304816530be45f60de7.JPG
وشوف النتائج اذا ما ننطي الشروط
3.JPG.1abe2f89c4faa8c1803b82b6e5b54675.JPG

4.JPG.02217f4cd402dd6b560b77445f0ec6ba.JPG

هذا والله اعلم
تحياتي

  • Like 1
رابط هذا التعليق
شارك

51 دقائق مضت, jjafferr said:

 

607.Clipboard01.jpg.8407bceabb23c2f48dfe5b975961a5e7.jpg

 

وعليكم السلام اخي شفان

 

الرابط بين الجدولين معناه ان Degree يجب ان تكون متساوية بين الجدولين ، فيعرض النتائج تلك فقط:smile:

 

واليك طريقة اخرى بالكود ، وبنفس النتائج:


    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    
    Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1")
    Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2")
    
    rst1.MoveLast: rst1.MoveFirst
    RC1 = rst1.RecordCount
    
    For i = 1 To RC1
        
        rst2.FindFirst "[degree]='" & rst1!degree & "'"
        If rst2.NoMatch = False Then
            rst2.Delete
        End If
        
        rst1.MoveNext
    Next i
    
    rst1.Close: Set rst1 = Nothing
    rst2.Close: Set rst2 = Nothing
    

 

جعفر

رابط هذا التعليق
شارك

4 ساعات مضت, sandanet said:

في المرفق جدولين tbl1 و tbl2 وفي النموذج زر أمر المطلوب فيه هو عند النفر على الزر يقوم بايجاد الاسماء المتكررة في الجدولين بشرط تساوي حقل الـ  degree وحذفها من tbl2

 

اها ، لم التفت للشرط الاول:blink:

 

اذن الاستعلام سيكون:

607.1.Clipboard0.jpg.c037a366c912e84ce371bc26bc99e2fb.jpg

.

والكود سيصبح:


    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    
    Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1")
    Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2")
    
    rst1.MoveLast: rst1.MoveFirst
    RC1 = rst1.RecordCount
    
    For i = 1 To RC1
        
        rst2.FindFirst "[degree]='" & rst1!degree & "' And [names]='" & rst1!fullnames & "'"
        If rst2.NoMatch = False Then
            rst2.Delete
        End If
        
        rst1.MoveNext
    Next i
    
    rst1.Close: Set rst1 = Nothing
    rst2.Close: Set rst2 = Nothing
    

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

 

9 دقائق مضت, jjafferr said:

وعليكم السلام اخي شفان

 

الرابط بين الجدولين معناه ان Degree يجب ان تكون متساوية بين الجدولين ، فيعرض النتائج تلك فقط:smile:

 

واليك طريقة اخرى بالكود ، وبنفس النتائج:



    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    
    Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1")
    Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2")
    
    rst1.MoveLast: rst1.MoveFirst
    RC1 = rst1.RecordCount
    
    For i = 1 To RC1
        
        rst2.FindFirst "[degree]='" & rst1!degree & "'"
        If rst2.NoMatch = False Then
            rst2.Delete
        End If
        
        rst1.MoveNext
    Next i
    
    rst1.Close: Set rst1 = Nothing
    rst2.Close: Set rst2 = Nothing
    

 

جعفر

انا احبك في الله اخي جعفر
الان انا فهمت انو انك ما فهمت السؤال اخينا بالضبط
هو طلبت ان يشوف الاسماء اولا
واذا بيكون اسماء مكررة وحقل اكري بيكون نفس الشي بعدين بعمل حذف
واخوك الصغير شفان بيعتذر منك
وبهذا راح يوصل المطلوب
ان يتم العلاقة بين حقل الاسماء ايضاً
1.JPG.2b50be1515105bd07d3472d7127af01e.JPG

وبالكود اريد اعرف الطريقة

سامحني يا استاذ

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

  • Like 1
رابط هذا التعليق
شارك

25 دقائق مضت, Shivan Rekany said:

 

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

وبالكود اريد اعرف الطريقة

سامحني يا استاذ

 

حياك الله اخوي شفان :smile:

وملاحظتك كانت في مكانها:smile:

لهذا السبب ، انا اقول :smile::

اقتباس

في اعتقادي ، مشاركة أكثر من شخص في الرد على السؤال ، هو فائدة للجميع ، فمنه نتعلم الطرق الاخرى للإجابة على السؤال ، ونتعلم خبايا البرمجة :rol:

 

انت وضعت مشاركتك قبل ان ترى ردي الاخير والذي وضعت فيه الكود ، والكود موجود فيه:smile:

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

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

 

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

 

وانتظروني قريبا في موضوع شيق آخر بإذن الله :wavetowel:

 

تحياتي

رابط هذا التعليق
شارك

10 ساعات مضت, sandanet said:

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

 

بالعكس اخي أوس ، انا اتعمد فك الكود الى اسطر بالتفصيل ، حتى يكون الكود سهل الفهم (بس الظاهر جبت اسمي وقصدك @رمهان بكوده المختزل:wink2:)

 

واليك شرح الكود:

    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    
نحتفظ ببيانات الجدول1 في هذا المتغير#1 في ذاكرة الكمبيوتر المؤقته
    Set rst1 = CurrentDb.OpenRecordset("Select * From tbl1")
بينما نحتفظ ببيانات الجدول2 في هذا المتغير #2 في ذاكرة الكمبيوتر المؤقته 
    Set rst2 = CurrentDb.OpenRecordset("Select * From tbl2")

من الآن ، تقريبا كل شغلنا على #1 ، حيث سنقرأ سجلات الجدول جميعها ، ثم نقارن حقلي الاسم والشهادة
فاذا وجدنا القيم متساوية في #2 ، فاننا نحذف سجل #2

علشان نبدأ من اول سجل ، يجب ان نذهب الى آخر سجل ، ثم نرجع لأول سجل
    rst1.MoveLast: rst1.MoveFirst
الآن نستطيع حساب عدد السجلات الموجودة في #1
    RC1 = rst1.RecordCount

الآن سنقرأ جميع سجلات #1    
    For i = 1 To RC1

اسم حقل الاسم يختلف في الجدولين ، فانتبه له ، بينما اسم الشهادة هو نفسه بين الجدولين
لذا الذي نعمله هنا هو اننا نقارن حقلي الاسم والشهادة في السجل في #1 ، ونختبر وجودهما في الجدول #2
        rst2.FindFirst "[degree]='" & rst1!degree & "' And [names]='" & rst1!fullnames & "'"

اذا "عدم المطابقه" خطأ ، معناه انه في مطابقة بين الحقلين في هذا السجل
ونستخدم هذه الطريقة ، لأنها الاسهل
        If rst2.NoMatch = False Then
اذن ، احذف هذا السجل من #2
            rst2.Delete
        End If
        
انتقل الى السجل التالي في الجدول #1
        rst1.MoveNext
    Next i

هذه الجزئية جدا مهمة ، لأننا جعلنا الجدولين في ذاكرة الكمبيوتر المؤقته
ولكي نُخلي الذاكرة ، يجب عمل التالي
    rst1.Close: Set rst1 = Nothing
    rst2.Close: Set rst2 = Nothing

 

جعفر

  • Like 6
رابط هذا التعليق
شارك

اشكرك استاذ جعفر جزيل الشكر على هذا الشرح الرائع جداً وانا اضم صوتي لصوت الاخ ابو رحيل في اعتماد فكرة شرح الأكواد بهذه الطريقة لما لها من دور كبير في تعلم طرق كتابة الدوال البرمجية والتفكير بطريقة العباقرة امثالكم :cool:

تحياتي

رابط هذا التعليق
شارك

  • 2 weeks later...

على الرغم ان السيد @sandanet وصلت الى النتيجة
واعطاه السيد @jjafferr طرائق مختلفة بالاكواد و اخرى
لكن ساضع هنا هذا الكود هم بيوفي الطلب
وهو
 

DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE DISTINCTROW tbl2.* FROM tbl1 INNER JOIN tbl2 ON (tbl1.degree = tbl2.degree) AND (tbl1.fullnames = tbl2.names);"
DoCmd.SetWarnings True

تحياتي للجميع

  • Like 3
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information