ammarcontrol بتاريخ: 14 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 (معدل) تفظلوا شرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديلالسلام عليكم تحيه طيبه لجميع اعضاء المنتدىاليوم اشرح لكم كيفيه تتبع المستخدمين و تسجيل العمليات التي يجرونها على جداول قواعد البيانات من اضافه و حذف و تعديل حيث سوف نقوم بعمل برنامج يقوم بتسجيل القيم التي يعدلها المستخدمين القيم القديمه و القيم بعد التعديل و اسم المستخدم الذي قام التعديل و التاريخ.من اجل تتبع المستخدمين هناك طريقتين :الطريقه الاولى:من خلال عمل trigger في داخل قاعده البيانات يقوم بتتبع عمليات update و insert و delete و يكون العمل كما يلي:لناخذ الجدول WEATHER يحتوي اسم المدينه و درجه الحراره بها و درجه الرطوبه و طبيعه الطقس , كود انشاء الجدول و البيانات كما يلي افتح شاشه SQL*PLUS: create user weather_software identified by aaa; grant dba to weather_software; connect weather_software/aaa@db1; create table WEATHER ( City VARCHAR2(11), Temperature NUMBER, Humidity NUMBER, Condition VARCHAR2(9) ); insert into WEATHER values ('LIMA',45,79,'RAIN'); insert into WEATHER values ('PARIS',81,62,'CLOUDY'); insert into WEATHER values ('MANCHESTER',66,98,'FOG'); insert into WEATHER values ('ATHENS',97,89,'SUNNY'); insert into WEATHER values ('CHICAGO',66,88,'RAIN'); insert into WEATHER values ('SYDNEY',69,99,'SUNNY'); insert into WEATHER values ('SPARTA',74,63,'CLOUDY'); commit; الان نقوم بانشاء جدول يقوم بتتبع التغيرات التي يجريها المستخدم يحتوي الجدول : اسم المستخدم و تاريخ العمليه و نوع العمليه و البيانات القديمه و البيانات الجديده ,كود انشاء هذا الجدول كما يلي: create table WEATHER_TRACK ( User_name VARCHAR2(20), Op_time timestamp, Operation VARCHAR2(20), City_old VARCHAR2(11), Temperature_old NUMBER, Humidity_old NUMBER, Condition_old VARCHAR2(9), City_new VARCHAR2(11), Temperature_new NUMBER, Humidity_new NUMBER, Condition_new VARCHAR2(9) ); الان نكتب كود انشاء الـ trigger المسؤول عن تتبع جدول weather وتسجيل التغييرات في جدول WEATHER_TRACK كما يلي : CREATE OR REPLACE TRIGGER "WEATHER_SOFTWARE"."TRIGGER_WEATHER_TRACK" BEFORE UPDATE OR DELETE OR INSERT OF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON "WEATHER_SOFTWARE"."WEATHER" REFERENCING OLD AS old NEW AS new FOR EACH ROW begin if inserting then insert into WEATHER_TRACK values (user,sysdate,'Insert',:old.City,:old.Temperature,:old.Humidity, :old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition); elsif deleting then insert into WEATHER_TRACK values (user,sysdate,'Delete',:old.City,:old.Temperature,:old.Humidity, :old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition); elsif updating then insert into WEATHER_TRACK values (user,sysdate,'Update',:old.City,:old.Temperature,:old.Humidity,:old.Condition, :new.City,:new.Temperature,:new.Humidity,:new.Condition); end if; end; / الان مع شرح الكود بالتفصيل:CREATE OR REPLACE TRIGGER انشء trigger جديد او قم باستبداله اذا كان موجودا."WEATHER_SOFTWARE"."TRIGGER_WEATHER_TRACK"اسمه TRIGGER_WEATHER_TRACKBEFORE UPDATE OR DELETE OR INSERTيعمل قبل ان يتم تنفيذ جمل UPDATE و DELETE و INSERTOF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON "WEATHER_SOFTWARE"."WEATHER"يعمل على حقول الجدول WEATHERREFERENCING OLD AS old NEW AS new FOR EACH ROWتمثل القيم القديمه بكلمه old و القيم الجديده newbeginبدايه ال triggerif inserting thenاذا كانت العمليه ادخالinsert into WEATHER_TRACK values(user,sysdate,'Insert',:old.City,:old.Temperature,:old.Humidity,:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACKelsif deleting thenاذا كانت العمليه مسحinsert into WEATHER_TRACK values(user,sysdate,'Delete',:old.City,:old.Temperature,:old.Humidity,:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACKelsif updating thenاذا كانت العمليه تعديلinsert into WEATHER_TRACK values(user,sysdate,'Update',:old.City,:old.Temperature,:old.Humidity,:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACKend if;نهايه الجمله الشرطيهend;/نهايه كود الtriggerاذا اردنا عمل الtrigger من خلال الEnterprise Manager 10gيكون العمل كما يلي:صورة 1صورة 2صورة 3صورة 4صورة 5صورة 6صورة 7صورة 8 والان من اجل فحص البرنامج نقوم بادخال و حذف و تعديل قيم في جدول Weather و من ثم نلاحظ كيف ان العمليات تم تسجيلاها في جدول WEATHER_TRACK اكتب التالي: insert into WEATHER values ('LIMA',45,79,'RAIN'); update WEATHER set city='aa',Temperature=11,Humidity=5,Condition='FOG' where city='SPARTA'; delete from weather where city='PARIS'; commit; select * from WEATHER_TRACK; سوف يكون الناتج كما يلي:الطريقه الثانيه من خلال التطبيق سوف اتطرق لها في الدرس القادم ان شاء الله . تم تعديل 14 يوليو 2010 بواسطة ammarcontrol 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
فــادي بتاريخ: 14 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 يعطيك ربي الف الف الف عافيهعلى الشرح الرائع لعمل triggerوجزاك الله الف خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 14 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 اشكرك اخي الغالي بالتوفيق ان شاء الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ENG_HOSSAM_WALLY بتاريخ: 14 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 بارك الله فيك مجهود رائع وشرح متميزأكمل موضوعك وانا متابع معكبالتوفيق ان شاء الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 14 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 السلام عليكمشرح جميل جزاك الله كل خير..ولكن ماذا لو كان لدينا 200 جدول ؟؟هل سيتم عمل Trigger لــ 200 جدول ؟؟لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...تقبلوا مروري.تحياتي. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 14 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 السلام عليكمشرح جميل جزاك الله كل خير..ولكن ماذا لو كان لدينا 200 جدول ؟؟هل سيتم عمل Trigger لــ 200 جدول ؟؟لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...تقبلوا مروري.تحياتي. وعليكم السلام اخي الغالي في هذه الطريقه اي الطريقه الاولى سوف يتوجب عمل 200 trigger و 200 جدول لتسجيل الاحداث حيث انه لا يمكن عمل trigger عام حيث انه يجب ان يكون ال trigger مرتبط بجدول معين.عموما اخي الغالي هناك طريقه اخرى للتتبع وهي من خلال التطبيق و هناك بامكانك ان تبرمج الطريقه كما يحلو لك حيث يمكن جعل جدول واحد يحتوي التغييرات على جميع الجداول و سوف اتطرق لها في الدرس القادم ان شاء الله. 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 14 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 (معدل) يمكن ايظا ان نقوم بتتبع التغييرات على الجداول من خلال قاعده البيانات و ذلك من خلال Materialized View Logs تعالوا معي نتعرف على هذه الطريقه:عندما ننشئ Materialized View Logs سوف يقوم بانشاء جدول يحتوي السجلات قبل عمليه التغيير وبعدها وكذلك يحتوي السجلات المحذوفه لكن مشكله هذه الطريقه انها لاتخبرك من قام بهذه التعديلات وكذلك لاتخبرك بنوع التعديل هل هو delete ام insert ام update لانشاء Materialized View Logs قم بالخطوات التاليه:صورة 1صورة 2صورة 3صورة 4صورة 5صورة 6الان من اجل فحص البرنامج قم بادخال التالي: insert into WEATHER values ('LIMA',45,79,'RAIN'); update WEATHER set city='aa',Temperature=11,Humidity=5,Condition='FOG' where city='SPARTA'; delete from weather where city='PARIS'; commit; ثم قم باستعراض جدول التتبع كما يلي: select * from MLOG$_WEATHER; لاحظ ما يلي:صورة 7يمكن بواسطه جمل SQL ان تستخرج السجلات المضافه و المعدله كما يلي: select MLOG$_WEATHER.city as city_old , MLOG$_WEATHER.Temperature as Temperature_old, MLOG$_WEATHER.Humidity as Humidity_old, MLOG$_WEATHER.Condition as Condition_old, weather.city as city_new, weather.Temperature as Temperature_new , weather.Humidity as Humidity_new, weather.Condition as Condition_new from weather inner join MLOG$_WEATHER on weather.rowid=MLOG$_WEATHER.M_ROW$$; اما بالنسبه للسجلات المحذوفه فيكون الكود كما يلي: select MLOG$_WEATHER.city, MLOG$_WEATHER.Temperature, MLOG$_WEATHER.Humidity, MLOG$_WEATHER.Condition from MLOG$_WEATHER where MLOG$_WEATHER.M_ROW$$ not in (select rowid from weather); الدرس القادم سوف يكون كيفيه تتبع عمليات insert و update و delete من خلال التطبيق باستخدام oracle forms developer 10g فانتظرونا.دمتم في امان الله تم تعديل 14 يوليو 2010 بواسطة ammarcontrol اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 14 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 (معدل) رد تكرر اسف تم تعديل 14 يوليو 2010 بواسطة ammarcontrol اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Bent al-Yemen بتاريخ: 14 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 دخلت للنت بحثا عن هذا الموضوع فوفقني الله الى هذا الموضوع .......موضوع رائع جدا جزيت به خيرا ،، السلام عليكمشرح جميل جزاك الله كل خير..ولكن ماذا لو كان لدينا 200 جدول ؟؟هل سيتم عمل Trigger لــ 200 جدول ؟؟لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...تقبلوا مروري.تحياتي. في الحقيقة لم اعرف الفكرة بالضبط ،،،أتمنى ان يتكرم على احد الاخوان بعمل هذا الترايجر ...احتاجه في مشروعي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 14 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 دخلت للنت بحثا عن هذا الموضوع فوفقني الله الى هذا الموضوع .......موضوع رائع جدا جزيت به خيرا ،، السلام عليكمشرح جميل جزاك الله كل خير..ولكن ماذا لو كان لدينا 200 جدول ؟؟هل سيتم عمل Trigger لــ 200 جدول ؟؟لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...تقبلوا مروري.تحياتي. في الحقيقة لم اعرف الفكرة بالضبط ،،،أتمنى ان يتكرم على احد الاخوان بعمل هذا الترايجر ...احتاجه في مشروعي اخي الغالي سوف اتطرق لهذا الموضوع في الدروس القادمه ان شاء الله فتابع معي هذا الموضوع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 14 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 14 يوليو 2010 السلام عليكم ورحمة الله الأخ / ammar شكرا لك على جهدك المتميز ... جزاك الله خيرا لقد اضاف عرضك للشرح باستخدام الصور ... الى تميز موضوعك اتمنى من الأخوة الأعضاء ... عرض مشاركاتهم باستخدام الصور وايضا البرامج المستخدمه فى الشرح والله الموفق وننتظر اكمال الدروس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Bent al-Yemen بتاريخ: 15 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 15 يوليو 2010 اخي الغالي سوف اتطرق لهذا الموضوع في الدروس القادمه ان شاء الله فتابع معي هذا الموضوع شكرا لك وان شاء الله متابعين معاك ...(سوف نسلم المشروع يوم السبت ان شاء الله تعالى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 15 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 15 يوليو 2010 السلام عليكم اخوتي الاعزاء اليوم موعدنا مع الطريقه الثانيه لتتبع التغييرات التي يجريها المستخدمين على الجداول هذه الطريقه تتم من خلال التطبيق الـApplication وسوف نستخدم الـOracle Forms Builder 10g حيث سوف نقوم بتتبع التغييرات التي تجري بواسطه المستخدمين على جدول تتبع فتابعوا معي الدرس:اولا نقوم بانشاء جدول للتبع كما يلي: create table WEATHER_TRACK2 ( User_name VARCHAR2(20), Op_time timestamp, Operation VARCHAR2(20), City_old VARCHAR2(11), Temperature_old NUMBER, Humidity_old NUMBER, Condition_old VARCHAR2(9), City_new VARCHAR2(11), Temperature_new NUMBER, Humidity_new NUMBER, Condition_new VARCHAR2(9) ); والان نقوم بفتح نافذه Oracle Forms Builder 10g كما يلي:صورة 1صورة 2صورة 3صورة 4صورة 5صورة 6صورة 7 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 15 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 15 يوليو 2010 صورة 8صورة 9صورة 10صورة 11صورة 12صورة 13صورة 14ثم نقوم بكتابه الاكواد التاليه:في الــ(post-insert) insert into WEATHER_TRACK2 values (user,sysdate,'Insert',null,null,null,null,:City,:Temperature,:Humidity,:Condition); في الــ(pre-update) declare v_City VARCHAR2(11); v_Temperature NUMBER; v_Humidity NUMBER; v_Condition VARCHAR2(9); begin select city,Temperature, Humidity,Condition into v_City,v_Temperature,v_Humidity,v_Condition from weather where rowid=:weather.rowid; insert into WEATHER_TRACK2 values (user,sysdate,'Update',v_City,v_Temperature,v_Humidity,v_Condition,:City,:Temperature,:Humidity,:Condition); end; في الــ(post-delete) insert into WEATHER_TRACK2 values (user,sysdate,'Delete',:City,:Temperature,:Humidity,:Condition,null,null,null,null); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 15 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 15 يوليو 2010 (معدل) في المرفقات ملف النموذج الذي شرحته.الدرس القادم سوف يكون عن كيفيه تتبع اكثر من جدول و تخزين قيم التتبع في جدول واحد رئيسي فانتضرونا ان شاء الله. MODULE2.rar تم تعديل 15 يوليو 2010 بواسطة ammarcontrol اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mada1212 بتاريخ: 15 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 15 يوليو 2010 السلام عليكم مجهود رائع و شرح ممتاز يا صديقى بالتوفيق دائما........ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 17 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2010 (معدل) السلام عليكم الدرس الرابع و الاخير ((تتبع اكثر من جدول و تخزين القيم في جدول واحد))اخوتي الاعزاء لنراجع ما قمنا بدراسته لحد الان:الدرس الاول : تتبع التغييرات على الجداول من خلال trigger داخل قاعده البياناتالدرس الثاني : تتبع التغييرات على الجداول من خلال Materialized View Logs الدرس الثالث : تتبع التغييرات على الجداول من خلال التطبيق و تخزين قيم التتبع في جداول منفصلهو اليوم درسنا عن كيفيه تتبع اكثر من جدول و تخزين القيم في جدول واحد سوف نقوم بانشاء جدول يتم فيه تخزين بيانات الجدوال كما يلي : CREATE TABLE TABLES_TRACK( USER_NAME varchar2(20), TABLE_NAME varchar2(20), OP_TIME TIMESTAMP, OPERATION varchar2(20), FIELDS_OLD varchar2(1000), FIELDS_NEW varchar2(1000) ); حيث سوف نقوم بتخزين اسم المستخدم ,اسم الجدول الذي تم التعديل عليه,وقت التعديل,نوع عمليه التعديل (اضافه,حذف,تعديل) ,القيم القديمه للسجل و القيم الجديده للسجل.سوف نقوم بتتبع اكثر من جدول سوف نقوم بتتبع الجداول التاليه:NEWSPAPER و LOCATION و WEATHER الكود التالي لانشاء الجداول السابقه و ملئها بالبيانات: REM ==================NEWSPAPER======================== create table NEWSPAPER ( Feature VARCHAR2(15), Section CHAR(1), Page NUMBER ); insert into NEWSPAPER values ('National News', 'A', 1); insert into NEWSPAPER values ('Sports', 'D', 1); insert into NEWSPAPER values ('Editorials', 'A', 12); insert into NEWSPAPER values ('Business', 'E', 1); insert into NEWSPAPER values ('Weather', 'C', 2); insert into NEWSPAPER values ('Television', 'B', 7); insert into NEWSPAPER values ('Births', 'F', 7); insert into NEWSPAPER values ('Classified', 'F', 8); insert into NEWSPAPER values ('Modern Life', 'B', 1); insert into NEWSPAPER values ('Comics', 'C', 4); insert into NEWSPAPER values ('Movies', 'B', 4); insert into NEWSPAPER values ('Bridge', 'B', 2); insert into NEWSPAPER values ('Obituaries', 'F', 6); insert into NEWSPAPER values ('Doctor Is In', 'F', 6); COMMIT; REM ==================LOCATION======================== create table LOCATION ( City VARCHAR2(25), Country VARCHAR2(25), Continent VARCHAR2(25), Latitude NUMBER, NorthSouth CHAR(1), Longitude NUMBER, EastWest CHAR(1) ); insert into LOCATION values ( 'ATHENS','GREECE','EUROPE',37.58,'N',23.43,'E'); insert into LOCATION values ( 'CHICAGO','UNITED STATES','NORTH AMERICA',41.53,'N',87.38,'W'); insert into LOCATION values ( 'CONAKRY','GUINEA','AFRICA',9.31,'N',13.43,'W'); insert into LOCATION values ( 'LIMA','PERU','SOUTH AMERICA',12.03,'S',77.03,'W'); insert into LOCATION values ( 'MADRAS','INDIA','INDIA',13.05,'N',80.17,'E'); insert into LOCATION values ( 'MANCHESTER','ENGLAND','EUROPE',53.30,'N',2.15,'W'); insert into LOCATION values ( 'MOSCOW','RUSSIA','EUROPE',55.45,'N',37.35,'E'); insert into LOCATION values ( 'PARIS','FRANCE','EUROPE',48.52,'N',2.20,'E'); insert into LOCATION values ( 'SHENYANG','CHINA','CHINA',41.48,'N',123.27,'E'); insert into LOCATION values ( 'ROME','ITALY','EUROPE',41.54,'N',12.29,'E'); insert into LOCATION values ( 'TOKYO','JAPAN','ASIA',35.42,'N',139.46,'E'); insert into LOCATION values ( 'SYDNEY','AUSTRALIA','AUSTRALIA',33.52,'S',151.13,'E'); insert into LOCATION values ( 'SPARTA','GREECE','EUROPE',37.05,'N',22.27,'E'); insert into LOCATION values ( 'MADRID','SPAIN','EUROPE',40.24,'N',3.41,'W'); COMMIT; REM ==================WEATHER======================== create table WEATHER ( City VARCHAR2(11), Temperature NUMBER, Humidity NUMBER, Condition VARCHAR2(9) ); insert into WEATHER values ('LIMA',45,79,'RAIN'); insert into WEATHER values ('PARIS',81,62,'CLOUDY'); insert into WEATHER values ('MANCHESTER',66,98,'FOG'); insert into WEATHER values ('ATHENS',97,89,'SUNNY'); insert into WEATHER values ('CHICAGO',66,88,'RAIN'); insert into WEATHER values ('SYDNEY',69,99,'SUNNY'); insert into WEATHER values ('SPARTA',74,63,'CLOUDY'); commit; الان نقوم بفتح ORACLE FORMS DEVELOPER و انشاء 3 CANVAS واحده لكل جدول كما مبين هنا:صورة 1الان نقوم بانشاء CANVAS جديد و نسميه MAIN ونضع بها التالي:صورة 2تكون الازرار مضافه في block جديد اسمه control :صورة 3ثم نقوم بانشاء triggers كما مبين هنا:صورة 4ثم نكتب الكود التالي في زر weather : go_block('weather'); ثم نكتب الكود التالي في زر Location : go_block('Location'); ثم نكتب الكود التالي في زر Newspaper : go_block('Newspaper'); ثم نكتب الكود التالي في زر exit : exit_form; ثم نذهب الى MODULE1 و نضيف trigger التالي WHEN-NEW-FORM-INSTANCE و نكتب به: go_block('control'); ثم نضيف في كل canvas زر يرجعنا الى ال main canvas و نكتب به: go_block('control'); ثم نضيف في بلوك weather ال triggers التاليه: POST-INSERT ____________ insert into Tables_Track values (user,'WEATHER',sysdate,'Insert',null,:WEATHER.City||','||:WEATHER.Temperature||','||:WEATHER.Humidity||','||:WEATHER.Condition); POST-DELETE ____________ insert into Tables_Track values (user,'WEATHER',sysdate,'Delete',:WEATHER.City||','||:WEATHER.Temperature||','||:WEATHER.Humidity||','||:WEATHER.Condition,NULL); PRE-UPDATE ____________ declare v_City weather.CITY%TYPE; v_Temperature weather.Temperature%TYPE; v_Humidity weather.Humidity%TYPE; v_Condition weather.Condition%TYPE; begin select city,Temperature, Humidity,Condition into v_City,v_Temperature,v_Humidity,v_Condition from weather where rowid=:weather.rowid; insert into Tables_Track values (user,'WEATHER',sysdate,'Update',v_City||','||v_Temperature||','||v_Humidity||','||v_Condition,:WEATHER.City||','||:WEATHER.Temperature||','||:WEATHER.Humidity||','||:WEATHER.Condition); end; ثم نضيف في بلوك Location ال triggers التاليه: POST-INSERT ____________ insert into Tables_Track values (user,'Location',sysdate,'Insert',null,:Location.CITY||','||:Location.COUNTRY||','||:Location.CONTINENT||','||:Location.LATITUDE||','||:Location.NORTHSOUTH||','||:Location.LONGITUDE||','||:Location.EASTWEST); POST-DELETE ____________ insert into Tables_Track values (user,'Location',sysdate,'Delete', :Location.CITY||','||:Location.COUNTRY||','||:Location.CONTINENT||','||:Location.LATITUDE||','||:Location.NORTHSOUTH||','||:Location.LONGITUDE||','||:Location.EASTWEST,NULL); PRE-UPDATE ____________ declare v_CITY Location.CITY%type; v_COUNTRY Location.COUNTRY%type; v_CONTINENT Location.CONTINENT%type; v_LATITUDE Location.LATITUDE%type; v_NORTHSOUTH Location.NORTHSOUTH%type; v_LONGITUDE Location.LONGITUDE%type; v_EASTWEST Location.EASTWEST%type; begin select CITY,COUNTRY,CONTINENT,LATITUDE,NORTHSOUTH,LONGITUDE,EASTWEST into v_CITY,v_COUNTRY,v_CONTINENT,v_LATITUDE,v_NORTHSOUTH,v_LONGITUDE,v_EASTWEST from location where rowid=:location.rowid; insert into Tables_Track values (user,'location',sysdate,'Update',v_CITY||','||v_COUNTRY||','||v_CONTINENT||','||v_LATITUDE||','||v_NORTHSOUTH||','||v_LONGITUDE||','||v_EASTWEST,:Location.CITY||','||:Location.COUNTRY||','||:Location.CONTINENT||','||:Location.LATITUDE||','||:Location.NORTHSOUTH||','||:Location.LONGITUDE||','||:Location.EASTWEST); end; ثم نضيف في بلوك Newspaper ال triggers التاليه: POST-INSERT ____________ insert into Tables_Track values (user,'Newspaper',sysdate,'Insert',null,:Newspaper.FEATURE||','||:Newspaper.SECTION||','||:Newspaper.PAGE); POST-DELETE ____________ insert into Tables_Track values (user,'Newspaper',sysdate,'Delete', :Newspaper.FEATURE||','||:Newspaper.SECTION||','||:Newspaper.PAGE,NULL); PRE-UPDATE ____________ declare v_FEATURE Newspaper.FEATURE%type; v_SECTION Newspaper.SECTION%type; v_PAGE Newspaper.PAGE%type; begin select FEATURE,SECTION,PAGE into v_FEATURE,v_SECTION,v_PAGE from newspaper where rowid=:newspaper.rowid; insert into Tables_Track values (user,'Newspaper',sysdate,'Update',v_FEATURE||','||v_SECTION ||','||v_PAGE,:Newspaper.FEATURE||','||:Newspaper.SECTION||','||:Newspaper.PAGE); end; الان قم بتشغيل البرنامج و قم بالحذف و الاضافه و التعديل على الجداول الثلاثه و لاحظ القيم التي تسجل في جدول Tables_Track كما مبين في الصورة:صورة 5وهكذا قمنا بتتبع التغييرات على اكثر من جدول و سجلنا القيم على جدول واحد حيث قمنا بتسجيل القيم على حقل واحد و قمنا بالفصل بين قيمه كل حقل و الحقل اللذي يليه بالرمز (,) .أرجو ان اكون قد وفقت في اكمال هذه الدروس و ايصالها بصورة جيدة و انا ان شاء الله مستعد للاجابه على اسئلتكم و استفساراتكم.في المرفقات ملف النموذج (form)اخوكم المهندس عمار. MODULE4.rar تم تعديل 17 يوليو 2010 بواسطة ammarcontrol اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
المبرمج الصاعد بتاريخ: 18 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 18 يوليو 2010 الله يبارك فيك أخي عماربصراااحة كنت أريد شرح لها فوجدت شرحك المدهش بارك الله فيككفيت ووفيت ونفع الله بعلمكتسلم يدك,,جاري تطبيقة على النموذج,, اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 18 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 18 يوليو 2010 حياك الله اخويه الغالي و بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
isa.iraq بتاريخ: 30 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 30 يوليو 2010 شكرا جزيلا اخي الكريم و لا تحرمنا من علمك جعل الله هذا العمل في ميزان حسناتك تقبل تحياتي و تقديري أخوك أبن العراق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 30 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 30 يوليو 2010 حياك الله اخويه الغالي اني اخوك عمار من العراق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmsalman87 بتاريخ: 30 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 30 يوليو 2010 شكرا جزيلا على الشرح المفصل والرائعولكن كان لدي استفسار ماذا لو اردنا تتبع كل الجداول ؟ هل من المعقول ان ننشئ جدول لكل جدول ؟؟؟ وشكرا جزيلا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammarcontrol بتاريخ: 30 يوليو 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 30 يوليو 2010 اخي الغالي راجع المشاركه 17 حيث ذكرت بها كيف نتتبع اكثر من جدول و نخزن القيم في جدول واحد.واي سؤال اني بالخدمه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmsalman87 بتاريخ: 30 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 30 يوليو 2010 نعم كلامك صحيح فكرة جميلة الفصل بين الحقول بارك الله فيك وجزاك الله كل خيرتقبل تحياتي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 30 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 30 يوليو 2010 السلام عليكمشرح جميل ومفيد أخي عمار...بارك الله فيك...وسيتم تثبيت الموضوع..إلى الأمام.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.