الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

(برمجيا) كيف أجعل مسلسل تكرار الطالب يزداد تصاعديا وفق شروط؟

بدأه pms في 3 نوفمبر 2009 · 14 رد · 1,237 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

في جدول (غياب الطلاب) لبرنامج معارف المدرسي

أرغب في عمل فورم مستندا إلى هذا الجدول

وسؤالي: كيف أجعل مسلسل تكرار الطالب يتزايد تصاعديا بـ (1)

ولا يكرر الرقم المسلسل للطالب نفسه علما بأن هذا السجل (مفتاح أساسي)

وفي كل مرة يدرج بيانات جديدة للطالب (إعادة) التسلسل من جديدة لتتابع السلسلة عند حذف سجل

post-129354-1257275521_thumb.jpg

وشرط آخر: عدم تكرار بيانات الطالب في نفس التاريخ

الطالب لا يتكرر أكثر من مرة في التاريخ الواحد كما في مثال الأخت العبقرية زهرة

أشكر للجميع مرورهم على هذا الموضوع

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

بتحقق الشرطين السابقين

أبومحمد

#2

للرفع بانتظار ردكم الكريم

#3

أخي الكريم :

أعتقد أن الجدول المرفق يحتاج إلى إعادة نظر. فمن الأفضل أن تقسمه إلى جدولين بكل جدول حقل مفتاح واحد فقط وتربط الجدول الأول بالثاني بمفتاح "غريب" أو "أجنبى" - لا اعرف التسمية العربية الصحيحة - ومن ثم عند إضافة أي بيانات للجدول الفرعي لا يتكرر مسلسل الطالب كما طلبت حيث سيكون الجدول الرئيسي هو جدول الطالب بجميع بياناته والجدول الثاني هو جدول الغياب - كما فهمت من تسمية الحقول - ستكون العلاقة بينهما علاقة واحد إلى متعدد..

#4

أخي الكريم team2000

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

أولاً: أشكر لك مشاركتك بالرد ولطفك بالمرور على الموضوع

ثانياً: فكرة السؤال الإبقاء على تصميم الجدول كما هو (لأنه تابع لقاعدة بيانات مدرسية) يستحسن عدم المساس بها

وتم ربط هذا الجدول بقاعدة بيانات خارجية الغرض منها أنشاء فورم

يسهل عملية إدخال البيانات اليومية المتكررة باستخدام الباركود

ولك الشكر

أبومحمد

#5

أخواني الكرام

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

وجدت جزأ من الحل في الكود التالي

Me!mosalsal = Nz(DMax("[mosalsal]", "[st_gheyab]"), 0) + 1

ولكنه شامل لجميع الطلاب

والمطلوب حصر هذا التزايد لكل طالب منفردا

وأعتقد أن الكود يحتاج أضافة شرط (رقم الطالب Numberh)

أتعشم منكم المساعدة

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

أبومحمد

#6

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

أخي ابو محمد هل تقصد كود يعيد التسلسل الصحيح للطالب

في الحقل mosalsal بناء على رقم الطالب في حقل numberh

يعني رقم الطالب 12 في مثالك السابق تكرر 3 مرات هل تريد ان يأخذ حقل mosalsal

لهذا الطالب الارقام 1 - 2 - 3 - ثم نأتي للطالب رقم 13 فنجد انه تكرر 4 مرات فيأخذ التسلسل

بالاقام من 1 الى 4 وهكذا بقية الطلاب .. هل هو هذا القصد بارك فيك ؟ أرجو التوضيح

هل المقصود حسب هذه الصورة ؟

post-62347-1257474159_thumb.gif

شكرا لك

تم تعديل هذه المشاركة بواسطة اكسيرالحياة في 6 نوفمبر 2009 في 05:23

#7
اقتباس
وجدت جزأ من الحل في الكود التالي

كود

Me!mosalsal = Nz(DMax("[mosalsal]", "[st_gheyab]"), 0) + 1

يمكنك أن تضع الشروط التى تريها مع الدالة

مثل

Me!mosalsal = Nz(DMax("[mosalsal]", "[st_gheyab]","numberh='12'"), 0) + 1

تم تعديل هذه المشاركة بواسطة mrnooo2000 في 6 نوفمبر 2009 في 16:28

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#8

أولاً: الأخ الفاضل والمبدع المتألق اكسيرالحياة

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

