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

مثبت دروس فورم من الألف الى الياء


miash80

Recommended Posts

موضوع اليوم مهم جدا وضروري 

 

الموضوع اليوم عن الــ  Trigger

 

اتعرفون ما هو الترجير

 

الترجير هو  PL.SQL Code ينطلق عن حدوث امر معين .

 

Event : 

 

Pre : execute trigger before event ينطلق الترجير قبل حدوت الحدث

Post :execute trigger after event ينطلق الترجير بعد حدوث الحدث

When : execute trigger and event together ينطلق الترجير مع حدوث الحدث

On : delete event execute trigger يلغي عملية وينفذ كود الترجير

 

 

Key :

 

Delete function of the key and execute trigger 

 

يلغي الاقتران الخاص بالكبسات وينفذ الترجير

 

Trigger Level 

 

1. Form Trigger 

2. Block Trigger 

3. Item Trigger 

 

يوجد الترجير على ثلاث مستويات  Form And block and Item

 

سنأخذ امثلة على كل نوع ان شاء الله

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

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

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

  • miash80

    125

  • Bosaeed

    6

  • mohamed mustafa

    4

  • jedghaleb

    4

سنأخذ مثال بسيط اريد عندما افتح الفورم اكبر الــ window الرئسية 

 

عند فتح الفورم يكون فورم التنفيذ بهذا الشكل

 

524894485.jpg

 

اذهب الى الفورم ثم الى ترجير 

 

758644727.jpg

 

 

 

ثم اضعط على علامة +  لاضافة ترجير جديد

 

كيف احدد الترجير...؟

 

اريد ترجير ينفذ عندما افتح الفورم

 

ما هو هذا الترجير  

 

WHEN-NEW-FORM-INSTANCE

 

من اسمه واضح وظيفته

 

 

484099756.jpg

 

 

 

نكتب داخله هذا الكود

 

721045860.jpg

 

لنرى النتيجة نعمل تنفيذ للبرنامج كالتالي

 

782283106.jpg

 

 

ولتكبير الــ Window الموجود عليها البلوك نكتب هذا الكود

 

 

 

255390948.jpg

 

 

 

 

 

لنرى النتيجة نعمل تنفيذ للبرنامج كالتالي

 

 

538252046.jpg

 

 

 

تم المطلوب والحمدلله

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

 لوضع عنوان لكل Window  نضيف كود على نفس الترجير كالتالي

 

662775103.jpg

 

 

 

وتكون النتيجة عند التنفيذ كالتالي 

 

 

173722095.jpg

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

للأجابة على سؤال الاخ العزيز ولأكمال شرح العلاقة بين الماستر والديتل

 

نذهب الى خصائص العلاقة عن طريق F4  ستكون عندنا هذه الشاشة

 

331528542.jpg

 

 

 

Prevent Masterless Operations : خاصية الاستعلام عن الديتل دون وجود ماستر

 

Deferred : لا يأتي بالديتل الا لما استعلم عنه 

 

Automatic Query : مجرد ما يدخل على الديتل يأتي بالبيانات

 

 

 

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

 

جزيت خيراً استاذ موسى

 

 

 

 

 

موضوع اليوم مهم جدا وضروري 

 

الموضوع اليوم عن الــ  Trigger

 

اتعرفون ما هو الترجير

 

الترجير هو  PL.SQL Code ينطلق عن حدوث امر معين .

 

Event : 

 

Pre : execute trigger before event ينطلق الترجير قبل حدوت الحدث

Post :execute trigger after event ينطلق الترجير بعد حدوث الحدث

When : execute trigger and event together ينطلق الترجير مع حدوث الحدث

On : delete event execute trigger يلغي عملية وينفذ كود الترجير

 

 

Key :

 

Delete function of the key and execute trigger 

 

يلغي الاقتران الخاص بالكبسات وينفذ الترجير

 

Trigger Level 

 

1. Form Trigger 

2. Block Trigger 

3. Item Trigger 

 

يوجد الترجير على ثلاث مستويات  Form And block and Item

 

سنأخذ امثلة على كل نوع ان شاء الله

 

