بتاريخ: 30 مايو 200916 سنة comment_158605 السلام عليكم ورحمة الله وبركاتهعندي برنامج فيه مجموع من الشاشة في القائمة الرئيسية , المستخدم لما يعمل إضافة سجل في الشاشة لايعمل حفظ ممكن ينسى ولما ينتقل إلى الشاشة ينتقل بس المشكلة لما يغلق البرنامج لايقفل إلا بعد يحفظ أو يحذف السجل المضافة أنا أريد أن أضيف تريقر الخروج يعطيه رسالة هل تريد حفظ السجل نعم أو لا مثل الورد لما أضيف المعلومات و لا أحفظها ولما أخرج من برنامج الورد يعطيني الرسالة هل تريد حفظ البيانات .... وشكرا لأتاحة فرصة من وقتكم[size="5"]لان المستخدم كل يوم مطفشني يقول في مشكلة في البرنامج ( ونفس المشكلة ) وأريد أن أسكته ......وأرجو المساعدة ...[/size] ملاحظة:هذا إذا قام بإضافة سجل ولم يقم بالحفظ أو الحذف عند الخروج بعطيني رسالة أم غير ذلك لا يعطيني رسالة- استخدم Form 6i تم تعديل 1 يونيو 200916 سنة بواسطة mustafagamiel تم تعديل العنوان للدلالة على المضمون تقديم بلاغ
بتاريخ: 30 مايو 200916 سنة comment_158610 اخي العزيز اضف alert وسميها save_alter وضع بها رسالة "هل تريد الحفظ ؟" ثم ابني روتين بعنوان save_work وضع به الكود التالي : PROCEDURE save_work IS return_alter number;beginreturn_alter := show_alert('save_alter');if return_alter = alert_button1 thencommit;elserollback;end if; END;ثم في زر الخروج اكتب :save_work;حاسب نفسك قبل ان تحاسب تقديم بلاغ
بتاريخ: 30 مايو 200916 سنة كاتب الموضوع comment_158611 شكرا لأهتمامكملاحظة :هذا إذا عمل إضافة أو حذف ولم يحفظ وخرج من البرنامج يعطيني رسالة , أم إذا لم يعمل أي إضافة سجل وخرج من البرنامج لا يعطيني الرسالة ويخرج من البرنامج تم تعديل 31 مايو 200916 سنة بواسطة mustafagamiel حذف التعقيب كي يكون الرد واضح تقديم بلاغ
بتاريخ: 30 مايو 200916 سنة comment_158616 اخي الكريم :الروتين التالي عندقيامك بالضغط علي زر خروجتظهر لك رسالة "هل تريد الحفظ" اذا كنت تريد حفظ ما قمت به اضغط"ok" واذا لم تريد اضغط "no" الامر بسيطPROCEDURE save_work ISreturn_alter number;beginreturn_alter := show_alert('save_alter');if return_alter = alert_button1 thencommit;exit_form; elseexit_form(no_commit,no_validate);end if;end; تقديم بلاغ
بتاريخ: 31 مايو 200916 سنة كاتب الموضوع comment_158702 [ولكن إذا ضغظ على الخروج و لم يقم بإي اجراء إضافة ولا حذف لا يعطيني رسالة بل يخرج مباشرة مثل برنامج الورد لما تضيف بيانات ولم تقم بحفظها وخرجت من البرنامج الورد يعطيك رسالة يسألك هل تريد حفظ البيانات أما اذا لم تقم بإي تغيرات يجرج دايركت بدون إظهار الرسالة ..أرجو أنك فهمت قصدي وشكرا على الأهتمام تقديم بلاغ
بتاريخ: 31 مايو 200916 سنة comment_158704 الاخ الكريم ده الوضع الطبيعي للفورم لو إنت غيرت أي شيء وحاولت الخروج يستشعر التغيرات ويسألك هل تريد الحفظ أم لااحتمال انت كاتب في زر الخروج exit_form(no_commit); ممكن تشيل الباراميتير بتاع no_commitوتتركها فارغة أو تكتب كده exit_form(ask_commit); هل هذا ماتقصد تقديم بلاغ
بتاريخ: 31 مايو 200916 سنة comment_158732 السلام عليكم.إضافه بسيطه على الكود السابق.أولاً: قم بعمل Alert وسميه SAVE_VALIDATION و إجعل نوعه STOP . ثم إجعل ال LABEL للثلاث أزرار Yes و NO و Cancel على التوالي.ثانياً: قم بإضافة Program unit وسميه SAVE_ALERT . وإجعل نوعه Procedure وداخله أكتب الكود التالي: PROCEDURE SAVE_ALERT IS AL_ID ALERT; AL_SHOW NUMBER; BEGIN IF :SYSTEM.FORM_STATUS = 'CHANGED' THEN AL_ID := FIND_ALERT('SAVE_VALIDATION'); IF ID_NULL (AL_ID) THEN MESSAGE('SAVE_VALIDATION alert doesn''t exist! Create it first. '); RAISE Form_Trigger_Failure; ELSE AL_SHOW := SHOW_ALERT('SAVE_VALIDATION'); IF AL_SHOW = ALERT_BUTTON1 THEN COMMIT; EXIT_FORM; ELSIF AL_SHOW = ALERT_BUTTON2 THEN EXIT_FORM(NO_VALIDATE); ELSIF AL_SHOW = ALERT_BUTTON3 THEN NULL; END IF; END IF; ELSE NULL; END IF; END; ثالثاً: على مستوى الفورم هناك Trigger إسمه KEY-EXIT أضف بداخله الكود التالي: SAVE_ALERT; تقديم بلاغ
بتاريخ: 31 مايو 200916 سنة كاتب الموضوع comment_158734 أنا عملت حسب المطلوب ولكن البرنامج لا يخرج اذا ضغط على زر خروج , ويوجد ملف مرفق وعملته كما طلبت وشكرا save.zip تم تعديل 31 مايو 200916 سنة بواسطة mustafagamiel حذف التعقيب كي تكون المشكلة واضحة تقديم بلاغ
بتاريخ: 1 يونيو 200916 سنة comment_158857 عدل الكود ليصبح هكذا. PROCEDURE SAVE_ALERT IS AL_ID ALERT; AL_SHOW NUMBER; BEGIN IF :SYSTEM.FORM_STATUS = 'CHANGED' THEN AL_ID := FIND_ALERT('SAVE_VALIDATION'); IF ID_NULL (AL_ID) THEN MESSAGE('SAVE_VALIDATION alert doesn''t exist! Create it first. '); RAISE Form_Trigger_Failure; ELSE AL_SHOW := SHOW_ALERT('SAVE_VALIDATION'); IF AL_SHOW = ALERT_BUTTON1 THEN COMMIT; EXIT_FORM; ELSIF AL_SHOW = ALERT_BUTTON2 THEN EXIT_FORM(NO_VALIDATE); ELSIF AL_SHOW = ALERT_BUTTON3 THEN NULL; END IF; END IF; ELSE EXIT_FORM; END IF; END; تقديم بلاغ
بتاريخ: 1 يونيو 200916 سنة كاتب الموضوع comment_158866 شكرا جزيلاً للمساعدة , وشكرا خاص للمهندس weloooo فقد تم حلها بطرقتك ولكن بعض الإضافات البسيطة : PROCEDURE SAVE_ALERT IS AL_ID ALERT; AL_SHOW NUMBER; BEGIN IF :SYSTEM.FORM_STATUS = 'CHANGED' then AL_ID := FIND_ALERT('SAVE_VALIDATION'); IF ID_NULL (AL_ID) THEN MESSAGE('SAVE_VALIDATION alert doesn''t exist! Create it first. '); RAISE Form_Trigger_Failure; ELSE AL_SHOW := SHOW_ALERT('SAVE_VALIDATION'); IF AL_SHOW = ALERT_BUTTON1 THEN :SYSTEM.MESSAGE_LEVEL:=5; COMMIT; :SYSTEM.MESSAGE_LEVEL:=0; EXIT_FORM; ELSIF AL_SHOW = ALERT_BUTTON2 THEN EXIT_FORM(NO_VALIDATE); ELSIF AL_SHOW = ALERT_BUTTON3 THEN NULL; END IF; END IF; ELSE EXIT_FORM; END IF; if ERROR_CODE ='40102' THEN EXIT_FORM(NO_VALIDATE); end if; END; تم ضبط المشاركة ليسهل قراتها تم تعديل 1 يونيو 200916 سنة بواسطة mustafagamiel تقديم بلاغ
بتاريخ: 1 يونيو 200916 سنة comment_158887 الأخ مهاب الريح.بالنسبه للكود من المستحسن إنك تشيل سطر الكود SYSTEM.MESSAGE_LEVEL أظن إنه ليس له داعي هنا والكود هايشتغل من غيره.إضافه: طريقة كتابة الكود مباشرة داخل أي تريجر طريقه تؤثر سلبيا على الآداء والسرعه في الفورم، عشان كده أحسن طريقه هي كتابة الأكواد داخل PROGRAM UNITS ثم إستدعاء إسم ال PROGRAM UNIT داخل ال TRIGGER مثلما فعلنا في هذا المثال. وياريت يتم ال PROGRAM UNITS داخل PACKAGE ثم إستدعاء هذه ال PACKAGE أثناء عمل الفورم وده له تأثير إيجابي على الآداء لإن كما تعرفون كل ال PROGRAM UNITS داخل الPACKAGE يتم عمل COMPILE لها مره واحده فقط وذلك عند إستدعاءها أول مره، وبذلك نتجنب أن الفورمه تعمل COMPILE لكل الأكواد بداخلها عند إستدعائها كل مره مما يؤثر سلبا علي الPERFORMANCE وده بيعالج عيب إعتدنا عليه ( الأوراكل فورمز ثقيله) . فياريت العمل بهذه الطريقه على طول تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.