اذهب الي المحتوي
أوفيسنا

استثناء سجل من الحذف


أبو حوده
إذهب إلى أفضل إجابة Solved by Eng.Qassim,

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

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

كل عام وحضراتكم بخير واللهم بلغنا رمضان لا فاقدين ولا مفقودين امين يارب العالمين 

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

زر بنموذج به كود حذف كافة السجلات بجدول الفواتير وجدول الحركات والكود هو 

Dim SQ1 As String
Dim SQ2 As String
Sq1 = "DELETE tblHaraka.* FROM tblHaraka;"
SQ2 = "DELETE tblFatora.* FROM tblFatora;"
If MsgBox("هل تريد حذف كافة السجلات", vbYesNo + vbCritical + vbDefaultButton1 + 1572864, Compan) = vbYes Then
DoCmd.SetWarnings (warningsoff)
DoCmd.RunSQL (Sq1)
DoCmd.RunSQL (SQ2)
DoCmd.SetWarnings (warningson)
Me.Requery
MsgBox "تم حذف كافة السجلات"
Else
MsgBox "تم الغاء العملية الحذف"
End If
المطلوب هو لو فيه سجل الجدول الاول ( فاتورة ) ورقمة مثلا 1001 وله سجل فرعى مرتبط به بالجدول ( الحركة ) عاوز استثنى السجل دة من الحذف بالكود اللى ذكرت بالاعلى فهل من طريقة لفعل ذلك 

تم تعديل بواسطه أبو حوده
رابط هذا التعليق
شارك

وعليكم السلام..

استخدم الكود التالي لاستثناء 1001..ربما تحتاج الى باراميتر في الكود لتمرير قيمة الرقم المستثنى من خلال النموذج

Sub DeleteRecordsExceptOne()
    Dim db As DAO.Database
    Dim rsFatora As DAO.Recordset
    Dim rsHaraka As DAO.Recordset
    Dim strInvoiceID As Integer
    
    strInvoiceID = "1001"
    
    Set db = CurrentDb
    
    Set rsFatora = db.OpenRecordset("SELECT * FROM tblFatora  WHERE HarakaID <> " & strInvoiceID & "")
    Do While Not rsFatora.EOF
        rsFatora.Delete
        rsFatora.MoveNext
    Loop
    
    Set rsHaraka = db.OpenRecordset("SELECT * FROM tblHaraka WHERE HarakaID <> " & strInvoiceID & "")
    Do While Not rsHaraka.EOF
        rsHaraka.Delete
        rsHaraka.MoveNext
    Loop
    
    rsFatora.Close
    rsHaraka.Close
    db.Close
    
    Set rsFatora = Nothing
    Set rsHaraka = Nothing
    Set db = Nothing
End Sub

 

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

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

والجدول الرئيسى الفاتورة... السجل فى الجدول الحركة مرتبط به عن طريق حقل رقم الفاتورة Fatora_id

 

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

استبدل

3 دقائق مضت, أبو حوده said:

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

استبدل HarakaID ب Fatora_id

انا افترضتها من عندي

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

طيب حضرتك لو اسم الحقل المربوط به الجدولين فى جدول الفاتورة بيكون اسمة FatoraId

وفى جدول الحركة بيكون اسمة Fatora_id 

بيكون الكود فية اختلاف كبير معلش هتعبك معايا لانى حاولت استبدالهم لكن معرفتش 

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

منذ ساعه, أبو حوده said:

بيكون الكود فية اختلاف كبير

لا اختلاف ولاحاجة.. السيت الاول بيكون

Set rsFatora = db.OpenRecordset("SELECT * FROM tblFatora  WHERE FatoraId <> " & strInvoiceID & "")

السيت الثاني..

 Set rsHaraka = db.OpenRecordset("SELECT * FROM tblHaraka WHERE Fatora_id  <> " & strInvoiceID & "")

 

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

مشاركة مع الاستاذ قاسم

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

او قدم سطر على سطر

بمعنى احذف جدول التفاصيل اولا

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

33 دقائق مضت, ابوخليل said:

او قدم سطر على سطر

شكرا استاذي ابو خليل..

نعم قدم السطر الثاني على الاول

اقصد هذه الجملة كلها

Set rsHaraka = db.OpenRecordset("SELECT * FROM tblHaraka WHERE HarakaID <> " & strInvoiceID & "")
    Do While Not rsHaraka.EOF
        rsHaraka.Delete
        rsHaraka.MoveNext
    Loop

 

تم تعديل بواسطه Eng.Qassim
  • Like 1