من اهم المواضيع فعلا اخي 

 

وياريت تتحمل كثرة اسئلتي اخي موسى لأني ما زلت مبتدأ 

 

 

هل يوجد ترجير على مستوى Record؟

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

 

للأجابة على سؤال الاخ العزيز ولأكمال شرح العلاقة بين الماستر والديتل

 

نذهب الى خصائص العلاقة عن طريق F4  ستكون عندنا هذه الشاشة

 

331528542.jpg

 

 

 

Prevent Masterless Operations : خاصية الاستعلام عن الديتل دون وجود ماستر

 

Deferred : لا يأتي بالديتل الا لما استعلم عنه 

 

Automatic Query : مجرد ما يدخل على الديتل يأتي بالبيانات

 

 

 

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

 

جزيت خيراً استاذ موسى

 

 

الله يبارك  فيك اخي العزيز

 

 

موضوع اليوم مهم جدا وضروري 

 

الموضوع اليوم عن الــ  Trigger

 

اتعرفون ما هو الترجير

 

الترجير هو  PL.SQL Code ينطلق عن حدوث امر معين .

 

Event : 

 

Pre : execute trigger before event ينطلق الترجير قبل حدوت الحدث

Post :execute trigger after event ينطلق الترجير بعد حدوث الحدث

When : execute trigger and event together ينطلق الترجير مع حدوث الحدث

On : delete event execute trigger يلغي عملية وينفذ كود الترجير

 

 

Key :

 

Delete function of the key and execute trigger 

 

يلغي الاقتران الخاص بالكبسات وينفذ الترجير

 

Trigger Level 

 

1. Form Trigger 

2. Block Trigger 

3. Item Trigger 

 

يوجد الترجير على ثلاث مستويات  Form And block and Item

 

سنأخذ امثلة على كل نوع ان شاء الله

 

من اهم المواضيع فعلا اخي 

 

وياريت تتحمل كثرة اسئلتي اخي موسى لأني ما زلت مبتدأ 

 

 

هل يوجد ترجير على مستوى Record؟

 

 

طبعا اخي الفاضل يوجد ترجيرات خاصة بــ Record

 

وانا في الخدمة في أي سؤال

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

انا بعتذر عن التأخر عن كتابة باقي الدروس بسبب انقطاع الكهرباء للمدة 4 ايام بسبب الثلوج

 

وان شاء الله سأكمل باقي الدروس بداية الاسبوع القادم

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

اليوم موضوعنا عن شريط المهام الموجود في الفورم كتالي 

 

 

 

569727888.jpg

 

 

شريط المهام هذا موجود من شركة اوراكل يظهر عند عمل تنفيذ للبرنامج

 

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

 

وهذا الشريط يظهر للمستخدم عن التنفيذ

 

نريد ان نتعلم كيف نعمل شريط مهام خاص بنا بالشكل الذي نريد

 

ونتخلص من شريط المهام الخاص بأوراكل

 

 

 

 

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

بسم الله نبدأ

 

على فرض يوجد عندنا شاشة الموظفين كالتالي

 

474620052.jpg

 

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

 

نضيف Canvas جديدة ونسميها Canvas_Control كالتالي

 

469832168.jpg

 

 

ثم نضيف بلوك جديد  Manually ونسميه Block_Control كالتالي

 

518680253.jpg

 

ثم نذهب الى خصائص الــCanvas  ونغير بعض الخصائص كالتالي

 

 

329087665.jpg

وبعدها نعمل تنفيذ للبرنامج كالتالي

 

532494557.jpg

كما نلاحظ ظهر شريط المهام وباللون الاحمر لكن لا يوجد عليه اي ازرار (( كبسات ))

 

الان علينا اضافة كبسات التي نحتاجها في الشاشة 

 

على سبيل المثال نريد كبسة للخروج من الفورم وكبسة لأنشاء سجل جديد وكبسة تخزين  

 

نذهب الى الصفحة الخاصة بشاشة التحكم كتالي

 

246616452.jpg

 

 

ضفنا 3 كبسات على بلوك الخاص بالتحكم كالتالي

 