يسعدني ويشرفني مرورك لهذا الموضوع من أخ طالما تعلمت منه واستفدت كثيرا ولا زلت أتطلع للكثير

أخي الكريم .. بارك الله فيك ما أشرت أليه صحيح

وهذا ما أردته بالضبط: (كود يعيد التسلسل الصحيح للطالب)

بحيث عند إدخال الرقم المدني للطالب فإنه (تلقائيا) يضع التسلسل الصحيح تصاعدياً للطالب الواحد.

وهكذا لجميع الطلاب كما هو واضح في الجدول الذي رفعته في مثالك (ربي يجزيك الجنة)

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

وأنر له دربه وحببه إلى قلوب عبادك وأرزقه رزقاً مباركاً

ثانياً: الأخ العزيز: mrnooo2000

أشكر لك لطفك ومرورك هنا وهذا فضل منك

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

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

جعلك الله ذخرا وسندا

أخوكما: أبومحمد

#9

تفضل اخى

ارجو ان يكون هذا ما تريد

st_gheyab.rar

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#10

بســم الله الـرحمــن الرحيــم

الأخ الفاضل: mrnooo2000

أقدم لك شكري وامتناني على مجهودك ومساعدتك لي

وتوفيقك (بإذن من المولى) للحل الصحيح

هذا هو فعلا ما أريده مع ملاحظة ما يلي:

ما ذكرته في الكود

mosalsal = Nz(DCount("[numberh]", "st_gheyab", "[numberh]='" & numberh & "'"), 0) + 1

معنيٌ بأحصاء عدد مرات تكرار رقم الطالب ثم يضيف إليه +1 كتسلسل جديد

وعند التجربة [أرجو أن تجرب] على نفس المثال السابق للطالب رقم 12 يعطي النتيجة 4 لأن عدد التكرار 3 مضاف إليه +1 = 4 وهذا صحيح شكلاً وخاطئ مضموناً

وهنا تظهر المشكلة والمعضلة (الي دوختني) وهي

أن مسلسل هذا الطالب فعليا هو: 1 ، 3 ، 4 لأن 2 أسقط بحذف سجله

والمفروض أن يكون التكرار الرابع: 1 ، 3 ، 4 هو 5

وهنا عدلت بالكود ((بعد أذنك)) بدلا من DCount إلى DMax على مسلسل الطالب ليصبح الكود الجديد:

mosalsal = Nz(DMax("[mosalsal]", "st_gheyab", "[numberh]='" & numberh & "'"), 0) + 1

تم تجربة الكود ونجحت التجربة

لك من الله عظيم الأجر والثواب

أعذرني على استرسالي واستطرادي في الكلام

بقي لي من سؤالي ما يلي

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

أشعر أني أثقلت كثيرا فأرجو المسامحة

أخوكم أبومحمد

#11

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

الكود السابق بعد التعديل يؤدي الغرض .. لكن هل يتم التحديث دفعة واحدة

لجميع السجلات وماذا عن الحذف هل اذا حذفت سجلا هل سيعاد الترتيب ؟ في

مثالي التالي استخدمت حلقة تكرارية مع تايمر مع مود أو رنج للسجلات حسب

تكرارها أنظر الكود التالي

Dim rst As ADODB.Recordset
Dim i As Integer
Set rst = New ADODB.Recordset
rst.Open "[st_gheyab]", CurrentProject.Connection, _
adOpenDynamic, adCmdTable
CountNum = DCount("*", "st_gheyab", "[numberh]=[txtnumberh]")

If CountNum = 0 Then
Me.TimerInterval = 0
DoCmd.GoToRecord , , acFirst
MsgBox "تم التحديث"
End If

For i = 1 To CountNum
   Me.txtmosalsal = i
 DoCmd.GoToRecord , , acNext
	Next

وتم تجربة الكود مع الحذف فعمل بصورة جيدة .. من أهم مزاياه انه يحدث للجميع

دفعة واحدة .. ارجو ان يكون فيه الفائدة للجميع والسلام

EK_st_gheyab.rar

تم تعديل هذه المشاركة بواسطة اكسيرالحياة في 7 نوفمبر 2009 في 08:51

#12

بســم الله الـرحمــن الرحيــم

الأخ الكريم: اكسير الحياة .. جعل الله لك من أسمك نصيباً فأنت بحقٍ (أكسيراًً ، ونبعاً) متجدداً للحياة

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

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

