الانتقال إلى المحتوى
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.

شاشة Transaction

Featured Replies

بتاريخ:

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

 

 

انا عندي شاشة فيها ادخال بيانات   مثل    sno,name

 

 

اريد ان انشئ شاشة اخرى  اسميها  transaction  بمعنى   اريد          اذا عدلت في شاشة ادخال البيانات   او حذفت    

 

 

تنتقل الى شاشة   transaction 

 

 

بمعنى             اذا  كان مثلا     1           محمد                               وقمت بتعديل                 1     علي

 

 

 

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

 

 

 

كيف اسطيع ان افعل    ذلك  

 

ارجووووكم المساعدة

بتاريخ:

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

 

هذا يسمى التتبع مدخلات النظام .

وهنا توجد طريقيتن وكلامها تعمل بقووة الأولى :

يوجد تريقر جاهز على مستوى قاعدة البيانات ويعمل هذا الشي ...

والطريقة الثانية من خلال الفورمة وهي التي أريد أن أرفق لك فيها الكود بإذن الله..

 

طبعا توجد شروحات جيده وأكواااد وفورم جاهزة في هذا المنتدى ولكن تفضل هذا الكود:

 

1- يتم إنشا جدول جديد على قاعدة البيانات ويكون مثلا محتواه :

NO              VARCHAR2(6), --  التسلسل 
  DATE1           DATE, -- تاريخ العمليه ويكون فيها التاريخ مع الوقت 
  USERNAME        VARCHAR2(50),  -- اسم المستخدم
  TABLE_NAME      VARCHAR2(100),  -- اسم الجدول وهو يكون اسم الفورمة
  OP_TYPE         VARCHAR2(100),  -- نوع العمليه ويكون اما حذف او تعديل
  EmpName     VARCHAR2(100),-- اسم الحقل المراد تتبعه
EmpName_Old VARCHAR2(100), اسم الحقل بعد التعديل
SAl Numbre, -- اسم الحقل المراد تتبعه
Sal_OLd Number); -- اسم الحقل بعد التعديل

وهنا تم إنشا الجدول طبعا ال5 الحقول الأولى أساسية وأما الحقلين هذا مثلا فقط لكي يتم تتبع العميلات على حقلين فقط وهما اسم الموظف والراتب

طبعا لو نريد حقول ثانيه نكتبها ولكل اسم حقل مراد تتبعه يكون لها حقلين هنا

بمعنى أردنا أن نتتبع  حقل اسم القسم الموجود في جدول ألأقسام يتم كتابه اسم القسم DName في هذا الجدول مرتين DName والحقل الثاني DName_Old وهكذا.....

 

 

يب الأن تم إنشا هذا الجدول الآن نأتي على جزء التتبع

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

نذهذب إلى بلك الوظفين EMP ونشي تريقر جديد على Pre_Update وهذا للتبع إي عمليه تعديل على هذا الجدول

ويكون فيه الكود التالي:


/*
åÐÇ ÇáßæÏ áÚãá ãÊÇÈÚÉ áßá Úãáíå ÊÚÏíá Úáì ÌÏæá ÇáãæÙÝíä 
ÈÍíË äÓÊÚÑÖ ÇáÈíÇäÇÊ ÇáãæÌæÏå Ýí ÇáÌÏæá ÞÈá ÇáÊÚÏíá æäÖÚåÇ Ýí ãÊÛíÑÇÊ ãÄÞÊÉ ÞÈ ãÇ ÊÊã Úãáíå ÇáÊÚÏíá 
æÈÚÏ Ðáß íÊã ÍÝÙ ÇáÈíÇäÇÊ ÇáãÚÏáå Ýí ÇáÝæÑãÉ æÍÝÙåÇ ßáåÇ Ýí ÌÏæá ÇáãÊÇÈÚÉ 
ßãÇ åæ ãæÖÍ Ýí ÇáÃÓÝá..¿¿¿
*/
declare
v_empName   emp.ename%TYPE; -- ÇáãÊÛíÑÇÊ ÇáÊí äÑíÏ Ãä äÚãá áåÇ ÊÊÈÚ Ýí Úãáíå ÇáÊÚÏíá
v_sal       emp.SAl%TYPE;



