kaser906 قام بنشر فبراير 10, 2018 قام بنشر فبراير 10, 2018 السلام عليكم ورحمة الله وبركاته لنفترض أن لدي نموذج بأسم reg خاص بتسجيل النسخه ولدي عدة نماذج form1 form2 form3 اريد عند فتح احد النماذج الثلاثة فتح النموذج reg للتأكد من تسجيل النسخه اذا كانت النسخه مسجله يقوم باغلاق النموذج reg ويكمل فتح النموذج المراد فتحه وان لم تكن مسجله يظهر نموذج reg
sandanet قام بنشر فبراير 10, 2018 قام بنشر فبراير 10, 2018 (معدل) اخي الكريم كاسر الامور لاتتم بهذا الشكل الذي تفضلت به ..ففي عالم البرمجة الامور تتم على نحو مغاير لما تقوله للآخرين .. دعنا نحلل المسألة بشكل بسيط في البداية يجب ان نعرف ان نموذج التسجيل وظيفته المحددة هي قراءة رقم التسجيل الذي يدخله المستخدم في مربع النص ويقارنها مع رقم الهارد مثلاً ومن ثم تخزين رقم التسجيل في الجدول ... هنا نلاحظ ان نموذج التسجيل لايقرأ القيمة التي يخزنها في الجدول لان وظيفته هي قراءة مايدخله المستخدم فقط ويقارنها بقيمة الهارد لكي يتم قراءة رقم التسجيل المخزن في الجدول في كل مرة يقوم المستخدم بفتح البرنامج فهنا نضع في حدث عند الفتح للنموذج الرئيسي كود فحص فإذا وجد ان القيمة المخزنة في الجدول صحيحة يقوم بفتح النموذج والا فسوف يظهر رسالة للمستخدم بعدم صحة البيانات ومن ثم يفتح له نموذج التسجيل طبعاً برمجياً نحن لاتحتاج الى التأكد من رقم التسجيل في كل مرة يتم فتح احدى تلك النماذج بل كل ماعليك فعله هو وضع متغير عام من نوع Boolean يعطيك true او false فقط مع استخدام عبارة if الشرطية كيف يتم ذلك؟ الجواب لنأتي الى بداية العملية .. عندما يقوم المستخدم بادخال رقم التسجيل الصحيح في نموذج التسجيل فسوف تظهر له رسالة بنجاح عملية التسجيل .. بعد تلك الرسالة نضع متغير عام (public) وليكن x = true اما عندما يكون رقم التسجيل خطأ فسوف تظهر له رسالة فشل التسجيل لان الرقم غير صحيح .. بعد تلك الرسالة نضع نفس المتغير السابق يساوي x = false في كلتا الحالتين سوف يتم تخزين رقم التسجيل الذي ادخله المستخدم في الجدول سواء كان صح ام خطأ لايهم لاننا سوف نتأكد من صحته عند فتح النموذج الرئيسي الآن نأتي على النموذج الرئيسي وضع في حدث عند الفتح كود التحقق من القيمة المخزنة في الجدول كالتالي x = false if Nz(Dlookup("[serial]", "tblsn"),0) = HardSerial() then x = true else: x = false if x = false msgbox "رقم تسجيل البرنامج غير صحيح" docmd.openform "reg" DoCmd.close acForm, Me.Name end if ومن ثم نأتي للنموذج الثاني وضع الكود التالي في حدث عند الفتح if x = false msgbox "رقم تسجيل البرنامج غير صحيح" docmd.openform "register" DoCmd.close acForm, Me.Name end if وكذلك لبقية النماذج نضع لها هذا الكود في حدث عند الفتح if x = false msgbox "رقم تسجيل البرنامج غير صحيح" docmd.openform "register" DoCmd.close acForm, Me.Name end if نلاحظ ان اعتمادنا على قيمة x التي لو كانت true فسوف يتم فتح النموذج بشكل طبيعي ولو كانت false فسوف يغلق النموذج ويفتح نموذج التسجيل قيمة x تخزن في الذاكرة عند فتح النموذج الرئيسي لان الكود في النموذج الرئيسي سوف يفحص رقم التسجيل المخزن في الجدول ويطابقه برقم الهارد فاذا وجدها قيمة مطابقة فسوف يخزن x = true والا فان x = false هذا كل مافي الامر .. اتمنى ان يكون شرحي واضح تحياتي تم تعديل فبراير 10, 2018 بواسطه sandanet 2
kaser906 قام بنشر فبراير 11, 2018 الكاتب قام بنشر فبراير 11, 2018 الله يعطيك العافية اخي @sandanet الان تصوري اختلف عما كنت افكر فيه لدي استفسار هل توجد مشكلة عند استخدام هذا الكود في كل النماذج المراد من خلالها فحص رقم النسخه 7 ساعات مضت, sandanet said: x = false if Nz(Dlookup("[serial]", "tblsn"),0) = HardSerial() then x = true else: x = false if x = false msgbox "رقم تسجيل البرنامج غير صحيح" docmd.openform "reg" DoCmd.close acForm, Me.Name end if لأن هذا الكود يظهر لدي أخطاء عند الفتح لايتم التعرف على x 7 ساعات مضت, sandanet said: if x = false msgbox "رقم تسجيل البرنامج غير صحيح" docmd.openform "register" DoCmd.close acForm, Me.Name end if
sandanet قام بنشر فبراير 11, 2018 قام بنشر فبراير 11, 2018 (معدل) اخي الكريم كاسر طبعاً لاتوجد مشكلة لو استخدمت ذلك الكود في كل النماذج لكن لماذا نستخدمه في حين اننا يمكننا ان نستخدم الكود المبسط قلت لي انك واجهت خطأ في عدم تعرف البرنامج على قيمة x الخطا هو انك لم تقم بتعريف المتغير x كمتغير عام في البرنامج الحل هو انشاء وحدة نمطية وسمها variables وقم باضافة التالي Public x as Boolean وان شاء الله يعمل معك بصورة سليمة هنا قمنا بتعريف المتغير x كمتغير عام من نوع Boolean ليكون اما true او false .. هذا معناه انك لو وضعت x = true في النموذج رقم 1 ففي النموذج رقم 10 ستكون قيمة x = true ايضاً .. هذا مايسمى بالمتغير العام .. كما يمكنك اضافة اي متغيرات عامة اخرى في نفس الوحدة النمطية السابقة يعني مثلاً اريد اضافة متغير y قيمته 1 نأتي الى الوحدة النمطية السابقة ونضع Const y = 1 وهكذا تحياتي تم تعديل فبراير 11, 2018 بواسطه sandanet 2
kaser906 قام بنشر فبراير 11, 2018 الكاتب قام بنشر فبراير 11, 2018 35 دقائق مضت, sandanet said: اخي الكريم كاسر طبعاً لاتوجد مشكلة لو استخدمت ذلك الكود في كل النماذج لكن لماذا نستخدمه في حين اننا يمكننا ان نستخدم الكود المبسط قلت لي انك واجهت خطأ في عدم تعرف البرنامج على قيمة x الخطا هو انك لم تقم بتعريف المتغير x كمتغير عام في البرنامج الحل هو انشاء وحدة نمطية وسمها variables وقم باضافة التالي Public x as Boolean وان شاء الله يعمل معك بصورة سليمة هنا قمنا بتعريف المتغير x كمتغير عام من نوع Boolean ليكون اما true او false .. هذا معناه انك لو وضعت x = true في النموذج رقم 1 ففي النموذج رقم 10 ستكون قيمة x = true ايضاً .. هذا مايسمى بالمتغير العام .. كما يمكنك اضافة اي متغيرات عامة اخرى في نفس الوحدة النمطية السابقة يعني مثلاً اريد اضافة متغير y قيمته 1 نأتي الى الوحدة النمطية السابقة ونضع Const y = 1 وهكذا تحياتي الف تحية والف شكر لك اخي الكريم
سلمان الشهراني قام بنشر فبراير 21, 2018 قام بنشر فبراير 21, 2018 الله يعطيكم العافيه طيب هل من الممكن حفظ المتغيير x لمره واحده في ذاكره الاكسس اقصد يعني فتحت الان والمتغير false هل عند تغيير المتغير الى true يكون ثابت على طول حتى وان اغلقت قاعده البيانات وفتحتها مره اخرى مرفق مثال sa.rar
sandanet قام بنشر فبراير 21, 2018 قام بنشر فبراير 21, 2018 (معدل) أخي سلمان ما فائدة جعل المتغير x ثابت على طول حتى وان اغلقنا قاعدة البيانات؟ في الواقع هذا لايخدم البرنامج وذلك لانه لو تم حفظ قيمة x = true بشكل دائم حتى بعد إغلاق البرنامج فهذا يعني ان البرنامج مفعل وسيتم فتحه بشكل دائم حتى لو كان كود التفعيل غير صحيح وهذا لانرغب به نحن هدفنا هو جعل البرنامج يتحقق من كود التفعيل اولاً في كل مرة يتم فتح البرنامج فإن كان صحيحاً يضع x = true والا فإن x = false وان تخزن قيمة x في الذاكرة طالما برنامجنا مفتوح لذلك قمنا بتعرف x كمتغير عام (اي طالما البرنامج شغال) كذلك اراد الاخ كاسر ان لايتم فتح اي نموذج من نماذج البرنامج الا بعد التحقق من صحة تسجيل البرنامج وهذا يتم عن طريق x = true ايضاً فيكفي ان نضع if في حدث عند الفتح لأي نموذج لنتحقق من قيمة x التي في الذاكرة فإذا كانت true افتح النموذج بشكل طبيعي والا قم بإظهار رسالة ان البرنامج غير مسجل ومن ثم افتح نموذج التسجيل تحياتي تم تعديل فبراير 21, 2018 بواسطه sandanet 1
سلمان الشهراني قام بنشر فبراير 21, 2018 قام بنشر فبراير 21, 2018 جميل جدا وكلامك صحيح 100 % ولكن السؤال لغرض استخدام اخر استاذي الكريم
sandanet قام بنشر فبراير 21, 2018 قام بنشر فبراير 21, 2018 يمكنك عمل ذلك لكن عن طريق تخزين قيمة x في الريجستري في الويندوز وفي كل مرة يتم فتح البرنامج على نفس الجهاز يتم قراءة الرجيستري اولاً فإن كانت القيمة صحيحة يكمل فتح البرنامج وهكذا كما يمكنك تخزين قيمة x في جدول البرنامج نفسه وتقوم بتشفيرها حتى لايتم معرفة قيمتها وهذه الطريقة سوف تجعل البرنامج يعمل اينما كان وعلى اي جهاز مادامت قيمة x صحيحة أيهما تفضل؟ 1
سلمان الشهراني قام بنشر فبراير 21, 2018 قام بنشر فبراير 21, 2018 هل ممكن التعديل على المثال ليتم الحفظ في الريجيستري
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.