رابط هذا التعليق
شارك

اذا تكتفي بسطر الاستاذ قاسم هذا

Set rsFatora = db.OpenRecordset("SELECT * FROM tblFatora  WHERE FatoraId <> " & strInvoiceID & "")

ليصبح الكود

Sub DeleteRecordsExceptOne()
    Dim db As DAO.Database
    Dim rsFatora As DAO.Recordset
    Dim strInvoiceID As Integer
    
    strInvoiceID = "1001"
    
    Set db = CurrentDb
    
    Set rsFatora = db.OpenRecordset("SELECT * FROM tblFatora  WHERE FatoraId <> " & strInvoiceID & "")
    Do While Not rsFatora.EOF
        rsFatora.Delete
        rsFatora.MoveNext
    Loop
    
        
    rsFatora.Close
    db.Close
    
    Set rsFatora = Nothing
    Set db = Nothing
End Sub

وغير الرقم 1001 لما هو موجود عندك في الجدول الرئيس

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

السلام عليكم  

بالاضافة لما تفضل بة اساتذتي الكرام جرب تغير هذه الاسطر . و وافنا بالنتيجة

Dim strInvoiceID As String

Set rsFatora = db.OpenRecordset("SELECT * FROM tblFatora WHERE FatoraId <> '" & strInvoiceID & "'")
Set rsHaraka = db.OpenRecordset("SELECT * FROM tblHaraka WHERE Fatora_id <> '" & strInvoiceID & "'")

بالتوفيق

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

منذ ساعه, ابوخليل said:

مشاركة مع الاستاذ قاسم

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

او قدم سطر على سطر

بمعنى احذف جدول التفاصيل اولا

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

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

ربنا يبارك فيكم اجمعين

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

وعن طريق تعديل رأس الكود الى as long مرة ثانية ومنسيتش مشاركة استاذنا الفاضل @ابوخليل 

12 دقائق مضت, ابوخليل said:

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

ربنا يبارك فيكم ويجعلة فى ميزان حسناتكم امين يارب بحق هذه الايام المباركة 

بشكر حضراتكم جدا وكل عام وحضراتكم بخير

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

58 دقائق مضت, Eng.Qassim said:

فالمسح يبدأ من جدول الحركة وينتهي بجدول الفاتورة

طالما توجد علاقة وتكامل وتتالي يكتفى بالحدف من جدول الفاتورة فقط

33 دقائق مضت, ابوخليل said:

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

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

ويمكن الاستغناء عن ثمانية اسطر في الوحدة النمطية

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

6 دقائق مضت, أبو حوده said:

ممكن حضرتك ترفق الوحدة بعد الاستغناء عن الاسطر المشار اليها للافادة ؟؟؟؟

Sub DeleteRecordsExceptOne()
    Dim db As DAO.Database
    Dim rsFatora As DAO.Recordset
    Dim strInvoiceID As Integer
    strInvoiceID = 1001
    Set db = CurrentDb
    Set rsFatora = db.OpenRecordset("SELECT * FROM tblFatora  WHERE FatoraId <> " & strInvoiceID & "")
    Do While Not rsFatora.EOF
        rsFatora.Delete
        rsFatora.MoveNext
    Loop
    rsFatora.Close
    db.Close
    Set rsFatora = Nothing
    Set db = Nothing
End Sub

ايضا في السطر الرابع طالما نتعامل مع متغيير رقمي فلماذا علامات التنصيص

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

حيث يفترض بالمستخدم عدم الدخول للاكواد

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

منذ ساعه, أبو حوده said:

فى كلا الكودين بيظهر نفس الخطأ مش عارف المشكلة من عندى ولا لا  انا بستخدم اوفيس 2013

الرسالة بسبب حجم حقل رقم الفاتورة اكبر من سعة المتغير

والحل كما اشار الاستاذ قاسم

منذ ساعه, Eng.Qassim said:

Dim strInvoiceID As Long

 

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

13 دقائق مضت, متقاعد said:

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

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

2 دقائق مضت, متقاعد said:

لرسالة بسبب حجم حقل رقم الفاتورة اكبر من سعة المتغير

لاني اشتغلت على اساس ماذكره في اول مشاركة ..الرقم يتكون من 4 ارقام ولهذا جعلته integer

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

8 دقائق مضت, Eng.Qassim said:

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

وجهة نظر جديرة بالاحترام

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

اخيرا اشير الى مشاركة سابقة لحجم المتغيرات الرقمية من باب التذكير فقط

اقتباس

 

 

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

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