924555656.jpg

 

 

الان ندخل على خصائص كل كبسة ونغير بعض الخصائص كالتالي

 

كبسة الخروج من الفورم 

 

Name : b_exit

 

Label: Exit

 

Mouse Navigate :No

 

كبسة انشاء سجل جديد من الفورم 

 

Name : b_create

 

Label: Create

 

Mouse Navigate :No

 

 

 

كبسة التخزين من الفورم 

 

Name : b_save

 

Label: Save

 

Mouse Navigate :No

 

عند عمل تنفيذ للشاشة يكون عندنا هذا الشكل

 

729392605.jpg

 

كلام جميل ... لكن هذه الكبسات لا تعمل عند الضغط عليها

 

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

 

نذهب الى كل كبسة ونضيف ترجير جديد

 

يا ترى ما هو الترجير المطلوب

 

الترجبر المطلوب هو اسمه WHEN-BUTTON-PRESSED

 

ونكتب داخله هذا الكود

 

كبسة الخروج :الكود التالي

 exit_form;

كبسة اضافة سجل جديد :الكود التالي

create_record;

كبسة التخزين :الكود التالي

commit_form;

كما نرى الكود يدل على وظيفة كل كبسة .

 

نعمل تنفيذ ونجرب كل كبسة .

 

تم المطلوب بنجاح

 

 

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

 

وللتخلص من شريط المهام الخاص بأوركل

 

954850112.jpg

 

نذهب الى خصائص الفورم 

 

723039543.jpg

خاصية اسمها  Menu Module يوجد بجانبها DEFAULT&SMARTBAR كالتالي

 

نحذف DEFAULT&SMARTBAR كالتالي

 

 

695211674.jpg

 

ويكون الشكل النهائي كالتالي

 

395986775.jpg

 

تم اللازم والحمدلله

 

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

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

 

سنكمل اليوم باذن الله موضوع شريط المهام

 

يوجد كثير من الاكواد الجاهزة من اوراكل المستخدمة في شريط المهام

 

اهم هذه الاكواد 

 

 

857848711.jpg

 

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

 

 

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

 
Alerts : كم قلنا سابقا هو عبارة عن شاشة تحذيرية تظهر للمستخدم عند حدوث امر معين
 
ولكي نفهم موضوع الــ Alerts سنأخذ مثال 
 
اريد ان اعمل شاشة تحذيرية عند حذف سجل من شاشة الموظفين
 
على فرض يوجد شاشة خاصة بالموظفين كالتالي
 
715213948.jpg
 
كما نرى عند تنفيذ البرنامج لا ياتي بالبيانات بل يجب عمل تنفيذ استعلام
 
الامر مزعج ولحل هذه المشكلة يجب ان نكتب ترجيرعند تنفيذ البرنامج يأتي بالبيانات مباشرة
 
ما هو هذا الترجير وعلى أي مستوى  ...؟
 
نذهب الى الفورم ثم الى ترجير نضيف ترجير جديد اسمه WHEN-NEW-FORM-INSTANCE
 
يعني لما ادخل على الفورم ماذا اعمل 
 
ونكتب داخل الترجير هذا الكود
 
 execute_query;

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

 

761445627.jpg

 

 

 

كلام جميل نرجع الى موضوعنا الاساسي وهو Alerts

 

نذهب الى Alert من القائمة الرئيسية ونضغط اضافة +

 

362413227.jpg

 

 

 

ويخرج لنا هذا الشكل

 

597661687.jpg

 

 

 

 

نذهب الى خصائص الــ Alert الجديد عن طريق F4  ونغير بعض الخصائص كالتالي 

 

964749970.jpg

 

 

 

ثم نذهب الى شاشة الموظفين ونضيف Button جديد نسميه Delete Record كتالي 

 

168318457.jpg

 

ونضيف ترجير على هذا Button  واسمه WHEN-BUTTON-PRESSED

 

ونكتب داخل هذا الترجير هذا الكود

  declare
  n number;  	
  begin
  	n:=show_alert('DELETE_ALERT');
  	if n=alert_button1 then
  		delete_record;
  		commit;
  	end if;
  end;
  
 

