الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:


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

السلام عليكم
تحيه طيبه لجميع اعضاء المنتدى
اليوم اشرح لكم كيفيه تتبع المستخدمين و تسجيل العمليات التي يجرونها على جداول قواعد البيانات من اضافه و حذف و تعديل حيث سوف نقوم بعمل برنامج يقوم بتسجيل القيم التي يعدلها المستخدمين القيم القديمه و القيم بعد التعديل و اسم المستخدم الذي قام التعديل و التاريخ.
من اجل تتبع المستخدمين هناك طريقتين :
الطريقه الاولى:
من خلال عمل 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
  • المشاهدات 21.3k
  • البداية
  • اخر رد

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

Most Popular Posts

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

  • ختامها مسك اخواني سوف اعطيكم شاشه (form) تستطيع من خلالها انشاء تريكر على كل جدول موجود في السكيما و جعل قيم التتبع تذهب الى جدول و احد هو TRACK_USER_TABLESحيث مثلا لديك 200 جدول و كل جدول يحتوي 100 ح

  • المــــــــــــــــــــــلف في المرفقات MODULE2.rar

بتاريخ:

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

على الشرح الرائع لعمل 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

بتاريخ:
  • كاتب الموضوع

رد تكرر اسف

تم تعديل بواسطة 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 أسابيع...
بتاريخ:

شكرا جزيلا اخي الكريم و لا تحرمنا من علمك جعل الله هذا العمل في ميزان حسناتك تقبل تحياتي و تقديري أخوك أبن العراق

بتاريخ:
  • كاتب الموضوع

حياك الله اخويه الغالي اني اخوك عمار من العراق

بتاريخ:

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

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

نعم كلامك صحيح
فكرة جميلة الفصل بين الحقول بارك الله فيك وجزاك الله كل خير
تقبل تحياتي

بتاريخ:

السلام عليكم
شرح جميل ومفيد أخي عمار...
بارك الله فيك...
وسيتم تثبيت الموضوع..
إلى الأمام..

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.