محمد ايمن قام بنشر مايو 6, 2012 قام بنشر مايو 6, 2012 اصدقائي الاكارم وردت مواضيع كثيرة عن عدم تكرار القيم في السجلات و لكن لم يرد اي موضوع عن تكرار القيمة في سجل واحد المرفق التالي فيه نموذج يحتوي على ثمانية حقول في السجل الواحد وضعت كود لمنع تكرار نفس القيمة في السجل الواحد وهو يعمل و لكن المشكلة ان الكود ( كارثي ) بكل معنى الكلمة If Me.item1 = Me.item2 Then MsgBox "rr" ElseIf Me.item1 = Me.item3 Then MsgBox "rr" ElseIf Me.item1 = Me.item4 Then MsgBox "rr" ElseIf Me.item1 = Me.item5 Then MsgBox "rr" ElseIf Me.item1 = Me.item6 Then MsgBox "rr" ElseIf Me.item1 = Me.item7 Then MsgBox "rr" End If هذا الكود يوضع بعد تحديث الحقل الأول و لمنع التكرار في جمع الحقول يجب ان يوضع في جميع الحقول ( لذلك هو كارثي ) هل من طريقة لتحسين هذا الكود ؟؟؟؟ منع تكرار القيمة في نفس السجل.rar
محمد ايمن قام بنشر مايو 6, 2012 الكاتب قام بنشر مايو 6, 2012 بعد التفكير و التحليل لبعض تطبيقات الاخوة في النتدى توصلت لهذا الكود ولكن هناك مشكلة عن تغيير القيمة في الحقل حيث ان الكود لا يستجيب للتغيير !!!! بعبارة اصح لنفرض تم ادخال القيمة 10 في الحقل الأول و تم ادخال القيمة 10 في الحقل الثاني الكود يعطي مكرر نغير قيمة الحقل 2 الى 20 يبقى الكود يعطي مكرر ماهو الحل ( بدون استخدام الامر docmd.runcommand accmd saverecord) ؟؟؟؟؟ منع تكرار القيمة في نفس السجل 2.rar
محمد ايمن قام بنشر مايو 6, 2012 الكاتب قام بنشر مايو 6, 2012 اصدقائي الاكارم المرفق السابق يحتوي خطأ وهو ان الكود يقوم بمقارنة الحقل الاول فقط مع باقي الحقول حتى لو تم استدعاء الكود اكثر من مرة المرفق الجديد يحتوي على تعديلات افضل حيث تم حل مشكلة تحديث بيانات الحقل كما تم منع الكود من مقارنة الحقل مع نفسه ( اي ان الكود لا يقارن الحقل الاول اذا تم ادخال بيانات في الحقل الاول و لا يقارن الحقل الثاني عند ادخال بيانات في الحقل الثاني و هكذا ) هذا هو الكود Sub testFields() On Error Resume Next Dim i, j, k, m As Variant Dim aa As Recordset Set aa = Me.Recordset With aa For i = 0 To .Fields.Count j = .Fields(i) m = .Fields(i).Name For k = 0 To .Fields.Count - 1 If .Fields(k).SourceField <> .Fields(m).SourceField Then If j = .Fields(k) Then MsgBox "الحقل مكرر" Exit Sub End If End If Next k Next i End With End Sub وفي حدث ( بعد التحديث لاي حقل ) Me.Refresh Call testFields كيف يمكنني وضع الكود في وحدة نمطية لاستدعاءه في اي نموذج وهل يوجد اي تعديل يجعل الكود اكثر مرونة و كفاءة منع تكرار القيمة في نفس السجل 3.rar
محمد ايمن قام بنشر مايو 8, 2012 الكاتب قام بنشر مايو 8, 2012 الكود السابق يعمل بشكل جيد ولكن هناك ما يعيبه وهو ان الكود يبدأ بالمقارنة من اول حقل الى آخر حقل مع قيمة كافة الحقول عند الاستدعاء كل مرة وبتفصيل اكثر لنفرض تم ادخال قيمة في الحقل الاول بدا الكود بمقارنة قيمة الحقل الاول مع الثاني فالثالث .... الخ ثم يبدا بمقارنة الثاني مع الاول فالثالث ... الخ ثم الثالث مع الاول فالثاني ... الخ ( دوخة ) وعند ادخال اي قيمة في اي حقل يتم تنفيذ الكود من البداية توصلت الى تعديل و الفضل لله عز وجل بحيث يقوم الكود بمقارنة قيمة الحقل الذي تم ادخال البيانات فيه مع باقي الحقول لنفرض تم ادخال البيانات في الحقل الخامس يبدا من الحقل الاول الى السابع و ينهي الحلقة ثم تم ادخال البيانات في الحقل السادس يبدا من الاول حتى السابع و ينهي الحلقة اي ان الكود ينفذ مرة واحدة فقط وانا مازلت بانتظار النتائج منع تكرار القيمة في نفس السجل 4.rar
أبو آدم قام بنشر مايو 8, 2012 قام بنشر مايو 8, 2012 أخي العزيز مسألة مقارنة الحقول في نفس السجل مسألة غير متصورة كثيراً كونها - وأصدقك القول - لم تمَر حاجاتها معي في حياتي البرمجية. ومنذ ظهر أمس وأنا أفكر في مسألة يلزمني فيها أن أقارن كل حقل بسابقه في النموذج وقبل حفظ السجل ، فلم يخطر ببالي شيئ أريد منك اذا سمحت أن توضح لي ما دفعك لمثل هذه الحاجة ؟ ............
أبو آدم قام بنشر مايو 8, 2012 قام بنشر مايو 8, 2012 ما وصلت له جيد جداً من ناحية مطابقته لفكرتك ولكنني ما زلت بحاجة لأن أعرف ما هي الفكرة الاساسية كي اتمكن من مساعدتك !! ...........
محمد ايمن قام بنشر مايو 8, 2012 الكاتب قام بنشر مايو 8, 2012 اخي ابو آدم نورت الموضوع الفكرة لدي نموذج مبيعات و بعد ادخال اسم المادة و رقم العدد المطلوب بيعه يتم فحص الكمية الموجودة في المستودع و اعطاء رسالة عن الكمية الحالية ولكن اذا تكرر اسم المادة في الفاتورة الواحدة فلا يعطي الكود مجموع البندين بل بند واحد فقط مثلا تم تكرار مادة تجربة 1 في البند الاول و الثاني و مجموع المادة في البندين 10 ( كل بند 5 ) و كمية المادة الموجودة في المستودع 5 من المفترض ظهور رسالة بان الكمية الحالية هي اقل من الكمية المطلوب بيعها ولكن الكود يقارن كمية المادة الموجودة في المستودع مع كمية المادة المطلوبة في البند الحالي ( 1 او 2 ) لذلك خطرت لي فكرة منع تكرار اسم المادة في الفاتورة الواحدة
محمد ايمن قام بنشر مايو 12, 2012 الكاتب قام بنشر مايو 12, 2012 وضعت الكود في وحدة نمطية ولكن ظهرت لي رسالة الخطأ Expected variable or procedure, not module مالسبب ؟ منع تكرار القيمة في نفس السجل 6.rar
Bluemind قام بنشر مايو 14, 2012 قام بنشر مايو 14, 2012 اخوي ايمن بارك الله فيك لقد قمت بتسمية الوحده النمطية ب "TestFields" و قمت بتسمية الاجراء بدخال هذه الوحدة ب "TestFields" قم باعادة تسميى الوحده النمطية باي اسم اخر وسوف ترى النتيجة
محمد ايمن قام بنشر مايو 14, 2012 الكاتب قام بنشر مايو 14, 2012 اخي الكريم bluemind لم اكن اعرف انه لايجب تسمية الوحدة النمطية بنفس اسم الكود الذي بداخلها قمت باعادة تسمية الوحدة النمطية و لكن الكود لا يعمل بشكل صحيح فعند ادخال اي قيمة يعطي رسالة بتكرار قيمة الحقل عندما تضع الكود في نفس النموذج يكون كالتالي Dim aa As Recordset Set aa = Me.Recordset و عندما وضعته في وحدة نمطية ظهر خطأ تحت كملة Me قمت بتغييرها الى Form ولكن للاسف لم ينجح الكود منع تكرار القيمة في نفس السجل 7.rar
monam قام بنشر أغسطس 24, 2012 قام بنشر أغسطس 24, 2012 اخي ابو آدم نورت الموضوع الفكرة لدي نموذج مبيعات و بعد ادخال اسم المادة و رقم العدد المطلوب بيعه يتم فحص الكمية الموجودة في المستودع و اعطاء رسالة عن الكمية الحالية ولكن اذا تكرر اسم المادة في الفاتورة الواحدة فلا يعطي الكود مجموع البندين بل بند واحد فقط مثلا تم تكرار مادة تجربة 1 في البند الاول و الثاني و مجموع المادة في البندين 10 ( كل بند 5 ) و كمية المادة الموجودة في المستودع 5 من المفترض ظهور رسالة بان الكمية الحالية هي اقل من الكمية المطلوب بيعها ولكن الكود يقارن كمية المادة الموجودة في المستودع مع كمية المادة المطلوبة في البند الحالي ( 1 او 2 ) لذلك خطرت لي فكرة منع تكرار اسم المادة في الفاتورة الواحدة اخي ابو آدم نورت الموضوع الفكرة لدي نموذج مبيعات و بعد ادخال اسم المادة و رقم العدد المطلوب بيعه يتم فحص الكمية الموجودة في المستودع و اعطاء رسالة عن الكمية الحالية ولكن اذا تكرر اسم المادة في الفاتورة الواحدة فلا يعطي الكود مجموع البندين بل بند واحد فقط مثلا تم تكرار مادة تجربة 1 في البند الاول و الثاني و مجموع المادة في البندين 10 ( كل بند 5 ) و كمية المادة الموجودة في المستودع 5 من المفترض ظهور رسالة بان الكمية الحالية هي اقل من الكمية المطلوب بيعها ولكن الكود يقارن كمية المادة الموجودة في المستودع مع كمية المادة المطلوبة في البند الحالي ( 1 او 2 ) لذلك خطرت لي فكرة منع تكرار اسم المادة في الفاتورة الواحدة عندي اقتراح وهو ان تطلب التأكد من الكمية الموجودة بالمستودع قبل التحديث مثلا If QTY.Value < STQ.VALUE Then DoCmd.CancelEvent MsgBox "NULL STOCK " DoCmd.GoToRecord , , acNewRec حيث ان STQ هي الكمية بالمستودع و QTY هي الكمية التي تريد اخراجها
رمهان قام بنشر سبتمبر 21, 2016 قام بنشر سبتمبر 21, 2016 (معدل) استاذ محمد ايمن (شعلة المنتدى) هل توصلت لحل ؟ اعجبني الموضوع وعند مروري بالصدفة تحياتي تم تعديل سبتمبر 21, 2016 بواسطه رمهان
co2002co قام بنشر سبتمبر 21, 2016 قام بنشر سبتمبر 21, 2016 السلام مساء الخير انا كان عندي نفس المشكله تقريبا هذا موضوعي قد تستفيد تو انتبه انو انت الي عملت لي الكود ههههه طيب كمل جميلك معي واضف لي شرط عدم الكرار ل اسم الدواء بدل الكود او عالاقل 2 مع بعض
محمد ايمن قام بنشر سبتمبر 21, 2016 الكاتب قام بنشر سبتمبر 21, 2016 تحية طيبة استاذنا الغالي رمهان هناك مقولة ( كلما ازداد علمي ازداد علمي بجهلي ) الامثلة السابقة كلها تعاني من خطا اساسي وهو انو الكود يفتح الجدول للتحقق من القيمة و بالتالي اصبح الكود يتحقق من القيمة في الجدول عوضا عن التحقق من القيمة في السجل الحالي طبعا كان السبب هو قلة خبرتي في الاكواد في ذلك الوقت ( منذ 4 سنوات تقريبا ) الحمدلله وصلت للحل و لكن ابتعادي عن المنتدى في الفترة الماضية هو ما انساني اكمال الموضوع منع تكرار القيمة في نفس السجل 10.rar 1
رمهان قام بنشر سبتمبر 21, 2016 قام بنشر سبتمبر 21, 2016 جميل استاذ محمد وبوركت ولدي استفسار : لماذا وضع الاجراء في كلاس وليس وحدة نمطية عامة ؟ وهذه مشاركة بفكرة لعل بها فائدة منع تكرار القيمة في نفس السجل.rar
رمهان قام بنشر سبتمبر 21, 2016 قام بنشر سبتمبر 21, 2016 الفكرة اعلاه معليش تحتاج تنقيح ولكن حبيت اتركها للفائدة
رمهان قام بنشر سبتمبر 21, 2016 قام بنشر سبتمبر 21, 2016 هذه فكره جديده منع تكرار القيمة في نفس السجل.rar
محمد ايمن قام بنشر سبتمبر 22, 2016 الكاتب قام بنشر سبتمبر 22, 2016 تحية طيبة استاذي الكريم الفكرة في المرفق الثاني رائعة لكن لو اردنا تطبيقها على ثلاث نماذج !!!!!! وكل نموذج يحتوي على عشر حقول يكون الناتج 3*10 =30 سطر وبفرض اردت ان اعدل الكود في هذه الحالة يجب ان اعدل 30 سطر برمجي لذلك فكرت في ان اضع الكود في وحدة نمطية او كلاس منذ ساعه, رمهان said: ولدي استفسار : لماذا وضع الاجراء في كلاس وليس وحدة نمطية عامة ؟ في هذا المرفق كنت اتدرب على الوحدات النمطية و الكلاسات و طرق استخدامها
رمهان قام بنشر سبتمبر 22, 2016 قام بنشر سبتمبر 22, 2016 تمام استاذ محمد وضحت الصورة هذه محاولة بكود خفيف وما عليك الا لصقه بعدد النماذج واعتقد هذا طبيعي . وفقط ضع خاصية التاق للعناصر المراد ضمها Private Sub Form_BeforeUpdate(Cancel As Integer) Dim c As New Collection On Error Resume Next For Each ct In Me.Section(0).Controls If ct.Tag = "ramhan" Then c.Add ct, ct: i = i + 1 Next If c.Count <> i Then Cancel = MsgBox("يوجد تكرار") End Sub كما ان لي ملاحظة على مشاركاتي السابقة بعدم دقتها وتبقى افكار كما انبه على الحل المقدم من قبلكم استاذ محمد بانه حدد اسماء الحقول في الكود وكذلك عدد التكرار كثير جدا لانه يقارن كل حقل بالاخريات وهكذا بالتوفيق منع تكرار القيمة في نفس السجل.rar
co2002co قام بنشر سبتمبر 22, 2016 قام بنشر سبتمبر 22, 2016 السلاع عليكم ورحمة الله وبركاته اسعد الله صباحكم بكل خير اساتذتي الكرام حاولت اطبق كلامكم على برنامجي ولكن لم افلح دلوني اين الخطأ
محمد ايمن قام بنشر سبتمبر 23, 2016 الكاتب قام بنشر سبتمبر 23, 2016 في ٢٢/٩/٢٠١٦ at 05:23, رمهان said: Private Sub Form_BeforeUpdate(Cancel As Integer) Dim c As New Collection On Error Resume Next For Each ct In Me.Section(0).Controls If ct.Tag = "ramhan" Then c.Add ct, ct: i = i + 1 Next If c.Count <> i Then Cancel = MsgBox("يوجد تكرار") End Sub تحية طيبة استاذ رمهان ممكن شرح الكود
رمهان قام بنشر سبتمبر 24, 2016 قام بنشر سبتمبر 24, 2016 Private Sub Form_BeforeUpdate(Cancel As Integer) Dim c As New Collection تعرف متغير من نوع كولشن ليتم استخدام وظائفه On Error Resume Next الخطأسيحصل عند تكرار احد القيم For Each ct In Me.Section(0).Controls الدوران على العناصر التي بجزء التفصيل If ct.Tag = "ramhan" Then c.Add ct, ct: i = i + 1 الدوران على العناصر التي التاق لديها باسم رمهان واذا هناك تكرار لن يضيف للقائمة Next If c.Count <> i Then Cancel = MsgBox("يوجد تكرار") this هذا فكرة الحل وهو المقارنة بين عداد عدد العناصر والقيم المضافة فلو حصل تكرار ستكون عدد القيم اقل من عدد الحقول وهذا مؤشر للتكرا End Sub هذا ومارايك بالفكرة استاذ محمد ؟ تحياتي 2
co2002co قام بنشر سبتمبر 29, 2016 قام بنشر سبتمبر 29, 2016 السلام عليكم ورحمة الله وبركاته مساء الخير اساتذتي الكرام ممكن مساعدتي في برنامجي والذي يحتوي على نفس مشكلة التكرار
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.