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

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


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

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

عندي قاعدة بيانات لجدول الحصص والمطلوب عند تنظيم جدول الحصص او المحاضرات مايكون فيه تعارض مثلا يوم الاحد : عندي مادتين حطيت الاولى بقاعة 209 الساعه 10   .. والماده الثاني حطيتها الساعه عشره بنفس الساعه ونفس القاعه هنا وقتها ابي يطلع لي رسالة توضح حدث تعارض .. وهذي العملية اكيد بكود وانا ضعيف بالاكود فارجو المساعده 

وهذا مرفق 

جدول المحاضرات.rar

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

اخ عبدالله

طلبك يحتاج لتفرغ للاجابة !! فهو بمثابة طلب برنامج ! كما انه يوجد به بعض الامور المتقدمة !!

 

هذا للعلم والامل في الاخوة الاعزاء !

 

تحياتي 

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

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

Dim rst As Recordset
Set rst = Me.RecordsetClone

rst.MoveFirst
Do Until rst.EOF
If rst![كود اليوم] = Me![كود اليوم] And rst![الفترة] = Me![الفترة] And rst![القاعة] = Me![القاعة] And rst![الدكتور] = Me![الدكتور] Then

MsgBox " يوجد تعارض بالجدول ", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading, " تنبيه"

Me.Undo
DoCmd.CancelEvent
[كود اليوم].SetFocus
Exit Do
End If
rst.MoveNext
Loop
rst.Close
رابط هذا التعليق
شارك

اوك اخي عبدالله

لم اعرف انك تحتاج المساعدة فقط في جدول "تنظيم الجدول" عذرا" ونعوضك في شرح الكود !

اولا اتوقع ان الحدث هو قبل التحديث للنموذج 

ثانيا الشرح :

''تعريف كائن مجموعة السجلات
Dim rst As Recordset
''اسناد قيمة للكائن وهي مجموعة سجلات النموذج الحالية
Set rst = Me.RecordsetClone
''اذهب لاول سجل لانه يريد المرور على جميع السجلات
rst.MoveFirst
'' احد الجمل التي تساعد على الدوران - حلقة - وبالعربي لف حتى النهاية
Do Until rst.EOF
 ''والتي هي تمثل بيانات الموجودة  وبين البيانات التي بالنوذج الجديدة rst'هنا مربط الفرس فبدأ يقارن ماهو موجود بمجموعة السجلات
'' فعند تطابق جميع الشروط ادناه تظهر رسالة ويعمل تراجع والخروج من الدوران والذهاب لامر الانتقال للسجل الثاني
If rst![كود اليوم] = Me![كود اليوم] And rst![الفترة] = Me![الفترة] And rst![القاعة] = Me![القاعة] And rst![الدكتور] = Me![الدكتور] Then
''الرسالة
MsgBox " يوجد تعارض بالجدول ", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading, " تنبيه"
''التراجع والغاء الحدث
Me.Undo
DoCmd.CancelEvent
''نقل التركيز لكود اليوم لتعديل البيانات
[كود اليوم].SetFocus
''الخروج من الدوران حيث وجد التكرار
Exit Do
End If
'' الانتقال الى سجل جديد لفحصه
rst.MoveNext
Loop
''اغلاق الكائن
rst.Close

ولو حبيت ترفق النموذج ونضع لك حل رمهاني مختزل ومختصر واسهل !!

 

بالتوفيق

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

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

ibhHrX.png

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

المشكلة ان هناك الامر movefirst كأمر بالانتقال وليس هناك سجلات

كالعموم ضع الامر التالي في اول الكود وهو بمثابة حل مبدئي . لاني اكتب من الموبايل.

On error resume next

بالتوفيق

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

على فكرة !! الكود جميل .. ولكن فيه فخ بسيط !

جرب ان تعدل الشعبه ! او المادة! حيث ليسا ضمن الشرط ..

حبيت اعرف مصدر الكود اخي عبدالله من وين..

تحياتي

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

السؤال الان : هل الشعبة ورمز المادة داخلة في شرط عدم التكرار ؟ ام فقط المقارنة تتم مع كود اليوم والدكتور والفترة والقاعة ؟؟

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

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

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