ونعمل بعدها تنفيذ ونحدد سجل معين

 

ونكبس على كبسة Delete Record  وتكون هذه النتيجة

 

815736922.jpg

 

اذا كبسنا على Ok يحذف السجل

 

واذا كبسنا على cancel يخرج من الشاشة التحذيرية

 

تم اللازم والحمدلله

 

غدا ان شاء الله ساعطي مثال اخر على الــ Alert

 

 

 

 

 

 

 

 

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

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

 

ان شاء الله سنأخذ مثال جديد على موضوع الـــ Alert

 

ولكن قبل ذلك سنتحدث عن Alert Style وهي اشكال الــ Alert وهي

 

Stop 

 

320503332.jpg

 

Caution

778775000.jpg

 

 

Note

 

466646500.jpg

 

 

 

طبعا هذه فقط اشكال وتؤدي نفس الوظيفة

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

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

 

 

ان شاء الله سنأخذ مثال جديد على موضوع الـــ Alert

 

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

 

بلوك الاقسام وبلوك الموظفين كالتالي

 

904463705.jpg

 

ونريد عمل كبسة للحذف السجلات سواء في الماستر او الديتل

 

وعمل شاشة تنبيه عند عمل حذف

 

نعمل على اضافة بلوك خاص بكبسات التحكم بالشاشات كما تعلمنا في السابق كالتالي

 

471424784.jpg

 

الان نعمل على اضافة Alert جديد نفس المثال السابق 

 

الان نضيف Button جديد على بلوك التحكم ونسميه Delete Record

 

ونكتب داخله هذا الكود  

declare 
	n number;
	msg varchar2(20);
begin
	if :SYSTEM.CURSOR_BLOCK ='DEPT' THEN
		MSG:=:DNAME;
	ELSIF :SYSTEM.CURSOR_BLOCK ='EMP' THEN
			MSG:=:ENAME;
	END IF;
	SET_ALERT_PROPERTY('DEL_ALERT',ALERT_MESSAGE_TEXT,'Are Sure To Delete '||' '||msg||' '||'Record');
	n:=show_alert('DEL_ALERT');
if n = 1 then
delete_record;
 
 
end if;
end;

 

Cursor هو المؤشر ((الماوس ))

 

Cursor_block المؤشر على اي بلوك موجود

 

طبعا دائما وابداَ  بعد  SYSTEM  تكتب الاحرف كبيرة  

 

S :SYSTEM.CURSOR_BLOCK  تخزين مكان وقوف الماوس في أي بلوك

 

 

set_alert_property  صيغة كتابة مسج في الشاشة التحذيرية

 

 

'DEL_ALERT'  اسم الشاشة التحذيرية

 

 

 ALERT_MESSAGE_TEXT  جاهزة من اوراكل خاصة بحقل مسج الشاشة التحذيرية

 

'Are Sure To Delete '||' '||msg||' '||'Record'  الرسالة التي تظهر عند استدعاء الشاشة التحذيرية

 

طبعا هذا الكود يلغي الشاشة التحذيرية الاساسية وتخرج مكانها هذه الرسالة 

 

وعند عمل حذف لسجل من بلوك الاقسام لقسم ACCOUNTING تكون هذه النتيجة

 

699320831.jpg

 

وأذا عملنا حذف لسجل من بلوك الموظفين للموظف MARTIN تكون هذه النتيجة

 

530062074.jpg

 

 

تم اللازم والحمدلله

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

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

 

اليوم سنأخذ بعض الامثلة على الفورم 

 

على فرض عندي شاشة بالموظفين كالتالي

 

 

368380818.jpg

 

 

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

 

كلام جميل اريد ان اضع اسم القسم بجانب رقم القسم

 

اولا اقوم بأضافة DISPLAYITEM من القائمة واغير بعض الخصائص عن طريق F4 التالي

 

Name : DISP_DNAME

 

Data Type :Char

 

Maximum Length : 20

 

Data base Item : No

 

Prompt : Dept Name

 