بحق قرأت الكود فوجدت عبقرياً فذاً شمر عن ساعديه وعصر مخه (ولب مخيخه) وأنتج شفرة برمجية نافعة

هي عصارة إلهام وإبداع وممارسة في فن البرمجة وفك العقد.. فتبارك من خلق وهدى وأبدع (بسم الله ما شاء الله عليك)

نعم هذا ما أردته وزيادة .. وفقك الله لطاعته ومحبته

بقي لي في مسألتي الشق الأخير .. وهو عدم تكرار الطالب في نفس التاريخ

بمعنى مسلسل الطالب لا يتكرر أبداً ، والسجل المدني للطالب لا يتكرر مع تاريخ اليوم الواحد

وهذا مثال للأخت الكريمة أم عهود زهرة الخير والعطاء

 <DIV align=right>Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 3022 Then
Response = acDataErrContinue
MsgBox ""
Me.tblgheyabDate = "عذرا أخي الكريم هذا الطالب مسجل من قبل بنفس التاريخ"
Else
If DataErr = 3058 Then
Response = acDataErrContinue
MsgBox "عذرا أخي الكريم  لا يمكن ترك حقل التاريخ فارغاً"
Else
MsgBox "Error#: " & DataErr
Response = acDataErrDisplay
End If
End If
End Sub</DIV>

وأخيرا تقبل شكري ودعائي

أبومحمد

#13

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

اقتباس
بمعنى مسلسل الطالب لا يتكرر أبداً ، والسجل المدني للطالب لا يتكرر مع تاريخ اليوم الواحد

أهلا أخي ابو محمد شكرا لك ياغالي الدعاء الطيب الحسن

جرب هذا الكود طبعا عند تكرار طالب في الاضافه بنفس الكود ونفس اليوم

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

بمعنى ان الطالب رقم 15 في يوم 11 في شهر 12 في عام 1430 متكرر وسبق

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

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

لكي نتمكن من المقارنه بين السجلات المختلفه .. ارجو ان يؤدي الغرض ويفيد

والسلام

EK2_st_gheyab.rar

#14

أخي ذو الهمة الرفيعة والعطاء المتجدد اكسير الحياة

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

شكر لك شكر لك على ابداعك وتألقك

بابتكاراتك وأفكارك النيرة أنت مبدع برب السموات والأرض

كلما تأملت صياغة الأكواد أقف مذهولا أمام عبقريتك الفذة

ربط العلاقات وصياغة المعادلات وبناء التعشيش وفق الشروط .. كلها تنساب معك وتتطاوع لأمرك

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

فـ (بسم الله ما شاْ الله عليك) ولو جاز لي شرعا المبالغة في المديح ،، لأطريتك حتى أجازي معروفك

سر على بركة الله فتلميذك منصت لك مستغرق في أفكارك متعلم على يديك

(الله يجزيك الجنة ويغفر لك ولوالديك وللمسلمين)

وقبل أن أفلت لوحة المفاتيح أحببت أن أستفسر لو سمحت لي

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

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

ثانياً: متى يظهر الحقل المستحدث الذي يضم التاريخ ورقم الطالب (ما هو الحدث؟)

أخيراً هل أضافة زر الأمر1 مقصود لذاته أم هو عرضياً لأنه لا توجد له وظائف في الكائنات البرمجية

تقبل مني خالص الدعاء

أخوك/ أبو محمد

#15

الاخ ابو محمد شكرا لك على الدعاء الطيب

لكن ترى العبقريه بعيدة عني فأنا لست الا طالب علم أخطيء وأصيب وما أكثر أخطائي

نعود لأسئلتك

اقتباس
خانة مسلسل الطالب يتم إدخالها يدوياً (وسابقا) تم التوصل إلى الإضافة البرمجية

يمكنك وضع الكود التالي

Me.TimerInterval = 50

في حدث زر اضافة سجل بعد العبارة

DoCmd.GoToRecord , , acNewRec

او في اي حدث تراه عند اضافة السجل

اقتباس
متى يظهر الحقل المستحدث الذي يضم التاريخ ورقم الطالب (ما هو الحدث؟)

لاظهاره ضع هذا الكود

Me.txtall.Visible = True

أخيراً هل أضافة زر الأمر1 مقصود لذاته أم هو عرضياً لأنه لا توجد له وظائف في الكائنات البرمجية

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

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

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…