الانتقال إلى المحتوى

اليكم : شرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديل


ammarcontrol

Recommended Posts


تفظلوا شرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديل

السلام عليكم
تحيه طيبه لجميع اعضاء المنتدى
اليوم اشرح لكم كيفيه تتبع المستخدمين و تسجيل العمليات التي يجرونها على جداول قواعد البيانات من اضافه و حذف و تعديل حيث سوف نقوم بعمل برنامج يقوم بتسجيل القيم التي يعدلها المستخدمين القيم القديمه و القيم بعد التعديل و اسم المستخدم الذي قام التعديل و التاريخ.
من اجل تتبع المستخدمين هناك طريقتين :
الطريقه الاولى:
من خلال عمل 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_TRACK
BEFORE UPDATE OR DELETE OR INSERT
يعمل قبل ان يتم تنفيذ جمل UPDATE و DELETE و INSERT
OF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON

"WEATHER_SOFTWARE"."WEATHER"
يعمل على حقول الجدول WEATHER
REFERENCING OLD AS old NEW AS new FOR EACH ROW
تمثل القيم القديمه بكلمه old و القيم الجديده new
begin
بدايه ال trigger
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);
قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK
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);
قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK
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);
قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK
end if;
نهايه الجمله الشرطيه
end;
/
نهايه كود الtrigger

اذا اردنا عمل الtrigger من خلال الEnterprise Manager 10g
يكون العمل كما يلي:

صورة 1
668498658.jpg
صورة 2
606725315.jpg
صورة 3
850038482.jpg
صورة 4
186629650.jpg
صورة 5
444548023.jpg
صورة 6
583434186.jpg
صورة 7
853247603.jpg
صورة 8
595674328.jpg





والان من اجل فحص البرنامج نقوم بادخال و حذف و تعديل قيم في جدول 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;

سوف يكون الناتج كما يلي:
290992234.jpg

الطريقه الثانيه من خلال التطبيق سوف اتطرق لها في الدرس القادم ان شاء الله .

تم تعديل بواسطة ammarcontrol
رابط هذا التعليق
شارك

  • الردود 44
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • ammarcontrol

    20

  • المبرمج الصاعد

    3

  • Ahmad.Hasan

    2

  • Bent al-Yemen

    2

أكثر المشاركين في هذا الموضوع

يعطيك ربي الف الف الف عافيه

على الشرح الرائع لعمل trigger

وجزاك الله الف خير

رابط هذا التعليق
شارك

السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.

رابط هذا التعليق
شارك


السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.

وعليكم السلام اخي الغالي في هذه الطريقه اي الطريقه الاولى سوف يتوجب عمل 200 trigger و 200 جدول لتسجيل الاحداث حيث انه لا يمكن عمل trigger عام حيث انه يجب ان يكون ال trigger مرتبط بجدول معين.
عموما اخي الغالي هناك طريقه اخرى للتتبع وهي من خلال التطبيق و هناك بامكانك ان تبرمج الطريقه كما يحلو لك حيث يمكن جعل جدول واحد يحتوي التغييرات على جميع الجداول و سوف اتطرق لها في الدرس القادم ان شاء الله.
رابط هذا التعليق
شارك


يمكن ايظا ان نقوم بتتبع التغييرات على الجداول من خلال قاعده البيانات و ذلك من خلال Materialized View Logs تعالوا معي نتعرف على هذه الطريقه:
عندما ننشئ Materialized View Logs سوف يقوم بانشاء جدول يحتوي السجلات قبل عمليه التغيير وبعدها وكذلك يحتوي السجلات المحذوفه لكن مشكله هذه الطريقه انها لاتخبرك من قام بهذه التعديلات وكذلك لاتخبرك بنوع التعديل هل هو delete ام insert ام update لانشاء Materialized View Logs قم بالخطوات التاليه:
صورة 1
689965332.jpg
صورة 2
56727602.jpg
صورة 3
569034292.jpg
صورة 4
424608147.jpg
صورة 5
80899224.jpg
صورة 6
941521244.jpg
الان من اجل فحص البرنامج قم بادخال التالي:

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
627165441.jpg
يمكن بواسطه جمل 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 فانتظرونا.
دمتم في امان الله

تم تعديل بواسطة ammarcontrol
رابط هذا التعليق
شارك

دخلت للنت بحثا عن هذا الموضوع فوفقني الله الى هذا الموضوع .......موضوع رائع جدا جزيت به خيرا ،،


السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.