Prompt Attachment Edge : Top

 

Prompt Alignment :Center

 

ويكون الشكل التالي 

 

667895197.jpg

 

 

طريقة استدعاء اسم القسم  عن طريق ترجير على مستوى البلوك اسمه POST-QUERY

 

نكتب داخله هذا الكود  



 select dname
 into :emp.DISP_DNAME
 from dept
 where deptno=:emp.deptno;

420414562.jpg

 

 

 

وتكون هذه النتيجة

 

 

289288211.jpg

 

 

 

 

 

 

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

مثال اخر اريد ان احسب درجة الراتب لكل الموظفين بجانب حقل الراتب

 

اولا اقوم بأضافة DISPLAYITEM من القائمة واغير بعض الخصائص عن طريق F4 التالي

 

Name : DISP_GRADE

 

Data Type :Number

 

Data base Item : No

 

Prompt : Grade

 

Prompt Attachment Edge : Top

 

Prompt Alignment :Center

 

ونكتب داخل نفس الترجير POST-QUERY هذا الكود

select GRADE
 into :DISP_GRADE
 from salgrade
 where :emp.sal between losal and hisal;
 
 

وتكون النتيجة 

 

161950112.jpg

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

طيب في حالة اضافة سجل جديد في جدول الموظفين

 

نعمل  Insert record وتكون هذه النتيجة

 

485966594.jpg

 

كما نرى المؤشر موجود في حقل رقم الموظف للتعبئة رقم الموظف

 

وهذا الكلام غير صحيح لانه ان لا اعرف جميع ارقام الموظفين واحتمال ان اكتب رقم موجود اصلا

 

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

 

اول نذهب الى خصائص حقل رقم الموظف  ونغير خاصية Item type الى

 

Item type : Display Item

 

ثم نذهب الى  ترجير PRE-INSERT على مستوى البلوك ونكتب داخله هذه الكود 


declare
	n number;
begin
	select max(empno)
	into n
	from emp;
	:empno := nvl(n,0)+1;
	end;

نعمل تنفيذ للفورم ثم نعمل Insert Record وتكون هذه النتيجة

 

 

264407370.jpg

 

 

كما نرى المؤشر في حقل اسم الموظف عند عمل اضافة سجل جديد 

 

 

ونعمل اضافة سجل جديد ونعمل تخزين وهذه النتيجة 

 

906931811.jpg

 

 

 

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

جزاك الله عنا كل خير وجعله في ميزان حسناتك

وإلى الأمام فكله في ميزان حسناتك وان شاء الله يكون علم نافع ينتفع به وهو مما ينفع المرء بعد موته

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

وأن يغفر لي ولوالدي وللمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والأموات

وكما جمعنا الله في دار الدنيا أن يجمعنا عنده في دار الآخرة في جنات النعيم

واصل ولا تنقطع أو تتوقف ولك خالص الشكر والتقدير

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

الله يبارك فيك يا اخي العزيز

 

والله يسلمك على هذا الدعاء الطيب

 

وان شاء الله مستمرين الى النهاية

 

وان شاء الله اوعدك بعد نهاية هذه الدروس ان تكون ملم بجميع امور الفورم 

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

مثال جديد : اريد ان اعمل فورم فيه بلوكين بلوك خاص بالموظفين وبلوك خاص بالاقسام

 

ويوجد زرين زر خاص بالموظفين وزر خاص بالاقسام 

 

عند الضغط على زر الموظفين يظهر بلوك الموظفين ويختفي بلوك الاقسام

 

وعند الضغط على زر الاقسام يظهر بلوك الاقسام ويختفي بلوك الموظفين

 

بسم الله نبدء 

 

ننشأ فورم جديد

 

ننشأ بلوك خاص بالاقسام من نوع Form يوجد فيه سجل واحد على canvas اسمه can_dept

106341051.jpg

 

ننشأ بلوك خاص بالموظفين من نوع Tabular فيه 5 سجلات على canvas اسمه can_emp

 

999265478.jpg

 

ننشأ بلوك خاص بكبسات التحكم  وننشأ كبستين كبسة اسمها Go Department وكبسة اسمها Go Employee

 

