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

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

قام بنشر (معدل)

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

باستخدام الكود التالى يمكن حذف أى سجل داخل قاعدة بيانات

ما عدا  عند حذف السجل الأخير فى نفس القاعدة تظهر هذه الرسالة

img?id=1299705

كيف يمكن معالجة خطأ هذه الرسالة ؟؟

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

الكود

Private Sub Cmdel_Click()
On Error GoTo Err_Cmdel_Click
   If MsgBox(":ستقوم الآن بحذف السجل المسجل بملف رقم" & vbCrLf _
   & vbCrLf _
   & [Nr] & "        " & vbCrLf _
   & [Name_T] & vbCrLf _
   & " " & vbCrLf _
   & "هل أنت متأكد ؟" & vbCrLf _
   & "أضغط ( نعم ) للإستمرار  ، أو ( لا ) لإلغاء الأمر", vbQuestion + vbYesNo _
   + vbMsgBoxRight, "تحذيـــر") = vbYes Then
   Me.Recordset.Delete
   Me.Recordset.MoveNext
   End If
   
Exit_Cmdel_Click:
Exit Sub

Err_Cmdel_Click:
    MsgBox Err.Description
    Resume Exit_Cmdel_Click
    
End Sub

 

تم تعديل بواسطه أحمد العيسى
قام بنشر (معدل)

أعتقد أنه تم الإجابة عن هذا السؤال في موضوعك السابق ، والذي لم تقم بالرد عليه ومتابعته 🙂 .

 

الجواب في هذه المشاركة هنا

تم تعديل بواسطه Foksh
قام بنشر
10 ساعات مضت, Foksh said:

أعتقد أنه تم الإجابة عن هذا السؤال في موضوعك السابق

أعتقد أن الموضوع مختلف
كما تعلم : هذا الكود يمكن استخدامه فى أى قاعدة بيانات أخرى
لذلك  أريد معرفة سبب ظهور هذه الرسالة عند تطبيقه على حذف السجل الأخير للقاعدة
وماذا تعنى وكيفية تلافيها مستقبلاً
هل من الممكن فى الكود إضافة شرط :
إذا كان السجل المحذوف هو الأخير  فيجب إنشاء سجل جديد

قام بنشر

يبدو أن الخطأ الذي يظهر لك هو "This action was cancelled by an associated object." في Access عند محاولة حذف السجل باستخدام الكود. هذا قد يكون بسبب أحد الأسباب التالية:

  1. السجل مرتبط بكائن آخر: إذا كان السجل المحذوف مرتبطًا بجدول آخر عبر علاقة عدم السماح بالحذف المتتالي (مثل مفتاح أجنبي)، فقد يؤدي ذلك إلى إلغاء العملية.

  2. نموذج غير قابل للتحديث: إذا كان النموذج مبنيًا على استعلام غير قابل للتحديث، فقد لا يتم تنفيذ عملية الحذف بشكل صحيح.

  3. مشكلات في Recordset: استخدام Me.Recordset.Delete قد لا يكون الطريقة المثلى لحذف السجلات في بعض الحالات، خاصة إذا كان مصدر النموذج لا يدعم الحذف المباشر.

  4. تعامل غير صحيح مع الأخطاء: الكود يقوم بتنفيذ Resume Exit_Cmdel_Click بعد عرض رسالة الخطأ، مما قد يؤدي إلى تجاهل المشكلة دون التعامل معها بوضوح.

الحلول الممكنة:

  • استخدم DoCmd.RunCommand acCmdDeleteRecord بدلًا من Me.Recordset.Delete لتجربة طريقة حذف أخرى:

     
    If MsgBox("هل أنت متأكد من حذف السجل؟", vbQuestion + vbYesNo, "تحذير") = vbYes Then
        DoCmd.RunCommand acCmdDeleteRecord
    End If

     

    تحقق من العلاقات: إذا كان هناك جداول مرتبطة، جرب حذف السجل يدويًا من الجدول الرئيسي لمعرفة ما إذا كان هناك قيود تمنع الحذف.

    جرب Requery بعد الحذف: قد تحتاج إلى تحديث النموذج بعد الحذف لضمان تنفيذ العملية:

    Me.Requery

     

قام بنشر
34 دقائق مضت, kkhalifa1960 said:

يبدو أن الخطأ الذي يظهر لك هو "This action was cancelled by an associated object." في Access عند محاولة حذف السجل باستخدام الكود. هذا قد يكون بسبب أحد الأسباب التالية:

  1. السجل مرتبط بكائن آخر: إذا كان السجل المحذوف مرتبطًا بجدول آخر عبر علاقة عدم السماح بالحذف المتتالي (مثل مفتاح أجنبي)، فقد يؤدي ذلك إلى إلغاء العملية.

  2. نموذج غير قابل للتحديث: إذا كان النموذج مبنيًا على استعلام غير قابل للتحديث، فقد لا يتم تنفيذ عملية الحذف بشكل صحيح.

  3. مشكلات في Recordset: استخدام Me.Recordset.Delete قد لا يكون الطريقة المثلى لحذف السجلات في بعض الحالات، خاصة إذا كان مصدر النموذج لا يدعم الحذف المباشر.

  4. تعامل غير صحيح مع الأخطاء: الكود يقوم بتنفيذ Resume Exit_Cmdel_Click بعد عرض رسالة الخطأ، مما قد يؤدي إلى تجاهل المشكلة دون التعامل معها بوضوح.

