اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

فتح نموذج تسجيل النسخه من أي نموذج أخر للتأكد من إدخال بيانات ثم أغلاقه


kaser906

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

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

لنفترض أن لدي نموذج بأسم reg خاص بتسجيل النسخه

ولدي عدة نماذج

form1 form2 form3

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

اذا كانت النسخه مسجله يقوم باغلاق النموذج reg ويكمل فتح النموذج المراد فتحه  وان لم تكن مسجله يظهر نموذج  reg

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

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

في البداية يجب ان نعرف ان نموذج التسجيل وظيفته المحددة هي قراءة رقم التسجيل الذي يدخله المستخدم في مربع النص ويقارنها مع رقم الهارد مثلاً ومن ثم تخزين رقم التسجيل في الجدول ... هنا نلاحظ ان نموذج التسجيل لايقرأ القيمة التي يخزنها في الجدول لان وظيفته هي قراءة مايدخله المستخدم فقط ويقارنها بقيمة الهارد 

لكي يتم قراءة رقم التسجيل المخزن في الجدول في كل مرة يقوم المستخدم بفتح البرنامج فهنا نضع في حدث عند الفتح للنموذج الرئيسي كود فحص فإذا وجد ان القيمة المخزنة في الجدول صحيحة يقوم بفتح النموذج والا فسوف يظهر رسالة للمستخدم بعدم صحة البيانات ومن ثم يفتح له نموذج التسجيل

طبعاً برمجياً نحن لاتحتاج الى التأكد من رقم التسجيل في كل مرة يتم فتح احدى تلك النماذج بل كل ماعليك فعله هو وضع متغير عام من نوع 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 

هذا كل مافي الامر .. اتمنى ان يكون شرحي واضح

تحياتي

تم تعديل بواسطه sandanet
  • Like 2
رابط هذا التعليق
شارك

الله يعطيك العافية اخي @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

 

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

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

قلت لي انك واجهت خطأ في عدم تعرف البرنامج على قيمة x

الخطا هو انك لم تقم بتعريف المتغير x كمتغير عام في البرنامج

الحل هو انشاء وحدة نمطية وسمها variables

وقم باضافة التالي

Public x as Boolean 

وان شاء الله يعمل معك بصورة سليمة

هنا قمنا بتعريف المتغير x كمتغير عام من نوع Boolean ليكون اما true او false .. هذا معناه انك لو وضعت x = true في النموذج رقم 1 ففي النموذج رقم 10 ستكون قيمة x = true ايضاً .. هذا مايسمى بالمتغير العام .. كما يمكنك اضافة اي متغيرات عامة اخرى في نفس الوحدة النمطية السابقة يعني مثلاً اريد اضافة متغير y قيمته 1 

نأتي الى الوحدة النمطية السابقة ونضع 

Const y = 1

وهكذا

تحياتي

 

تم تعديل بواسطه sandanet
  • Like 2
رابط هذا التعليق
شارك

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

وهكذا

تحياتي

 

الف تحية والف شكر لك اخي الكريم :fff:

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

  • 2 weeks later...

الله يعطيكم العافيه
طيب هل من الممكن حفظ المتغيير x لمره واحده في ذاكره الاكسس
اقصد يعني فتحت الان والمتغير false
هل عند تغيير المتغير الى true  يكون ثابت على طول حتى وان اغلقت قاعده البيانات وفتحتها مره اخرى

مرفق مثال

sa.rar

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

أخي سلمان ما فائدة جعل المتغير x ثابت على طول حتى وان اغلقنا قاعدة البيانات؟ 

في الواقع هذا لايخدم البرنامج وذلك لانه لو تم حفظ قيمة x = true بشكل دائم حتى بعد إغلاق البرنامج فهذا يعني ان البرنامج مفعل وسيتم فتحه بشكل دائم حتى لو كان كود التفعيل غير صحيح وهذا لانرغب به

نحن هدفنا هو جعل البرنامج يتحقق من كود التفعيل اولاً في كل مرة يتم فتح البرنامج فإن كان صحيحاً يضع x = true والا فإن x = false وان تخزن قيمة x في الذاكرة طالما برنامجنا مفتوح لذلك قمنا بتعرف x كمتغير عام (اي طالما البرنامج شغال)

كذلك اراد الاخ كاسر ان لايتم فتح اي نموذج من نماذج البرنامج الا بعد التحقق من صحة تسجيل البرنامج وهذا يتم عن طريق x = true ايضاً فيكفي ان نضع if في حدث عند الفتح لأي نموذج لنتحقق من قيمة x التي في الذاكرة فإذا كانت true افتح النموذج بشكل طبيعي والا قم بإظهار رسالة ان البرنامج غير مسجل ومن ثم افتح نموذج التسجيل

 

تحياتي

تم تعديل بواسطه sandanet
  • Like 1
رابط هذا التعليق
شارك

يمكنك عمل ذلك لكن عن طريق تخزين قيمة x في الريجستري في الويندوز وفي كل مرة يتم فتح البرنامج على نفس الجهاز يتم قراءة الرجيستري اولاً فإن كانت القيمة صحيحة يكمل فتح البرنامج وهكذا

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

أيهما تفضل؟

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

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

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



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

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

Important Information