في الحقيقة لم اعرف الفكرة بالضبط ،،،أتمنى ان يتكرم على احد الاخوان بعمل هذا الترايجر ...احتاجه في مشروعي
رابط هذا التعليق
شارك


دخلت للنت بحثا عن هذا الموضوع فوفقني الله الى هذا الموضوع .......موضوع رائع جدا جزيت به خيرا ،،


السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.


في الحقيقة لم اعرف الفكرة بالضبط ،،،أتمنى ان يتكرم على احد الاخوان بعمل هذا الترايجر ...احتاجه في مشروعي

اخي الغالي سوف اتطرق لهذا الموضوع في الدروس القادمه ان شاء الله فتابع معي هذا الموضوع
رابط هذا التعليق
شارك

السلام عليكم ورحمة الله

الأخ / ammar

شكرا لك على جهدك المتميز ... جزاك الله خيرا

لقد اضاف عرضك للشرح باستخدام الصور ... الى تميز موضوعك

اتمنى من الأخوة الأعضاء ... عرض مشاركاتهم باستخدام الصور وايضا البرامج المستخدمه فى الشرح

والله الموفق

وننتظر اكمال الدروس


رابط هذا التعليق
شارك




اخي الغالي سوف اتطرق لهذا الموضوع في الدروس القادمه ان شاء الله فتابع معي هذا الموضوع


شكرا لك وان شاء الله متابعين معاك ...(سوف نسلم المشروع يوم السبت ان شاء الله تعالى
رابط هذا التعليق
شارك


السلام عليكم
اخوتي الاعزاء اليوم موعدنا مع الطريقه الثانيه لتتبع التغييرات التي يجريها المستخدمين على الجداول هذه الطريقه تتم من خلال التطبيق الـ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
264953160.jpg
صورة 2
888351155.jpg
صورة 3
997811287.jpg
صورة 4
481996580.jpg
صورة 5
853955259.jpg
صورة 6
91044352.jpg
صورة 7
435287061.jpg

رابط هذا التعليق
شارك


صورة 8
356148959.jpg
صورة 9
873716281.jpg
صورة 10
247661988.jpg
صورة 11
763159413.jpg
صورة 12
760347895.jpg
صورة 13
555180180.jpg
صورة 14
418855836.jpg

ثم نقوم بكتابه الاكواد التاليه:
في الــ(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);


رابط هذا التعليق
شارك


في المرفقات ملف النموذج الذي شرحته.
الدرس القادم سوف يكون عن كيفيه تتبع اكثر من جدول و تخزين قيم التتبع في جدول واحد رئيسي فانتضرونا ان شاء الله.

MODULE2.rar

تم تعديل بواسطة ammarcontrol
رابط هذا التعليق
شارك


السلام عليكم
الدرس الرابع و الاخير ((تتبع اكثر من جدول و تخزين القيم في جدول واحد))

اخوتي الاعزاء لنراجع ما قمنا بدراسته لحد الان:

الدرس الاول : تتبع التغييرات على الجداول من خلال 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
69098691.jpg
الان نقوم بانشاء CANVAS جديد و نسميه MAIN ونضع بها التالي:
صورة 2
449962741.jpg
تكون الازرار مضافه في block جديد اسمه control :
صورة 3
449894204.jpg
ثم نقوم بانشاء triggers كما مبين هنا:
صورة 4
447845571.jpg
ثم نكتب الكود التالي في زر 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
724009746.jpg
وهكذا قمنا بتتبع التغييرات على اكثر من جدول و سجلنا القيم على جدول واحد حيث قمنا بتسجيل القيم على حقل واحد و قمنا بالفصل بين قيمه كل حقل و الحقل اللذي يليه بالرمز (,) .
أرجو ان اكون قد وفقت في اكمال هذه الدروس و ايصالها بصورة جيدة و انا ان شاء الله مستعد للاجابه على اسئلتكم و استفساراتكم.
في المرفقات ملف النموذج (form)
اخوكم المهندس عمار.

MODULE4.rar

تم تعديل بواسطة ammarcontrol
رابط هذا التعليق
شارك

الله يبارك فيك أخي عمار
بصراااحة كنت أريد شرح لها فوجدت شرحك المدهش بارك الله فيك
كفيت ووفيت ونفع الله بعلمك

تسلم يدك,,
جاري تطبيقة على النموذج,,

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

شكرا جزيلا على الشرح المفصل والرائع
ولكن كان لدي استفسار ماذا لو اردنا تتبع كل الجداول ؟ هل من المعقول ان ننشئ جدول لكل جدول ؟؟؟
وشكرا جزيلا

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل



×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية