بتاريخ: 26 أبريل 200916 سنة comment_154828 ارجو المساعدة عندى جدول الكميات [/b] create table quantities ( item_id number(4,0) not NULL, quantity number(5) not null, constraint quant_pk primary key(item_id), constraint quant_items_fk foreign key(item_id) references items(item_id) ); [b] وجدول دخول المخزن [/b] create table st_in_orders_details ( st_in_dt_id number(6,0), store_in_order_id number(6,0) NOT NULL, item_id number(4,0) not NULL, quantity number(4,0), constraint st_in_ord_det_pk primary key(st_in_dt_id), constraint st_det_stin_ord_fk foreign key(store_in_order_id) references store_in_orders(store_in_order_id), constraint st_det_in_itemsps_fk foreign key(item_id) references items(item_id) ); [b] المهم انا عاوز اعمل DATABASE TRIGGERاول ماادخل بيان الكمية تزيدولما اعدل الكمية لو زايدة تزيد زالعكسولما امسح بيان العدد بتاع الكمية اللى فيه ينقصوفى حاجة تانيةلما اليوزر يدخل منتج جديد فى جدول المنتجات يدخل عندى الكميات =0ولكم جزيل الشكر تقديم بلاغ
بتاريخ: 26 أبريل 200916 سنة comment_154891 الاخ الكريم السلام عليكم ورحمة الله وبركاتهبالنسبة للسؤال ده لما اليوزر يدخل منتج جديد فى جدول المنتجات يدخل عندى الكميات =0 طبعا من المفروض يكون عندك جدول في البداية الاي انت بتدخل فيه أرقام الاصناف وأسمائها على افتراض الاتيcreate table items (id number, name varchar2(50)); وتريد عند ادخال المنتج الجديد مباشرة يضع رقم المنتج وكميته بصفر في جدول ال quantitiesإذن سيكون في تريجر بسيط هو الاي هيعمل ده create or replace trigger intem_isert after insert on items for each row begin insert into quantities values (:new.id,0); end; وبالنسبة للسؤال الاخر أولا القيود مرتبطة بجداول أخرى لم تذكرها ولذا لايتم إنشاؤها إلا إذا شيلت القيودحسب مافهمت أنت تريد إدخال البيانات في جدول st_in_orders_details وتريد أن ترى التغيرات في جدول quantities سواء كانت إضافات أو حذف بالنسبة للاضافة أو التعديل ستقوم بإنشاء هذا التريجر على جدول st_in_orders_details وإذا أضفت فيه بيانات ستجد عمل تعديل على قيمتها في جدول ال quantities create or replace trigger quantity_update after insert or update on st_in_orders_details for each row begin update quantities set quantity=quantity+:new.quantity where item_id=:new.item_id ; end; على أنه عندك relation وترتيب في إدخال البيانات يعني تقوم بإدخال البيانات أولا في جدول ال items تقديم بلاغ
بتاريخ: 26 أبريل 200916 سنة كاتب الموضوع comment_154906 اخى mustafagamielالف شكر على اهتمامك وردكانا فعلا عندى جدول ايتمز وكل ده ورفق الفورم والتابلز المهم انا كن عاوز اللى فى اول الموضوع عملت كدة بس الكود مش بيتنفز وغلبنىانا عاوز اول لمااليوزر يدخل طلب دخول الكمية تزيدولما يعدل لو الكمية اتعدلت بزيادة عن الامر القديم تزيد فى المخزن ولو اقل الكمية تنقصوكمان لو اليوزر مسح طلب كميته تقل من المخزنوطبعا عكس الكود هايتعمل مع خروج من المخزنده الكود اللى عملته بي بيخرف [/b]CREATE OR REPLACE TRIGGER Q_IN AFTER INSERT OR UPDATE OR DELETE ON ST_IN_ORDERS_DETAILS FOR EACH ROW BEGIN IF INSERTING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY + :NEW.QUANTITY WHERE ITEM_ID=:OLD.ITEM_ID; ------------------------- ELSIF UPDATING THEN IF :NEW.QUANTITY > :OLD.QUANTITY THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY + :OLD.QUANTITY WHERE ITEM_ID=:OLD.ITEM_ID; ------------------ ELSIF :NEW.QUANTITY < :OLD.QUANTITY THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY - :OLD.QUANTITY WHERE ITEM_ID=:OLD.ITEM_ID; END IF; ------------------------- ELSIF DELETING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY - :NEW.QUANTITY WHERE ITEM_ID=:OLD.ITEM_ID; END IF; END; [b] ارجو الافادة انا مبتدا fox_form.rar تقديم بلاغ
بتاريخ: 27 أبريل 200916 سنة comment_154913 أخي الكريم حاول تجربة هذا بعد التعديل CREATE OR REPLACE TRIGGER Q_IN AFTER INSERT OR UPDATE OR DELETE ON ST_IN_ORDERS_DETAILS FOR EACH ROW BEGIN IF INSERTING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY + :NEW.QUANTITY WHERE ITEM_ID=:NEW.ITEM_ID; ------------------------- ELSIF UPDATING THEN IF :NEW.QUANTITY > :OLD.QUANTITY THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY + (:NEW.QUANTITY-:OLD.QUANTITY) WHERE ITEM_ID=:OLD.ITEM_ID; ------------------ ELSIF :NEW.QUANTITY < :OLD.QUANTITY THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY +(:NEW.QUANTITY-:OLD.QUANTITY) WHERE ITEM_ID=:OLD.ITEM_ID; END IF; ------------------------- ELSIF DELETING THEN UPDATE QUANTITIES SET QUANTITY = nvl(QUANTITY,0) + (nvl(:NEW.QUANTITY,0)-nvl(:OLD.QUANTITY,0)) WHERE ITEM_ID=:OLD.ITEM_ID; END IF; END; تقديم بلاغ
بتاريخ: 6 مايو 200916 سنة كاتب الموضوع comment_155892 اخى الكريم مصطفىدى الاكواد مظبوطة تمام جربتها بس الكود بتاعك احسن اكيد ولنا استفدت منه CREATE OR REPLACE TRIGGER Q_IN AFTER INSERT OR UPDATE OR DELETE ON ST_IN_ORDERS_DETAILS FOR EACH ROW DECLARE QQ NUMBER; BEGIN IF INSERTING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY + :NEW.QUANTITY WHERE ITEM_ID=:NEW.ITEM_ID; ------------------------- ELSIF UPDATING THEN IF :NEW.QUANTITY > :OLD.QUANTITY THEN QQ := :NEW.QUANTITY-:OLD.QUANTITY; UPDATE QUANTITIES SET QUANTITY =:OLD.QUANTITY + QQ WHERE ITEM_ID=:NEW.ITEM_ID; ------------------ ELSIF :NEW.QUANTITY < :OLD.QUANTITY THEN QQ := :OLD.QUANTITY-:NEW.QUANTITY; UPDATE QUANTITIES SET QUANTITY =:OLD.QUANTITY - QQ WHERE ITEM_ID=:NEW.ITEM_ID; END IF; ------------------------- ELSIF DELETING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY - :OLD.QUANTITY WHERE ITEM_ID=:OLD.ITEM_ID; END IF; END; ========================================================================= CREATE OR REPLACE TRIGGER Q_OUT AFTER INSERT OR UPDATE OR DELETE ON ST_OUT_ORDERS_DETAILS FOR EACH ROW DECLARE QQ NUMBER; BEGIN IF INSERTING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY - :NEW.QUANTITY WHERE ITEM_ID=:NEW.ITEM_ID; ------------------------- ELSIF UPDATING THEN IF :NEW.QUANTITY > :OLD.QUANTITY THEN QQ := :NEW.QUANTITY - :OLD.QUANTITY; UPDATE QUANTITIES SET QUANTITY = QUANTITY - QQ WHERE ITEM_ID=:NEW.ITEM_ID; ------------------ ELSIF :NEW.QUANTITY < :OLD.QUANTITY THEN QQ := :OLD.QUANTITY - :NEW.QUANTITY; UPDATE QUANTITIES SET QUANTITY = QUANTITY + QQ WHERE ITEM_ID=:NEW.ITEM_ID; END IF; ------------------------- ELSIF DELETING THEN UPDATE QUANTITIES SET QUANTITY = QUANTITY + :OLD.QUANTITY WHERE ITEM_ID=:OLD.ITEM_ID; END IF; END; والف شكر على تجاوبك معى تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.