بتاريخ: 13 أبريل 200421 سنة comment_5233 سلامات أيها المبرمجينبدي أكتب trigger في ال database على ال table x بحيث إذا أي مستخدم أضاف أو حذف أو عدل في table x يعطيني هذا الtrigger إسم الشاشة التي تم منها التغيير و إضيفلي إياه في table أخرى .... ...أي أريدsql statment تعطيني إسم الشاشة التي تم منه التغييروشكرا لكم تقديم بلاغ
بتاريخ: 13 أبريل 200421 سنة comment_5241 اذا كنت ترغب في خزن اسم الفورم الذي حصل به الخطاء انصحك باستخدام form triggers وليس الـDatabase triggersحيث تستطيع ان تعمل procedure يخزن اسم الفورم والمستخدم ورسالة الخطى في الجدول المعني تقديم بلاغ
بتاريخ: 13 أبريل 200421 سنة comment_5244 هناك حل لهذه المشكله و هي انشاء باكيدج بها global varible و انشاء بروسيدجر تقوم بتغير هذه القيمة و في تريجر when_new_form_instancنقوم بتغير اقيمة المتغير الي اسم الفورم عن طريق الداله لانه في حالة وجود قواعد البيانات علي جهاز اخر لن تستطيع تغير قيمة المتغير مباشرة و علي قواعد البيانات ننشئ زناد قبل الادخال لكل صف يقوم بادخال قيمة المتغير و قيمة العمود الذي نريد تتبعه هذا الحل معقد طبعا بالنسبه للحل الاسهل الذي كتبه اخي خالد مع تمنياتي بالتوفيق تقديم بلاغ
بتاريخ: 13 أبريل 200421 سنة كاتب الموضوع comment_5251 إخواني الاعزاءأنا أعرف أنه يمكنك أن تخزن إسم الForm عن طريقSystem.current_formولكن هذه الطريقة صعبة بسبب عدد الشاشات الهائل في نظام التسجيل الذي أعمل عليهلذلك أريد أن أريح رأسي و أستخدم ال Database Trigger التي تضيف أو تحذف أو تعدل عليها ولكني لم أجد الطريقة حتى الان و شكرا لكم على نصائحكم تقديم بلاغ
بتاريخ: 14 أبريل 200421 سنة comment_5291 السلام عليكم ،أفضل استخدام DB trigger على الجدول .. اليكم مثال على جدول emp فى scott [align=left]--انشاء جدول جديد لمتابعة اي تعديلات بالزيادة تتم على الراتب بجدول الموظفين-- rewno = primary key from sequence.-- eno = employee number -- osalary = old salary before update-- nsalary = new salary after update-- remark = any comments .. calculate percentage of incresed -- edate = entery date = system date of transaction.-- operator = user number as connect to database .-- تاريخ تسجيل الحركة سيكون مباشرة من الجهاز-- المستخدم الذى اتم التعديل سيتم كتابته بالملف الجديد-- مطلوب مسلسل من الجهاز باستخدام - sequenace-- سيتم الكتابه بالملف فى حالة زيادة الراتب فقط -- لا يمكن زيادة الراتب بنسبة اكبر من 15 فى المائة-- يمكن التطوير للتعامل مع الحالات الاخرى -- event = insert - update - delete -- time = before - after -------------------------------------------------- create table updatesalary ( rowno number(5) primary key, eno number(4), osalary number(7,2), nsalary number(7,2), remark varchar2(100), edate date default sysdate, operator varchar2(40) default user); drop sequence seq_rowed; create sequence seq_rowed increment by 1 start with 100 ; ----------------------------------------------------------- create or replace trigger trg_salary_update before update of sal on emp for each row when (old.sal < new.sal) declare vremark varchar2(100); begin if not (( (( :new.sal - :old.sal ) / :old.sal) * 100 ) < 15 ) then raise_application_error ( -20001 , 'salary increased more than 15%'); end if ; vremark := 'for example = Salary is increased ... N % '; insert into updatesalary (rowno ,eno ,osalary ,nsalary ,remark ) values (seq_rowed.nextval,:old.empno,:old.sal,:new.sal,vremark); end ; ------------------------------------ update emp set sal = sal * 1.1 where empno = 7369[/align ]; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.