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

المحافظة على الترتيب المسلسل داخل جدول


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

السلام عليكم

أصل هذا الموضوع هنا

 

أحببت أن أفرد الرد فى موضوع مستقل لنستفيد جميعا إن شاء الله

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

فى حال حذف أحد السجلات

و هذا هو الكود المستخدم

Option Compare Database

Private Sub Form_Current()
If Me.NewRecord Then
Dim MySQL As String, MyDB As DAO.Database, rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
 
MySQL = "Select [DashNum] From tblTest Order By DashNum;"
 
Set MyDB = CurrentDb()
Set rst1 = MyDB.OpenRecordset(MySQL, dbOpenSnapshot)
Set rst2 = rst1.Clone
 
rst1.MoveFirst: rst2.Move 1     'move to the 2nd Record in rst2
 
Do While Not rst2.EOF
  'If the difference between 2 consecutive Dash Numbers is not 1, since
  'they are ordered, this would indicate a gap in sequence
  If rst2![dashnum] <> rst1![dashnum] + 1 Then
    Me.dashnum = rst1![dashnum] + 1
      rst2.Close
      rst1.Close
      Set rst2 = Nothing
      Set rst1 = Nothing
        Exit Sub
  End If
  rst1.MoveNext
  rst2.MoveNext
Loop
 
rst2.Close
rst1.Close
Set rst2 = Nothing
Set rst1 = Nothing

End If
End Sub

المحافظة على الترتيب.rar

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

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

2. هل جربت:

       - حذف السجل الاخير

       - ضغط زر جديد ثم التراجع ب esc  ثم الضغط مرة اخرى

      - هل جربت حذف السجل الاول وهذا هو الاهم في التعقيب

3. الموضوع اعادة الترتيب ولكن الاقرب هو "استخدام الارقام المحذوفه في الترقيم" : وهنا لابد ان يعلم المستخدم ان ما يضاف اخيرا لن يكون اخيرا بل حسب مكان ماحذف اخيرا

 

تقبل تحياتي

 

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

@رمهان

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

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

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

الان, sandanet said:

@رمهان

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

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

تحياتي 

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

ما هذا

أترككم ساعات فأعود لأجد كل هذه المناقشات :biggrin::biggrin:

وفقك الله أستاذ رمهان

لم أجرب شيئا من هذا أبدا

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

و نحن نستفيد منك

و نحصل على الملف النهائى

شكرا لكم

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

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

Private Sub ÃãÑ7_Click()
DoCmd.GoToRecord , , acNewRec
Set rs = Me.RecordsetClone: rs.MoveFirst
If rs.RecordCount = 0 Then Me.dashnum = 1: Exit Sub
For i = 1 To rs.RecordCount
If i <> rs!dashnum Then Me.dashnum = i: Exit Sub
rs.MoveNext
Next i
Me.dashnum = DMax("dashnum", "tbltest") + 1
End Sub

وطبعايمكن الاختصار اكثر بفكره اخرى

ولكن السؤال : هل ممكن بدون كود ؟

بالتوفيق

 

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

جيد

لكن كلا الكودين فيه اضطراب فى العمل

جربت الحذف ثم - بدون انتقال للسجل التالى (البقاء فى المكان)

أضغط زر الأمر لإضافة سجل

يختار رقم سجل موجود أصلا

لعله يحتاج إلى ضبط

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

11 دقائق مضت, عبد الفتاح كيرة said:

جربت الحذف ثم - بدون انتقال للسجل التالى (البقاء فى المكان)

أضغط زر الأمر لإضافة سجل

يختار رقم سجل موجود أصلا

لعلم يحتاج إلى ضبط

جربت .. ذهبت للسجل 4 ثم حذفت ثم مباشره نقرت على زر الاضافة اعطاني رقم 4

هنا تعديل بسيط فقط في الذهاب للسجل الاول

Private Sub ÃãÑ7_Click()
DoCmd.GoToRecord , , acNewRec
Set rs = Me.RecordsetClone
If rs.RecordCount = 0 Then Me.dashnum = 1: Exit Sub
rs.MoveFirst
For i = 1 To rs.RecordCount
If i <> rs!dashnum Then Me.dashnum = i: Exit Sub
rs.MoveNext
Next i
Me.dashnum = DMax("dashnum", "tbltest") + 1
End Sub

تحياتي

يمكن نحتاج Me.Requery

في بداية الكود

Private Sub ÃãÑ7_Click()
Me.Requery
DoCmd.GoToRecord , , acNewRec
Set rs = Me.RecordsetClone
If rs.RecordCount = 0 Then Me.dashnum = 1: Exit Sub
rs.MoveFirst
For i = 1 To rs.RecordCount
If i <> rs!dashnum Then Me.dashnum = i: Exit Sub
rs.MoveNext
Next i
Me.dashnum = DMax("dashnum", "tbltest") + 1
End Sub

تحياتي

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

أخى رمهان

الكود تحسن

لكن لا يزال به بعض المشاكل

لا آمن أن أضع فى برامجى كودا يسبب و لو اليسير من المشاكل

هذا خطر

جزاكم الله خيرا

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

11 ساعات مضت, عبد الفتاح كيرة said:

أخى رمهان

الكود تحسن

لكن لا يزال به بعض المشاكل

لا آمن أن أضع فى برامجى كودا يسبب و لو اليسير من المشاكل

هذا خطر

جزاكم الله خيرا

استاذ عبدالفتاح

ماهي المشاكل ؟

وانا اصلا مش مقتنع ان استخدم فكرة الدوران ! ساعود بحل مختصر ان شاء الله

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

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