الحلول الممكنة:

  • استخدم DoCmd.RunCommand acCmdDeleteRecord بدلًا من Me.Recordset.Delete لتجربة طريقة حذف أخرى:

     

شكراً أخى لاهتمامك وردك

سوف أضع مرفق للملف الذى أعمل عليه أدناه

أحياناً الفورم يعمل بدون مشاكل بالمرة ، وفى بعض الأحيان تكون المشكلة فى حذف السجل الأخير

لكن أرجو أن تضيف سجل جديد باستخدام أحد الأرقام القومية الآتية

26507111201809        أنثى
28603110400251        ذكر
27301052700568        أنثى
27908100400212        ذكر
28101200400409        أنثى

والخروج من خانة الرقم القومى بعد لصقه بالضغط على زر Tab

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

لكن هذا لا يحدث دائماً

 

db1.mdb

  • تمت الإجابة
قام بنشر

اضف ماسج وتحديث بنهاية كود الحذف .

Private Sub Cmdel_Click()
On Error GoTo Err_Cmdel_Click
   If MsgBox(":ستقوم الآن بحذف السجل المسجل بملف رقم" & vbCrLf _
   & vbCrLf _
   & [Nr] & "        " & vbCrLf _
   & [Name_T] & vbCrLf _
   & " " & vbCrLf _
   & "هل أنت متأكد ؟" & vbCrLf _
   & "أضغط ( نعم ) للإستمرار  ، أو ( لا ) لإلغاء الأمر", vbQuestion + vbYesNo _
   + vbMsgBoxRight, "تحذيـــر") = vbYes Then
   Me.Recordset.Delete
   Me.Recordset.MoveNext
   End If
   MsgBox "تم حذف السجل بنجاح", vbExclamation
   Me.Requery
Exit_Cmdel_Click:
Exit Sub

Err_Cmdel_Click:
    MsgBox Err.Description
    Resume Exit_Cmdel_Click
    
End Sub

 

قام بنشر (معدل)
2 ساعات مضت, أحمد العيسى said:

كما تعلم : هذا الكود يمكن استخدامه فى أى قاعدة بيانات أخرى

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

ولكن تماشياً مع فكرتك ، سنقوم بجعل الكود يتأكد مما اذا كان هناك سجل بعد السجل الحالي المستهدف حذفه ، فإن كان هناك سجل فيتم الانتقال اليه  ، وإذا كان السجل المطلوب حذفه هو آخر سجل فسيتم الانتقال الى سجل جديد بعد اتمام عملية الحذف ..

استبدل كودك السابق بهذا الكود لزر حذف السجل :-

Private Sub Cmdel_Click()
On Error GoTo Err_Cmdel_Click

    If MsgBox(":ستقوم الآن بحذف السجل المسجل بملف رقم" & vbCrLf _
        & vbCrLf _
        & [Nr] & "        " & vbCrLf _
        & [Name_T] & vbCrLf _
        & " " & vbCrLf _
        & "هل أنت متأكد ؟" & vbCrLf _
        & "أضغط ( نعم ) للإستمرار  ، أو ( لا ) لإلغاء الأمر", _
        vbQuestion + vbYesNo + vbMsgBoxRight, "تحذيـــر") = vbYes Then

        Dim rs As DAO.Recordset
        Set rs = Me.RecordsetClone
        rs.Bookmark = Me.Bookmark
        rs.Delete
        
        ' بعد الحذف ، سيتم التحقق مما اذا كان هناك سجل لا حق أم لا
        If Not rs.EOF Then
            rs.MoveNext
            If Not rs.EOF Then
                Me.Bookmark = rs.Bookmark
            Else
                ' لا يوجد سجل بعده - انتقل إلى سجل جديد
                DoCmd.GoToRecord , , acNewRec
            End If
        Else
            ' لا يوجد سجلات بعد الحذف - انتقل إلى سجل جديد
            DoCmd.GoToRecord , , acNewRec
        End If
        rs.Close
        Set rs = Nothing
    End If

Exit_Cmdel_Click:
    Exit Sub

Err_Cmdel_Click:
    MsgBox Err.Description, vbExclamation + vbMsgBoxRight, "خطأ"
    Resume Exit_Cmdel_Click
End Sub

 

  أما بالنسبة للأسباب :-

2 ساعات مضت, أحمد العيسى said:

وماذا تعنى وكيفية تلافيها مستقبلاً

فالمشكلة التي تحصل معك سببها أنه وبعد اجراء عملية الحذف ، فإن اكسيس تلقائياً يقوم بالانتقال إلى السجل التالي ( MoveNext ) لكن !!! وبما أنه لا يوجد سجل تالي ، هنا قد يحدث خطأ أو يبقى النموذج " بدون سجل " ، مما يسبب تجميد أو ظهور نموذج فارغ أو حتى خطأ غير متوقع. 

تم تعديل بواسطه Foksh
قام بنشر

كل الشكر والتقدير لكل من

kkhalifa1960
Foksh

رسالة الخطأ  التى تحدثت عنها فى بداية الموضوع

لا تؤثر فى عمل النموذج وتعتبر شيئاً زائداً فى بعض الأحيان

لكن استفدت منكما فى معرفة سببها

لذلك لن أقوم بالتعديل حالياً ، فالوضع الحالى بدون تعديل هو الأفضل

مرة أخرى .. شكراً جزيلاً لكما

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