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

طريقة حفظ البيانات (المعدلة فقط) في جدول


feras abdulhalim

Recommended Posts

الأخوة الكرام و الأعزاء ...

 

قمت بإنشاء جدول يحتوي على بيانات الموظفين و استطيع ادخال و تعديل و استرجاع البيانات من هذا الجدول و اليه ... و الآن أحاول القيام بإنشاء جدول يحفظ سجلات حركات و عمليات الموظفين على النظام ... اسم الجدول TRANSACTIONS_LOG و يحتوي على الأعمدة التالية :

TRANS_ID   NOT NULL NUMBER(20)
TRANS_TYPE_ID       NUMBER(20)
EMP_ID              NUMBER(10)
TRANS_TIME NOT NULL DATE
OLD_DATA            VARCHAR2(150)
NEW_DATA            VARCHAR2(150)
EMP_IP              VARCHAR2(20)

الغرض من هذا الجدول هو تسجيل عمليات اضافة البيانات و تعديلها و حذفها ... فمثلاً عند القيام بتعديل اي معلومة من خلال على الفورم من جدول الموظفين يجب على البرنامج ان يسجل في جدول TRANSACTIONS_LOG العملية التي قام بها المستخدم سواء اضافة او حذف او تعديل (هذه محلولة) ، مشكلتي بالضبط في تسجيل البيانات المعروضة في الفورم قبل التعديل في عامود OLD_DATA و بعد التعديل في NEW_DATA على أن يخزن فقط البيانات التي تم تعديلها و ليس كل البيانات.

 

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

 

لقد بحثت كثيراً عن مشكلة مشابهة في هذا المنتدى و في جوجل و لكن لم أجد فأتيت لاجئاً لكم من خلال هذا المنشور و كلي أمل بأن ألقى منكم الدعم و المساعدة.

قاعدة البيانات 11g r2 و الفورم 11g

شكراً لكم مقدماً من اعماق القلب

 

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

بعد التعديل سهلة قيمتها بالحقل على الشاشة بتاعتك

قبل التعديل select

من الجدول لاحضار القيمة قبل التعديل

وتقارن ده بده لو مختلفيين اعمل اضافة بالجدول

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

أشكرك أخي لسرعة ردك ...
و لكن أعتقد بأن الحل اللي ذكرته ممكن مع حقل واحد في فورم tabular ... الشاشة اللي عندي FORM تحتوي على حقول كثيرة

ممكن ما أكون فهمت الحل اللي طرحته انت او ممكن أكون انا ما قمت بشرح المشكلة بالشكل الصحيح بعدم توضيح ان كانت الشاشة عندي FORM او TABULAR

 

في الحالة اللي عندي مش محتاجة لـ For Loop ما بعرف لكن حاولت في زر "حفظ" اني اكتب الكود التالي :

BEGIN
	IF :EMPLOYEES.EMP_NAME = EMPLOYEES.EMP_NAME THEN
NULL;

	ELSE
		INSERT INTO TRANSACTIONS_LOG (TRANS_ID,TRANS_TYPE_ID,EMP_ID,TRANS_TIME,OLD_DATA,NEW_DATA,EMP_IP)
			;SELECT :CONTROL.SELECT_MAX,'UPDATE',:GLOBAL.P_EMP_ID,SYSDATE,EMP_NAME,:EMP_NAME,:CONTROL.DISPLAY_IP FROM EMPLOYEES WHERE EMPLOYEES.EMP_ID = :EMP_ID
			COMMIT; 

			END IF;
END;

و اذا كان هذا هو الحل فهذا يعني راح اكتب نفس الكود لكل FIELD ... لتاريخ الميلاد و مكان الميلاد و ... الخ
طبعاً هو الكود غلط بكل تأكيد و لكن القصد هو هل هذه فكرة الحل لمشكلتي ؟ أعتقد انه في حلول أخرى أقوى من اللي انا كاتبه ... و بتمنى أخي اذا فهمتك غلط تحكيلي.

كل الشكر لك أخي العزيز

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

هو فى حل اسهل من ده كله تعمل اضافة فى جدول جديد اخره مثلا audit

بس زياده col (type)

له قيمة before or after

قبل ده نفس جملة الاضافة اللى انت كتبها باعلى لكن من الجدول مباشرة

بعد جملة اضافة with values(:emp_id,:emp_name)

لو ده مناسب ليك فى اضافات تانية ممكن تزودها بس ده ابسط كتير

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

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

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

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

×   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.

جاري التحميل
×
×
  • أضف...

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

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