وهذا الكود اشتغل معي تمام بنزله للفايده للجميع واذا فيه تعديل عدلو لكن اانا اشتغل معي تمام  :geek:

Dim rst As Recordset
Set rst = Me.RecordsetClone
On Error Resume Next
rst.MoveFirst
Do Until rst.EOF
If rst![كود اليوم] = Me![كود اليوم] And rst![الفترة] = Me![الفترة] And rst![القاعة] = Me![القاعة] And rst![الدكتور] = Me![الدكتور] Then

MsgBox " يوجد تعارض بالجدول ", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading, " تنبيه"

Me.Undo
DoCmd.CancelEvent
[كود اليوم].SetFocus

Exit Do
End If
If rst![كود اليوم] = Me![كود اليوم] And rst![الفترة] = Me![الفترة] And rst![القاعة] = Me![القاعة] Then

MsgBox " يوجد تعارض بالقاعات ", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading, " تنبيه"

Me.Undo
DoCmd.CancelEvent
[كود اليوم].SetFocus

Exit Do
End If
If rst![كود اليوم] = Me![كود اليوم] And rst![الفترة] = Me![الفترة] And rst![الدكتور] = Me![الدكتور] Then

MsgBox " يوجد تعارض بالدكتور ", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading, " تنبيه"

Me.Undo
DoCmd.CancelEvent
[كود اليوم].SetFocus

Exit Do
End If
rst.MoveNext
Loop
rst.Close
End Sub

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

معليش اخوي عبدالله : انت واضع الكود عند اي حدث ؟؟ هل هو على مستوى النموذج وعند حدث قبل التحيث ؟؟ ام اين ؟؟

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

معناته انت واقع في الفخ !!!!

 

ماهوه انا قلت لك من اول جرب : اعمل تغيير لرمز المادة مثلا او للشعبة لواحد من السجلات بدون ما تغير في حقول المقارنة !! شف ايش يصير معاك !!!!

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

اخيراً ... معناته الآن الكود مش شغال وما ينفعشي في الحدث قبل التحديث للنموذج ! لكي يعمل الكود معك تمام ضعه عند حدث بعد التحديث لكل مربع من مربعات المقارنة اي عند الفترة وكود اليوم والقاعة والدكتور ..

 

او نعطيك حل رمهاني .. سهل ومجاني ..

 

نصلي الفجر .. ونعود ..

 

تحياتي

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

اخي عبدالله

تفضل سطر واحد من الكود !!

مع ملاحظة متطلب بسيط : قم بانشاء حقل جديد بالجدول وباسم id   ونوعه ترقيم تلقائي واحفظ الجدول واعرض البيانات سترى تسلسل جديد تلقائي وهو معرف للسجل !

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

If Nz(DLookup("id", "[تنظيم الجدول]", "[كود اليوم]&[الفترة]&[القاعة]&[الدكتور]='" & كود_اليوم & الفترة & القاعة & الدكتور & "'"), 0) <> id Then Cancel = MsgBox("مكرر")

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

 

بالتوفيق

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

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

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

  • 8 months later...
في 14‏/5‏/2015 at 02:39, رمهان said:

اخي عبدالله

تفضل سطر واحد من الكود !!

مع ملاحظة متطلب بسيط : قم بانشاء حقل جديد بالجدول وباسم id   ونوعه ترقيم تلقائي واحفظ الجدول واعرض البيانات سترى تسلسل جديد تلقائي وهو معرف للسجل !

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


If Nz(DLookup("id", "[تنظيم الجدول]", "[كود اليوم]&[الفترة]&[القاعة]&[الدكتور]='" & كود_اليوم & الفترة & القاعة & الدكتور & "'"), 0) <> id Then Cancel = MsgBox("مكرر")

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

 

بالتوفيق

إذا ممكن تتفضل علينا بإعادة كتابة الكود

لكن باستبدال العربية بالانكليزية

حتى نستوعب بناء الجملة

 

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

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.

×
×
  • اضف...

Important Information