begin
        select ename,sal  -- äÌíÈ ÇáÈíÇäÇÊ ÇáÞÏíãå áÇÓã ÇáãæÙÝ æÇáÑÇÊÈ ááÍÞá ÇáãÑÇÏ ÊÚÏíáå 
        into   v_empname,v_sal
         from emp where rowid=:emp.rowid; -- æåÐÇ ÇáÌãáÉ ÊÌíÈ áäÇ ÇáÍÞá ÇáãÑÇÏ
            If V_EmpName=:emp.ename AND v_sal=:emp.sal Then
        Null;
        Else
         insert into Table_Track
(no,DATE1,table_name,op_type,username,
empname_OLd,empname,SAl_Old,sal) -- äØÚ ÝíåÇ ÇáãÊÛíÑÇÊ ÇáÊí Êã ÃÎÐåÇ ãä ÇáÓáßíÊ ÇáÃÚáì + ÞíãÉ ÇáÍÞá ÌÏíÏÉ ã ä ÇáÝæãÑÉ
values (
table_Track1.nextval,sysdate,' ÃáãæÙÝíä','ÊÚÏíá',:Global.un,
v_empName, :emp.eName,v_sal,:Emp.SAl );
End If;
END;


وكذا تم عمل تتبع للحقل أثنا التعديل

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

نعمل الكود التالي في نفس البلوك تحت تريقر  Post_Delete

ويكون فيه الكود التالي:

-- طبعا هنا ماعندنا قيم قديمة وجديدة هنا فقط القيم القديمة ولهذا يتم أخذها مباشرة من الفوم ووضعها في حقل Empname_OLD وأيضا Sal_OLD



Begin

	  insert into Table_Track
(no,DATE1,table_name,op_type,username,
EmpName_OLD,SAl_OLd)

values (

table_Track1.nextval,sysdate,' ÃáãæÙÝíÜÜä','ÍÐÝ',:Global.un,
:emp.ename,:emp.sal );
END;

وكدى تم عمل تتبع للحذف ..

 

وهنا  نظيف السكوينس لكي يتم ترقيم العمليات على جدول التتبع مع كل عمليه ..

create sequence TABLE_TRACK1
minvalue 1
maxvalue 999999
start with 65150
increment by 1
nocache;

وكدى يكون اظفنا ترقيم للعمليه للحقل NO الموجود في جدول Table_Track للحقل NO .....

 

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

هذا ما أعلم والله تعالى أعلم..

 

مووفقين..

بتاريخ:

وهذا الفورمة مرفقه فيها جميع الأكواااد>>

 

تم تعديل على الفورمة يرجى تحميل الجديدة.

وشكرا

emp.rar

تم تعديل بواسطة المبرمج الصاعد
تم تعديل على المرفق

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

شكرا على الرد        

 

بس عندي استفسار   عندما  اقوم   بالتعديل على حقل        PRE_UPDATE     تريقر قبل التعديل 

 

ماذا عن بعد التعيل   هل  هو نفس التريقر  ام ماذا     

 

وكيف يقوم بحفظ  اسم الفورمة واسم الجدول   ونوع العملية   واسم  اليوزر

 

انا اريد مثلا اسم اليوزر   يأخذه من حقل معين   هل استطيع   ام لا

بتاريخ:

هلا فيك

 

نعم هو نفسه.

جرب وتشوف الطريقة...

 

اسم الفورمة أو اسم الجدول أنت تحطها يدوي مع كل تريقر تحط فيها اسم الجدول أو اسم الفورمة ونوع العمليه 

اما اسم المستخدم هو ياخذها من متغير مثل ماهو موجود ف الكود Globlael.UN  وهو ياخذ القيمة من متغير .. ولو عندك اسم المستخدم موجود ع الفورمة خليها يساوي اسم الحقل.

 

ونسيت أظيف أنه رقم العمليه هو عبارة عن سكويسن موجود على قاعدة البياات

لكي يقوم بترقيم العمليات المدخله على جدول التتبع

table_Track1.nextval

وهذا اسم السكوينس..

 

وتم التعديل على المشاركة ووضع السكوينس..

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

اسف على ازعاجك

 

 

ولكن في اول خمسة حقول   هل استطيع تغيير الاسم        مثلا   بدل   NO    اضع   SNO                  و DATE1                    و  T_DATE

 

 

شكرا

بتاريخ:

لا لا تفض يا غاالي

مافي إزعاج..

 

نعم أكيد تغير ما تريد من اسم الجدول Table_Track أو تغير الحقول ولكن تغيرها أيضا مع كل تريقر ..

 

