بتاريخ: 29 سبتمبر 200619 سنة comment_79748 السلام عليكم اثناء تصفحي فى احد المنتديات الخاصة بالاوراكل وجدت موضوع هام لاى مبتدء ؛ الموضوع يختص بأنواع التريجرات ومعنى اسمائها وكيفية استخدما ليس هذا فحسب بل ومتى استخدم التريجر ؛ ووجدت انه من الضرورى طرح الموضوع عليكم لاهميته للمبتدئين واأوجه النظر ان الموضوع منقول وليس من ذاتى واليكم الموضوع بمشاركته :وظيفة ال Trigger : اظهار الساعة في الفورم مستوى ال Trigger : الفورم نوعه : when _new form_instance DECLARE T TIMER ;BEGIN T:=CREATE _TIMER ('TI',1000,REPEAT);END;ولازم يكون TRIGGER ثاني ينهي الاول وهو :مستوى TRIGGER : الفورم نوعه : WHEN_TIMER_EXPIRED:CLOCK :=TO_CHAR(SYSDATE,'HH:MI:SS');حيث CLOCK : اسم DISPLAY ITEM.......................وظيفة ال TRIGGER : اذا كان الموشر اخر سجل سوف يرجع الى اول سجل مستوى الTRIGGER : على مستوى BLOCK نوعه : KEY-DOWN IF :SYSTEM.LAST-RECORD =’TRUE’ THEN FIRST-RECORD;ELSE NEXT_RECORD;END IF;........................................وظيفة التريغر : تخزين وقت الخروج من الفورم داخل جدول قاعدة بياناتمستوى التريغر : الفورمنوعه أو إسمه : PRE-LOGOUTUpdate follow_up_table SET logout_from_system = SYSDATEWHERE user_name = :GLOBAL.curr_user_name;حيث :Follow_up_table : هو جدول لمتابعة المستخدمينLogout_from_system, user_name : حقلان في الجدول :GLOBAL.curr_user_name اسم المستخدم الحالي هذا التريغر ينطلق قبل تنفيذ البرنامج الفرعي logout . عندما يحتاج المستخدم أن يخرج من البرنامج . سواء كان هناك زر للخروج أو من خلال النقر على X التي على الزاوية اليمنى للشاشة . و هنا فائدته أكثر أعني الخروج عن طريق النقر على Xو الله ولي التوفيق....................................هذا التريجر يقوم بعمل الرقم التلقائي autonumber fore primary keyالكود التالي منقول و يتكون من 4 خطوات:1- انشاء اي جدول جديد وليكن التالي:CODE CREATE TABLE departments ( ID NUMBER(10) NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL);ALTER TABLE departments ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID));ومن ثم ننشئ سيكونس كالتالي:CODE CREATE SEQUENCE dept_seq;ومن ثم نقوم بكتابة التريجر ال1ي سيعمل قبيل ادخال اي قيمة جديدة كالتالي:CODE CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROWBEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual;END;واخيرا ندخل قيمة في العمود الذي لايحوي البرايمري كي:CODE INSERT INTO departments (description)VALUES ('Development');...............................السلام عليكم كل عام وانتم بخير عيد مبارك على مشرفي واعضاء المنتدى وجميع الامة الاسلامية شكرا monadi وORACLE/MASTER،رهفوجميع المشاركين Dynami list وهي تحديث للقائمة وذلك مجرد ما ينضاف اي حاجة في الجدول يتم التحديث في اللقائمة وظيفة التريغر :تحديث القائمة في الفورمنوع التريغر :when_new_form_instance مستوى التريغر :form declare rg recordgroup;n number;begin rg:=create_group_from_query('g1','select dname ,to_char(deptno) from dept');n:=populate_group('g1');populate_lsit('deptno,rg);end ;.....................................السلام عليكم اسم التريغر : تشغيل التقرير من داخل الفورم عن طريق ازرار نوعه : when_button_pressed مستواه : على الزر declarepl_id number;beginrun_product(reports,'emp.rep',synchronous,runtime,filesystem,pl_id,null);end;حيث emp =report name والله الموفق............................وظيفة التريغر : وضع وصف لفورين كي foreign key بعد الاستعلاماسم التريغير : post-queryالمستوى : blockلنفترض عندنا داتا بلوك اسمه customers يحتوي على اسم الزبون و معلومات خاصة عنه ورقم المدينة التي يقطن بها (city_number) foreign keyو يوجد هناك جدول (master table) خاص بأرقام المدن و أسمائها ، cities_table (city_no, city_name) المطلوب : نريد عرض اسم المدينة مع الرقم في بلوك الزبائن عند كل استعلام أولا : ننشئ display item داخل بلوك الزباين و نسميه c_name و ندخل على خصائصه و نعمل database item = Noثم نكتب التريغر post-query DECLARECURSOR c1 IS SELECT city_name FROM cities_table WHERE city_no = :customers.city_numberBEGINOPEN c1;FETCH c1 INTO :customers.c_name;IF c1%NOTFOUND THEN:customers.c_name := 'not available' ;END IF;CLOSE c1;END;ملاحظات1) جدول الزباين يكون به فقط رقم المدينة و لا يكون به اسم المدينة 2) عند اضافة زبون لا يتم عرض اسم المدينة من خلال هذا التريغر ، و لكن يجب استخدام طريقة أخرى مثل list of value أو when-validate-item trigger3) نستطيع استخدام نفس الكود في تريغر when_validate_item على مستوى : :customers.city_number و ذلك لعرض اسم المدينة عند اضافة زبون أو عند تغيير رقم المدينة لزبون موجود أصلا4) نستطيع الاستغناء عن post-query & when-validate-item باستخدام تريغر واحد فقط يقوم بعمل التريغرين السابقين في نفس الوقت و هو :post-change ، و لكن جماعة أوراكل لا ينصحون باستخدامه حيث أنه موجود لغاية الان لغرض التوافق مع برامج أوراكل القديمة، حيث يوجد عليه قيود.و شكرا000000000000يعطيك العافية اخ maen وممكن هناك طريقة مبسطة اخرى SELECT city_name into :c_name from cities_table WHERE city_no = :customers.city_number;والله الموفق..............................................السلام عليكم سوف اكتب تريغر عن شاشة فواتير وبها جزء رئيسي وتفصيلي وهنا عند بيع كمية من صنف معين في الفاتورة سوف يطرح تلقائيا من جدول الاصناف الجدول التفصيلي للفواتير =inv_dالجدول للاصناف =items على سبيل المثال وظيفة التريغر =طرح الكمية المباعة من جدول الاصناف تلقائيا نوعه = pre_insertمستواه= data block declare a number ;begin select items.qty into a from item where items.item_no=:inv_d.item_no;if :inv_d.qty>a then message('الكمية في المخزن لاتكفي ');raise form_trigger_failure;else update items set qty=qty-:inv_d.qty where item_no=:inv_d.item_no ;end if;end;والله الموفق................................بسم الله الرحمن الرحيم أقدم لكم في هذا الرد درس PASING PARAMETER BETWEEN FORMSنريد أن نعمل شاشة للجدول DEPT بحيث أنه أذا عرضنا البيانات اللتي بالدائرة رقم 20 ونقرنا على زر ينتقل بنا إلى شاشةEMPوبها أسماء لموظفين اللذين يعملون في هذه الدائرة ننشئ شاشة للــDEPT ومن ثم نضع بها زر ومن ثم نظغط على F3ونذهب ألى PARAMETERSونعمل له أنشاء ثم نغير أسم الباراميتر ألى NO ثم نغير PARAMETER DATA TYPE ألىNUMBER لأن الباراميتر هنا هو الحقل DEPTNO وكما هو معروف فأن هذا الحقل نوعه رقم .نغلق الشاشة نحفظها بأسم DEPT ثم ننشئ شاشة EMP ونعملها TABULAR بعد أن عملناها نحفظها بأسم EMP .. نعود ألى الشاشة لأولى ثم نذهب ألى الزر ونختار الحدث WHEN_BUTTON_PREESED ونكتب الكود التالي DECLAREA PARAMLIST;BEGINA:=CREATE_PARAMETER_LIST('THA');ADD_PARAMETER(A,'NO',TEXT_ITEM,PARAMETER,:DEPTNO);RUN_PRODUCT(FORMS,'EMP',ASYNCHRONOUS,RUNTIME,FILESYSTEM,A,'');EXIT_FORM;END;طبعا هذا الكود مشروح في المرفقات.. ثم نغلق الشاشة ونعود إلى الشاشة الأخرى ونذهب ألى TRIGEER على مستوى الفورم زنختار الحدث التالي WHEN_NEW_FORM_INSTANCE ونكتب الكود التالي :DECLAREB BLOCK;BEGINB:=FIND_BLOCK('EMP');IF(:PARAMETER.NO IS NOT NULL)THENSET_BLOCK_PROPERTY(B,DEFAULT_WHERE,'DEPTNO='||:PARAMETER.NO);GO_BLOCK('EMP');EXECUTE_QUERY;END IF;END;أيضا هذا الكود مشروح في الكومبايل الخاص بالPL/SQL.......................................لعمل TEXT_ITEM لأربع خاناتبعد عمل التكست كلك بالزر الايمن ثم تختارSMART TRIGGER ثم تختار الحدث POST-TEXT-ITEMبعد ذلك تكتب هذا الكودIF LENGTH(:A)>4 THENMESSAGE('الرسالة التي تريدها أن تظهر');END IF;GO_ITEM('A');بالنسبة للـــ المنيو الموجود بالأعلى تستطيع أن تخفيه بدون حدث وذلك كاتاليتذهب إلى MODULEثم تنقر عليه لتفتح لك الخصائص ثم تذهب إلى خاصية MENU MODELوتزيل الملاحظة التي بجانبها ثم شغل الشاشة ستلاحظ أن المنيو قد أختفت.....................................تلك هى الدروس التى كانت معروضة وهى منقولة كما ذكرت من قبل ولا يسعنى القول سوى جزى الله كل المسلمين كل خيروشكراميجا تقديم بلاغ
بتاريخ: 29 سبتمبر 200619 سنة comment_79758 اظنك يا ميجا تنفرد بهذا الموضوع الجديد من نوعه حيث لم يسبق ان قرأت مثل هذا النوع من الدروس على الرغم من اهميته فياريت اللي يعرف يزود معلومة على الموضوع علشان نستفيد اكتر يبقى كتر خيره وميرسي ليك يا ميجا على مجهودكنورا تقديم بلاغ
بتاريخ: 30 سبتمبر 200619 سنة comment_79761 شكــــــرا لك يااخـــــــــــــي على المعلومات التي تفيد الكثير تقديم بلاغ
بتاريخ: 2 أكتوبر 200619 سنة كاتب الموضوع comment_79994 اخى sky information جعلك الله سماء عليا فى دنيا العلم ونستهل من مطر فكرك كيفما نشاءوشكراميجا تقديم بلاغ
بتاريخ: 3 أكتوبر 200619 سنة comment_80076 السلام عليكم ورحمة الله وبركاته انا شاكرة لك جدا لهده المعلومات القيمة اخي ونحن جميعا ممتنين لك بصراحة انا لاول مرة اشارك في هدا االمنتدى الدي لفت انتباهي وافادني منه الكتير اشكر جميع العاملين عليه وخاصة الدين يبدلون كل جهدهم لمساعدة الاخرين ملاحظة:على العلم من انني مبتدئة في مجال الاوراكل ولكم جزيل الشكر والتقدير اختكم .............طاهرة تقديم بلاغ
بتاريخ: 4 أكتوبر 200619 سنة كاتب الموضوع comment_80089 الاخت الطاهرة قولا وفعلا واسما كل عام وانتى بخير اشكرك كثيرا على رقة كلماتك وصدقها . واضم شكرى الى شكرك الى القائمين على المنتدى راجين من الله المزيد من التقدموالسلام عليكم ميجا تقديم بلاغ
بتاريخ: 13 نوفمبر 200619 سنة comment_82738 انا والله عاجز عن الشكر لهذا الموضوع القيمحقيقه هذه هى المواضيع المفيده المفروض تناقش فى المنتديات لان الدروس موجوده فى الكتب اكرر لك شكرى تقديم بلاغ
بتاريخ: 3 فبراير 200719 سنة كاتب الموضوع comment_90794 السلام عليكمشكرا لتقديرك اخى الكريم hanospace ؛ وجزاك الله خيرا اخى الفاضل gamalوشكرا ميجا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.