997902899.jpg

 

 

ونعطي هذه الخصائص لكل كبسة 

 

كبسة Go Employee نعطيها هذه الخصائص

 

Name : GO_EMP

 

label : Go Employee

 

Mouse Navigate : No

 

Visible : Yes

 

 

كبسة Go Department نعطيها هذه الخصائص

 

Name : GO_DEPT

 

label : Go Department

 

Mouse Navigate : No

 

Visible : No

 

نذهب الى كبسة Go Employee الى ترجير WHEN-BUTTON-PRESSED ونكتب هذا الكود  

go_block('emp');
 set_item_property('GO_EMP',VISIBLE,PROPERTY_FALSE);
 set_item_property('GO_DEPT',VISIBLE,PROPERTY_TRUE);
 set_item_property('GO_DEPT',ENABLED,PROPERTY_TRUE);
 

شرح الكود

 

127240906.jpg

 

 

ثم نذهب الى كبسة Go Department الى ترجير WHEN-BUTTON-PRESSED ونكتب هذا الكود  

go_block('DEPT');
 set_item_property('GO_DEPT',VISIBLE,PROPERTY_FALSE);
 set_item_property('GO_EMP',VISIBLE,PROPERTY_TRUE);
 set_item_property('GO_EMP',ENABLED,PROPERTY_TRUE);
 

شرح الكود

 

818459041.jpg

 

 

  

طبعا خاصية Enabled مرتبطة بخاصية  Visible في حالة True

 

يعني لما اعمل خاصية Visible : True  يجب ان اتبعها بخاصية Enabled  

 

وتكون النتيجة عند عمل تنفيذ كالتالي

 

146274092.jpg

 

 

وعند الكبس على Go Employee تكون النتيجة كالتالي 

 

586115110.jpg

 

 

 

وعند الكبس على Go Department تكون النتيجة كالتالي 

 

 

 

 

146274092.jpg

 

تم المطلوب والحمدلله

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

مثال جديد : اريد ان اعمل فورم فيه بلوك خاص بالموظفين 

 

واريد ان اعمل خاصية اخفاء واظهار وتعطيل حقل الراتب 

 

بسم الله نبدء 

 

ننشأ فورم جديد

 

ننشأ بلوك خاص بالموظفين من نوع Tabular فيه 5 سجلات كالتالي

 

 

646129575.jpg

ثم نقوم بأضافة  Radio Button ونذهب الى خصائصه عن طريق F4 ونغير التالي

 

 

Name : Rg_Sal

Database item : No

Number Of Record Displayed : 1

 

ونعمل على أضافة 3 Button ونعطيهم هذه الخصائص 

 

712382367.jpg

 

وهذا الشكل عند عمل تنفيذ

 

674045463.jpg

 

 

 

نذهب الى Rg_Sal وننشأ اسمه WHEN-RADIO-CHANGED ونكتب داخله هذا الكود  


 if :RG_SAL = 3 then
 	set_item_property('sal',visible,property_false);
 elsif :RG_SAL = 2 then
 set_item_property('sal',visible,property_true);
 set_item_property('sal',Enabled,property_false);
 else
 set_item_property('sal',visible,property_true);
 set_item_property('sal',Enabled,property_true);
 set_item_property('sal',navigable,property_true);
 set_item_property('sal',queryable,property_true);
 	set_item_property('sal',updateable,property_true);
 	end if;
 	

navigable :  معناها اني استطيع ان ادخل عليه من خلال الماوس

 

queryable : معناها اني استطيع ان اعمل استعلام في هذا الحقل

 

updateable : معناها اني استطيع ان اعمل تعديل في هذا الحقل

 

 

وعند عمل تنفيذ للفورم والضغط على Hide تكون هذه النتيجة 

 

 

717085482.jpg

 

كما نلاحظ حقل الراتب صار غير مرئي 

 

الان سنقوم بالضغط على Disable وتكون النتيجة كالتالي 

 

513663682.jpg

 

 

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

 

 

الان سنقوم بالضغط على  Show وتكون النتيجة كالتالي 

 

 