اوك.

 

مووفق

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

يا اخي بالنسبة   لل   op_type   و  table_name

 

 

كيف يأخذها   لانها   ليست واضحة في الشرح

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

تقصد

 

 

اضع  مثلا                   table_name      " جدول كذا"

 

 

op_type       "تحديث"

بتاريخ:

أفتح الفورمة المرفقه وفيها الأكواااد مع الشرح

أنت تحط فيها القيمة إلي هي اسم الواجهة أو تحط لو تبغ أسم الجدول وo_type تكتب فيها نوع العمليه هو تعديل أو حذف

طبعا في تريقر per_update تخليها أكيد تعديل ,وفي تريقر post_delete تخليه طبعا حذف ...

 

مووفق؟؟

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

استفسار اخير

 

هل استطيع  ان احدد  اذا تم التغيير في القيم    يرسلها الى جدول   track       واذا حدث في   حقول اخرى          لا ترسلها

 

 

ارجووو ان تكون الصورة وضحت

بتاريخ:

ايو أكيد يا غاالي

لأنك أنت تحدد الحقول المراد تتبعها مع كل بلوك

وتعمل حقل بإسمه لكي تعرف اسم الحقل ويكون بنفس اسمه ف الجدول الأساسي.

 

حيث ف المثال تم فقط على حقل اسم الموظف والراتب

ولو تم تعديل ع تاريخ التعيين أو رقم الموظف لا يتم تتبعه ولا إظهارة في جدول التتبع..

 

موووفق..

 

 

هل حملت الفورمة وشاهدت كيف تعمل..؟

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

نعم يا اخي جربت

 

ممكن مافهمتني           انا الان خلصت الفورمة  التي تخصني     ولكن   اذا قمت بالتعديل  في الفورمة عمموما        يرسلها الى  جدول track 

 

بمعنى   انه اذا  قمت بالتعديل في حقول غير الحقول  التي اريد عمل تتبع لها         يحفظ   ويرسلها  الى جدول  track    وانا لا اريد   ذلك      اريد فقط  اذا  عمل تغييرات في الحقول التي وضعتها في الكود  

 

اما اذا  عدلت في الحقول الاخرى لايرسلها           

 

ارجووو ان تكون الصوره وضحت

بتاريخ:

طيب هذا المفروض يا غاالي.

 

ممكن أعرف الكود التي كتبته في تريقر per_update >>?

 

وماهي الحقول المراد تتبعها وماهي الحقول التي لا تريد أن تتبعها..؟

 

منتظرك..

 

مووفق

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

السلام عليكم

 

 

انا عندي جدول فيه         no,name,job,mobile,action,rekarks

 

 

انا اتتبع حقلين فقط    هما        action,remarks                          اريد عند التعديل  في احدهما او كلاهما     يرسلها الى جدول  track  

 

مايحدث الان   عندي        حتى ادا  لم اقم بالتعديل فيهم         وقمت بالتعديل في الاسم او الوظيفة           يقوم الكود  بارسال الحقلين الى جدول track 

 

 

ارجوووو ان تكون الصورة قد وضحت

 

 

شكرا

بتاريخ:

السلام عليكم.

 

نعم الصورة وااضحه.

وصح كلامك ممكن يرسل إلى الجدول إي عمليه تعديل صارت على البلوك.

 

 

نعم إستفسارك في محلة..

 

أبشر أشوفها وأرد عليك.

 

 

موووفق.

بتاريخ:

هلا يا غاالي

 

تم التعديل ع الكود

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

 

مثل::

  If V_EmpName=:emp.ename AND v_sal=:emp.sal Then 
    	Null;
    	Else

وعملت لك فورمة على scott.emp

شوفها ورد عليا

مووووفق

 

 

وأسف على عدم فمهك من أول مرررة.

 

 

emp.rar

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

قمت بإضافة    الشرط 

 

 

ولكن مازال  يرسل الى track       حتى اذا لم اعدل في الحقلين

بتاريخ:

هلا اخي مستحيل انا مجربها في الفورمة المرفقه..

ياليت تجربها من الواجة وترد عليا..

لأني جربتها ولم تتأثر بالحقووووووول الأخرى..؟؟؟؟

بتاريخ:

بشرني هل تم التعامل معها بنجاح ام لا زال المشكله قائمة..

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

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

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

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

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

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.