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

(تمت الاجابة) ترقيم تلقائي لحقل مع مراعاة الحذف والإلحاق


أبا عمر

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

إخواني الأعزاء طلبي هو عمل ترقيم تلقائي لحقل CATID مع مراعاة عملية حذف وإلحاق السجل بجدول المحذوفات

وقد حاولت عمل ذلك عن طريق الدالة DMAX لمعرفة أكبر رقم موجود في الجدول CATEGORIES ففي حدث بعد التحديث لحقل CATNAME وضعت الكود التالي

If IsNull(a) Then

[Textdel] = 1

Else

[Textdel] = DMax("[CATID]", "CATEGORIES") + 1

End Ifحيث a حقل غير منضم لحساب أكبر رقم موجود في حقل CATID

لكن المشكلة تحدث عند إلحاق السجل الى جدول DELCAT وحذفه من هذا النموذج ويالتالي من جدول CATEGORIES

حيث بعد نقل السجل وإضافة سجل جديد يتكرر الرقم CATID وعند إلحاق السجل الى المحذوفات يكو ن هناك رقم مكرر في جدول DELCAT ولا أريد تكرار الرقم CATID

مرفق مثال للتوضيح

za-KeppDelRec_up-LAST.rar

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

أخي الحبيب جزاك ربي خيرا

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

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

ارى ان تجعل عملك على جدول واحد ونموذج واحد وتضع خانة اختيار للتسجيل النهائي ، بحيث ان الذي لا يتم اختياره يضل مخفيا وغير ظاهر

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

جزاكم الله خيرا على ردك وإهتمامك أستاذنا الفاضل والكريم

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

ولقد حاولت فعل ذلك عن طريق إضافة مربع نص غير منضم على النموذج ووضعت بمصدره الدالة dmax لإحضار أعلى قيمة في الجدول الأول وأيضا مربع نص ثاني بنفس التوصيف الخاص بالمربع الأول لإحضار أعلى قيمة في الجدول الثاني وعنداضافة سجل جديد يقرأ من مربي النص أعلى قيمة ثم يبدأ بإضافة 1 لها ويضعها في حقل CATID لكن قابلتني مشاكل في التطبيق منها السجل الأول يكون مربي النص فارغين فتغلبت عليها بوضع قيمة إفتراضية 1 منها يبدأ الترقيم المهم أني لم أنجح في إكمال المطلوب

ولك جزيل الشكر

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

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

كيف ؟

نفرض اننا سجلنا اربعة اسماء يأخذون الارقام 1 ، 2 ، 3 ، 4 ، ثم نقلنا الرابع الى جدول الدائمين ( الحاق وحذف )

طبعا سينتقل هو ورقمه 4

وحينما نضيف اسما جديدا سيأخذ الرقم 5

وحينما ننقل صاحب الرقم 2 فسينتقل هو ورقمه ، وسيكون مكانه شاغرا هناك

بمعنى ان الجدول الاول ترقيم تلقائي بينما الجدول الآخر رقما عاديا غير قابل للتكرار

هل ترى مشكلة في هذا الحل ؟

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

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

ملحوظة : التسجيل في جدول المبدئي يكون له أسباب هذه الأسباب تنتفي في بعض الأحيان ويكون لا داعي لتسجيله في المبدئي ثم نقله الى الدائمين

مشكور أخي الكريم على سعة صدرك وتجاوبك الذي ينم على خلق كريم

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

وجدت لك الحل

اجعل الترقيم في جدول delcat تلقائي

وعند الالحاق الى جدول delcat لا تلحق الرقم ، الحق الاسم فقط

ستلاحظ انه تم منح السجل رقما جديدا وفريدا ايضا

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

حل ممتاز لكن لي إستفسار : 1-هل يكوم الجدول CATEGORIES يكون ترقيم تلقائي أم لا ؟

2-ولو كنت أود جعل الرقم CATID رقم فريد للطالب يظل معه من التسجيل المبدئي وينتقل معه الى النهائي أي يتم البحث عن الطالب بهذا الرقم في كل مراحل البرنامج.

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

حوار جميل

حل ممتاز لكن لي إستفسار : 1-هل يكوم الجدول CATEGORIES يكون ترقيم تلقائي أم لا ؟

2-ولو كنت أود جعل الرقم CATID رقم فريد للطالب يظل معه من التسجيل المبدئي وينتقل معه الى النهائي أي يتم البحث عن الطالب بهذا الرقم في كل مراحل البرنامج.

على كذا لزوم ادخال الرقم المبدئي يدويا

استخدم Dmax لاحضار اكبر رقم من الجدول البعيد ، ويمكنك بالكود ان تزيد عليه رقما ( +1 ) وتدخله آليا

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

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

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

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

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

لو فرضنا امكانية ذلك وعدم الصعوبة فيبقى احتمال التكرار وارد , كيف ؟

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

الحل :

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

سأنظر لك في هذا ان شاء الله

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


'انسخ هذا في وحدة عامة

Public Function NewcatID() As Long

On Error GoTo NewcatID_Err

Dim GORID As Long

Dim DELID As Long

Dim tmax As Long

    GORID = Nz(DMax("[catid]", "CATEGORIES"))

 DELID = Nz(DMax("[catid]", "DELCAT"))

tmax = GORID

If DELID > tmax Then tmax = DELID

tmax = tmax + 1

    NewcatID = tmax

Exit_NewcatID:

Exit Function

NewcatID_Err:

    MsgBox "Error " & Err & ": " & Error$

    Resume Exit_NewcatID

End Function



'وفي حدث النقر على زر جديد الصق هذا  ينطبق على النموذجين


DoCmd.GoToRecord , , acNewRec

Me![catID] = NewcatID()

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

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

أخي الحبيب أشكرك شكراً لا يعلم مداه إلا _الله _عز وجل فجزاك _الله_خيرا

أولا / الحل ممتاز وفوق الممتاز بارك_ الله_ فيك

ثانيا / لي إستفسار يحمل في طياته سؤال لوحظ أنه عند الضغط على زر إضافة جديد مرة واحدة بعد وضع الكود به كما ذكرت يزيد الترقيم التلقائي وهذا ممتاز ، لكن إذا ضغط عليه المستخدم مرة ثانية بالخطأ مثلا قبل البدء في إدخال البيانات يقوم بإضافة سجل جديد وهكذا بإستمرار فهل من طريقة لمنع إضافة سجل جديد إلا بعد الإنتهاء من السجل الحالي

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information