316148098.jpg

 

 

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

 

تم اللازم والحمدلله 

 

 

ان شاء الله اذا لم يكن هنالك اسئلة سنبدء غدا بشرح موضوع مهم جدا وهو  Program Units

 

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

موضوع اليوم عن Program Units

 

Program Units كما قلنا سابقا هي عبارة عن مجموعة Function و Procedure و Package

 

سنأخذ مثال على كل واحد

 

سسنبدء بأخذ مثال على Function 

 

بسم الله نبدء

 

اريد ان اكتب Function يحسب الراتب السنوي للموظفين 

نذهب الى  Program Units من القائمة ونضغط على +

 

ثم نحدد Function ونكتب اسمه Ann_sal ;كالتالي

 

277104114.jpg

ونكتب داخله هذا الكود

FUNCTION Ann_Sal (p_sal in number,p_comm in number)

RETURN number

IS

BEGIN
	
  return nvl(p_sal,0)*12+nvl(p_comm,0);
  
END;

 p_sal عبارة عن براميتر يدل على راتب الموظفين

 

p_comm عبارة عن براميتر يدل على زيادة الموظفين

 

return number الاقتران يرجع نوع القيمة رقم

 

return nvl(p_sal,0)*12+nvl(p_comm,0); القيمة التي يرجعها الاقتران

 

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

 

على فرض عندي شاشة خاصة بالموظفين كالتالي

 

770549498.jpg

 

اريد ان اضع حقل خاص بحساب الراتب السنوي

 

نعمل على اضافة Display item ونعطيه هذه المواصفات

 

Name : Ann_sal

 

Data Type : Number

 

Data base : No

 

Prompt :Annul Salary

 

Edge : Top

 

 

Alignment : Center

 

طريقة أستدعاء الــ Function  كالتالي

 

نذهب الى ترجير POST-QUERY  ونكتب داخله هذا الكود

 
 begin
 	:EMP.ANNUL_SALRY:=Ann_Sal (:emp.sal,:emp.comm);
 	end;

 

نعمل بعدها تنفيذ وتكون النتيجة

 

 

EMP.ANNUL_SALRY: مكان ارجاع قيمة الراتب السنوي 

 

Ann_Sal  اسم الــ Function

 

:emp.sal براميتر الراتب ياخذ قيمته من هنا

 

:emp.comm براميتر الزيادان يأخذ قيمته من هنا

 

 

 

143328171.jpg

 

 

 

 

 

 

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

 سنأخذ مثال جديد على الـــ  Procedure  

 

بسم الله نبدء

 

اريد ان اكتب Procedure ياتي بأسم القسم بجانب رقم القسم على الشاشة

 

نذهب الى  Program Units من القائمة ونضغط على +

 

ثم نحدد Procedure ونكتب اسمه Get_Dept كتالي

 

558056555.jpg

 

ونكتب داخله هذا الكود

PROCEDURE  Get_Dept (pno in number, pname out varchar2)

 IS
 
BEGIN
	
select dname

into pname

from dept

where deptno=pno; 

exception
	
	when others then
	
	pname := 'No Dept';
	
END; 

pno عبارة عن براميتر يدل على رقم القسم

 

pname عبارة عن براميتر يدل على أسم القسم 

 

وكما نعرف الاجراء ممكن ان يرجع قيمة او اكثر من قيمة او ولا قيمة

 

 

الان اضع حقل خاص بأسم القسم

 

نعمل على اضافة Display item ونعطيه هذه المواصفات

 

Name : N_dname

 

Data Type : Char

 

Data base : No

 

Prompt :Department

 

Edge : Top

 

Alignment : Center

 

طريقة أستدعاء الــ Procedure كالتالي 

 

نذهب الى ترجير POST-QUERY  ونكتب داخله هذا الكود

 

 

Get_Dept(:deptno,:N_DNAME);

نعمل بعدها تنفيذ وتكون النتيجة

 

819270689.jpg

 

 

المثال القادم عن الـــPackage

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

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

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

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

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

جاري التحميل



×
×
  • أضف...

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

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