الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تسجيل عمليات المستخدمين على قاعدة البيانات Trigers

بدأه حسين احمد طالب في 19 أكتوبر 2013 · 1 رد · 1,409 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

وبطريقة اخرى .

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

 

 

يوفر لنا SQL Server خاصية تسمى  Triggers 

trigers.png

 Triggers   موجودة مع كل جدول    تتنفذ  تلقائيا عند اجراء عمليات حذف او اضافة او تعديل على الجدول . نكون بيها اجرائات  لتقوم بتسجيل كل تغير على هذا الجدول  من اضافة سجل او تعديل سجل او حذف سجل يحدث في الجدول  .

 

مثال : لنفرض ان لدينا جدول اسمه Admins  كما في الشكل   

post-243277-0-22489500-1382174472_thumb.

ونحن نريد تسجيل كل تغير (تحديث) يقوم به المدراء على اي قيد في الجدول  يحدث على 

1.حقل  اسم المستخدم   UserFillName  

2. حقل UserNo   هو حقل يخزن فيه ID  الخاص بلمدير من جدول AdminManager الذي   قام بتغير هذا الاسم  

 

بداية : نضغط على الجدول Admin  ومن Triggers نختار اضافة   Triggers جديد 

 

 

trigers.png

 

نكون   TRIGGER  جديد

create TRIGGER [dbo].[trgName]

ونجعله يتحكم بلجدول  Admin 

  ON [dbo].[Admin ]

بعد كلمة  AFTER نختار العملية (insert,delete,update) الذي نريده ان يرتبط به هذا الأجراء   [dbo].[trgName]  اي متى نريد هذا الاجراء ان يتنفذ عند الحذف او عند التعديل او عند الاضافة في هذا الجدول

 

نجعل هذا   TRIGGER  الاجراء  [dbo].[trgName]  يعمل عند التحديث على الجدول نكتب بعد after كلمة Update معناه ينفذ الاجراء بعد  كل عملية التعديل على سجل من سجلات  الجدول

AFTER UPDATE

 

 

 

 

 

في داخل هذا الأجراء نعمل نتحقق على   حقل الأسم   UserFillName   هل  تم تغير البيانات فيه هكذا

IF UPDATE(UserFillName)  BEGINEND

وفي داخل شرط  التحقق   نجلب :

1. القيمة القديمة  Deleted  للحقل    الأسم   UserFillName 

2. القيمة الجديدة   Inserted  للحقل   الأسم   UserFillName 

3. UserNo  عنوان ID الخاص بلمدير الذي حدثت البيانات فيه 

SELECT @OldDate = (SELECT UserFillName FROM Deleted) 
SELECT @NewDate = (SELECT UserFillName FROM Inserted) 
SELECT @UserNo = (SELECT UserNo FROM Inserted)
 

 

وبعدها نرسل   البيانات  التي حصل عليها التحديث  الى اجراء الحفظ في جدول  TabelHistory لكل نحفظ التغيرات على بيانات الحقل في صف جديد في الجدول

exec dbo.InsertHistory @OldDate,@NewDate,@UserNo

 

 

كود  TRIGGER الاجراء   [dbo].[trgName]  كامل

 

create TRIGGER [dbo].[trgName]   ON [dbo].[Admin ]
AFTER UPDATE
AS 
BEGIN

SET NOCOUNT ON;
DECLARE @OldDate nvarchar(40)
DECLARE @NewDate nvarchar(40)
DECLARE @UserNo int 

IF UPDATE(UserFillName) 
 BEGIN
SELECT @OldDate = (SELECT UserFillName FROM Deleted) 
SELECT @NewDate = (SELECT UserFillName FROM Inserted)
SELECT @UserNo = (SELECT UserNo FROM Inserted)

IF @OldDate <> @NewDate 
BEGIN
exec dbo.InsertHistory @OldDate,@NewDate,@UserNo
END
 END
END

 

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

 

create PROCEDURE [dbo].[InsertHistory] 
(@OldName varchar(40),@NewName varchar(40) ,@UserNo int )
AS
BEGIN

SET NOCOUNT ON;

Insert into dbo.TabelHistory
([ OldName ],[ NewName ],[UserNo])

Values
( @ OldName ,@ NewName ,@UserNo )
END

جدول  TabelHistory الذي يخزن به حركات المستخدمين وتعديلاتهم على الجداول 

post-243277-0-86873000-1382174503_thumb.

 

 

جدول AdminManager

وهذا الجدول خاص بأسماء المدراء الحقيقية  وID الخاص بكل مدير يفيدنا في تحويل ID الخاص بلمدراء الى اسمهم الحقيقي

post-243277-0-90396400-1382174526_thumb.

مدونتي

http://hussienahmmed.blogspot.com/

تم تعديل هذه المشاركة بواسطة حسين احمد طالب في 19 أكتوبر 2013 في 18:19

2

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#2

اكرمك الله موقع جميل

مواضيع مشابهة