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

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


miash80

Recommended Posts

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

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

  • miash80

    125

  • Bosaeed

    6

  • mohamed mustafa

    4

  • jedghaleb

    4

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

 

بسم الله نبدء

 

قبل ان نأخذ مثال سنشرح معنى Package

 

Package هو عبارة عن عملية تنظيمية ينظم عمل الــ Function و الــ Procedure

 

اريد ان اكتب Package  يوجد داخله الاقتران والاجراء السابقين 

 

طبعا الــ Package ننشئه على خطوتين

 

الخطوة الاولى Create_Spec  

 

 الخطوة الثانية Create_Body  

 

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

 

ثم نحدد Create_Spec  ونكتب اسمه Package_Emp  كتالي

 

402892640.jpg

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

PACKAGE Package_Emp IS

  function Ann_Sal (p_sal in number,p_comm in number)return number;
  
  procedure Get_Dept (pno in number, pname out varchar2);
  
END;

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

 

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

 

ثم نحدد Create_Body ونكتب اسمه Package_Emp  كتالي

 

209965589.jpg

 

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

PACKAGE BODY Package_Emp IS

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;  
  
  
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;

END;

في هذه الخطوة نكتب صيغة الاقترانات والاجراءات كاملة

 

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

 

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

:EMP.ANNUL_SALRY:=Package_Emp.Ann_Sal(:emp.sal,:emp.comm);
   
   Package_Emp.Get_Dept(:deptno,:N_DNAME);
 
 

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

 

339407045.jpg

 

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

 

أذا لم تكن هنالك اسئلة سنبدء غدا في موضوع مهم وهو PL/SQL Libraries

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

جزاك الله عنا كل خير

وجعل همتك دائما عالية لا تفتر ابدا

ورزقك الله من حيث لا تحتسب ولا تشاء رزقا حلالا طيبا

 

وغفر الله لنا ولك ولوالدينا وللمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات ذنوبنا وكفر عنا سيئاتنا

ورزقنا رحمته واحسن خاتمتنا اللهم امين

ما شاء الله عليك ارجو ان تواصل

لك جزيل الشكر

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

الله يبارك فيك يا اخي يا صهيب

 

وما اروع هذا الدعاء ولك بالمثل ان شاء الله

 

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

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

 

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

 

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

 

احد الــ Function أو الــ Procedure او الــPackage الموجودين على احد الفورم على فورم ثاني يجب 

 

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

 

الــ Function و الــ Procedure و الــPackage في مكان اقدر ان استخدمها في أي فورم اريد  

 

اتعرفون ما هذا المكان 

 

انـــــــهــــا   PL/SQL Libraries هي عبارة عن مكتبات تخزن فيها الــ Function و الــ Procedure و

 

الــPackage  ويمكن الاستفادة منها في أي فورم اريد .

 

نذهب الى PL/SQL Libraries ونعمل واحد جديد عن طريق + كالتالي

 

738471888.jpg

 

ثم نقوم بسحب  الــ Function و الــ Procedure و الــPackage الموجودين ونرميها داخل الــ  PL/SQL Libraries  الجديدة كالتالي

 

600311480.jpg

 

 

ثم نقوم بحذف  الــ Function و الــ Procedure و الــPackage من Program Units كالتالي

 

204271827.jpg

 

وبعدها نعمل تخزين لــــ PL/SQL Libraries الجديد كتالي

 

282991138.jpg

 

ولربط الفورم مع   PL/SQL Libraries نستخدم كما قلنا سابقا  Attached Libraries

 

نعمل أضافة جديدة Attached Libraries وعن طريق Browse نحدد PL/SQL Libraries

 

741944097.jpg

 

ونعمل  Attach ويخرج لنا مسج كالتالي 

 

 

772913628.jpg

نضغط على No 

 

الان نستطيع استخدام  الــ Function و الــ Procedure و الــPackage في أي فورم نريد

 

كل المطلوب بعدها فقط استدعاء  Attached Libraries في أي فورم اريد ان استخدم فيه Program Units 

 

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

 

اذا لم يكن هنالك اسئلة سنبدء بموضوع جديد وهو Visual Attribute 

                                           

 

 

 

 

 

 

 

 

 

 

 

 

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

السلام عليكم استاذ موسى

 

بعد ما نعمل Attached Libraries هل ستنشأ نسخة جديدة في Program Units

 

مقصدي، هل سنحتاج لملف المكتبة pll عندما ننقل الفورم لسيرفر آخر أو يجب ارفاقه في السيرفر الجديد ونحدد مسار لربطه بالفورم؟

 

 

وجزاك الله عنا كل خير ورزقك و إيانا من فضله

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

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

 

اخي الفاضل نحن نخزن الفورم والـــ   PL/SQL Libraries في نفس الملف

 

وبمجرد نقل هذا الملف الى اي مكان يشتغل مباشرة

 

أتمنى ان اكون اوصلت الفكرة

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

Visual Attribute مجموعة من الخصائص النظرية فقط نقوم ببنائها وتوريثها الى عناصر مختلفة

 

وللفهم الموضوع سناخذ مثال 

 

نذهب الى Visual Attribute ونضغط على + وتكون النتيجة كالتالي

 

933784754.jpg

 

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

 

731837827.jpg

 

 

ثم نذهب الى خصائص حقل الاسم عن طريق F4  الى خاصية Visual Attribute Group

 

ونحدد Visual Attribute الجديدة كالتالي

 

915748743.jpg

 

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

 

421652458.jpg

 

 

كما راينا يوجد  Visual Attribute Type وهي ثلاث انواع 

 

 

 

1 ) Common   : Fields

 

2 ) Prompt     : Labels

 

3 ) Title          : Frame 

 

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

 

Visual Attribute مجموعة من الخصائص النظرية مثل لون الكتابة

 

او لون الخلفية او حجم خط او نوعه ..... الخ من الخصائص النظرية

 

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

 

اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد ومهم جدا

 

الموضوع هو عن الــــ  Global 

 

 

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

 

اليوم سنقوم بشرح الــــ  Global  

 

الـــ  Global  هو عبارة عن متغير يعرف في مكان ما ويمكن منادته والتعديل على قيمته من مكان اخر

 

ليس لديه Data Type 

 

يعرف الـــ  Global داخل begin و end  وليس داخل declare و begin

 

طريقة تعريف الـــ  Global كتالي


:Global.Global_name := ;

على سبيل المثال

 


:Global.x := 10;

مثال أخر

 


:Global.x :=:emp.sal;

 

 

 الـــ  Global  معرف على مستوى الفورم  

 

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

 

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

 

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

 

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

 

خطوات العمل

 

اعمل فورم خاص بالموظفين واخزنه على بارتشن الــ C

 

 

571779039.jpg

 

اعمل فورم خاص بالاقسام واخزنه على بارتشن الــ C

 

380316855.jpg

 

اذهب الى فورم الاقسام الى ترجير جديد اسمه WHEN-NEW-FORM-INSTANCE

 

واكتب داخله execute_query;

 

ثم اذهب الى فورم الموظفين ثم الى بلوك الموظفين ثم الى خصائص البلوك عن طريق F4

 

نذهب الى خاصية  WHERE ClAuse ونكتب داخلها

 


deptno=nvl(:global.dno,deptno)

 

ثم نذهب الى فورم الاقسام الى بلوك الاقسام وننشا Button جديد نغير فيه هذه الخصائص

 

 

Name : Call

 

Lable : Call

 

Mouse Navigate : No

 

وننشأ ترجير للهذا الــ Button اسمه WHEN-BUTTON-PRESSED

 

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

 



:global.dno:=:deptno;
call_form('c:\emp');

 

نعمل تنفيذ لشاشة الاقسام ونضغط على كبسة Call وهذه النتيجة 

 

500488009.jpg

 

بعد  انشاء الفورم بأمتداد fmx نعمل تنفيذ لشاشة الاقسام ونضع شرط رقم القسم 10ونكبس على كبسة Call كتالي

 

 

624687562.jpg

 

 

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

 

441985449.jpg

 

نرجع الى شاشة الاقسام ونضع شرط رقم القسم 20 ونكبس على كبسة Call كتالي

 

295899556.jpg

 

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

 

795291042.jpg

 

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

 

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

 

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

 
موضوع اليوم عن  شاشة الاستعلام
 
شاشة الاستعلام هي شاشة نعملها بهدف البحث عن معلومات بشرط معين
 
ولفهم عمل شاشة الاستعلام سنأخذ بعض الامثلة
 
المثال الاول : نريد عمل شاشة استعلام  عن طريق رقم القسم كالتالي
 
على فرض يوجد عندنا شاشة خاصة بالموظفين كالتالي
 
530908494.jpg
 
نريد عمل شاشة استعلام عن طريق رقم القسم 
 
ننشأ بلوك جديد Manually ننشأ داخله حقل جديد نعطيه هذه الخصائص عن طريق F4
 
Name : Don
 
Data Type :Number
 
Database Item : No
 
ثم نذهب الى بلوك الموظفين الى خصائص حقل رقم القسم  ونغير خاصية Copy value from Item كالتالي
 
674981998.jpg
 
Copy value from Item معناها يأخذ قيمة للهذا الحقل من مكان اخر
 
 
نذهب الى حقل Don في شاشة الاستعلام وننشأ ترجير  اسمه KEY-NEXT-ITEM ونكتب داخله
 
go_block('emp');

execute_query;

وعند عمل تنفيذ البرنامج تكون النتيجة كالتالي
 
192099496.jpg
 
نذهب الى بلوك الاستعلام ونضع رقم القسم الذي نريد نستعلم عنه سناخذ على سبيل المثال رقم القسم 20 ثم نكبس Enter وتكون النتيجة كالتالي
797520789.jpg
 
تم اللازم والحمدلله 
 
 
 
المثال التاني: نريد عمل شاشة استعلام  عن طريق اسم  الموظف كالتالي
 
504207678.jpg
 
على فرض يوجد عندنا شاشة خاصة بالموظفين  
 
ننِشا بلوك جديد Manually ننشأ داخله حقل جديد نعطيه هذه الخصائص عن طريق F4
 
Name : Nam
 
Data Type :char
 
Database Item : No
 
ثم نذهب الى بلوك الموظفين الى خصائص حقل  اسم القسم  ونغير خاصية Copy value from Item كالتالي
 
311522102.jpg
 
ذهب الى حقل Don في شاشة الاستعلام وننشأ ترجير  اسمه KEY-NEXT-ITEM ونكتب داخله
 
 
begin

:ena:='%'||:ena||'%';

go_block('emp');

execute_query;

end;
 
وعند عمل تنفيذ البرنامج تكون النتيجة كالتالي
 
نذهب الى بلوك الاستعلام ونضع  اسم الموظف الذي نريد نستعلم عنه سناخذ على سبيل المثال  MARTIN  ثم نكبس Enter وتكون النتيجة كالتالي
 
646509208.jpg
 
تم اللازم والحمدلله 
 
 
المثال الثالث: نريد عمل شاشة استعلام عن طريق تحديد الراتب بين رقمين الموظف كالتالي
 
897816849.jpg
 
على فرض يوجد عندنا شاشة خاصة بالموظفين  
 
ننشأ بلوك جديد Manually ننشأ داخله حقلين جديد نعطيهم هذه الخصائص عن طريق F4
 
الحقل الاول
 
Name : Hisal
 
Data Type :Number
 
Database Item : No
 
الحقل الثاني
 
Name : Losal
 
Data Type :Number
 
Database Item : No
 
ثم نذهب الى خصائص بلوك الموظفين الى خاصية Where Clause ونكتب داخلها التالي 
 
SAL BETWEEN NVL(:BLOCKQ.HISAL,0) AND NVL(:BLOCKQ.LOSAL,9999)
 
808325964.jpg
 
ثم ننشأ Button جديد نسميه Go وننشأ ترجير عليه WHEN-BUTTON-PRESSED ونكتب داخله
 
 
 
	
go_block('emp');

execute_query;
 

 

وعند عمل تنفيذ البرنامج نذهب الى بلوك الاستعلام ونحدد رقمين على سبيل المثال نريد الرواتب
 
 بين 1000 و 2000  ثم نكبس Enter وتكون النتيجة كالتالي
 
 
 
436493615.jpg
 
تم اللازم والحمدلله 
 
 
 
رابط هذا التعليق
شارك

 

اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد ومهم جدا

 

الموضوع هو عن الــــ  Menus 

 

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

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

 

اخوي موسى في المثال الثاني عندما نستعلم عن طريق اسم الموظف، هل لو كتبت اسم الموظف بحروف صغيرة راح يظهر نفس النتيجة؟ أو يجب ان تكون حالة الحروف مطابقة؟

 

وإذا يجب مطابقة حالة الحروف هل يوجد طريقة لتفاديها؟

 

هل نستطيع استخدام UPPER مع ما يدخله اليوزر بحيث مهما كان المكتوب يتحول إلى نفس حالة حروف العمود؟

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

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

 

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

 

ولك بالمثل ان شاء الله

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

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

 

اخوي موسى في المثال الثاني عندما نستعلم عن طريق اسم الموظف، هل لو كتبت اسم الموظف بحروف صغيرة راح يظهر نفس النتيجة؟ أو يجب ان تكون حالة الحروف مطابقة؟

 

وإذا يجب مطابقة حالة الحروف هل يوجد طريقة لتفاديها؟

 

هل نستطيع استخدام UPPER مع ما يدخله اليوزر بحيث مهما كان المكتوب يتحول إلى نفس حالة حروف العمود؟

 

 

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

 

اهلا باخي العزيز 

 

 هل لو كتبت اسم الموظف بحروف صغيرة راح يظهر نفس النتيجة؟  

 

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

 

أو يجب ان تكون حالة الحروف مطابقة؟

 

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

 

 

وإذا يجب مطابقة حالة الحروف هل يوجد طريقة لتفاديها؟

 

 طبعا يوجد طريقة اخي العزيز

 

هل نستطيع استخدام UPPER مع ما يدخله اليوزر بحيث مهما كان المكتوب يتحول إلى نفس حالة حروف العمود؟

 

 طبعا نستطيع يا اخي العزيز

 

 

ما عليك سو ان تضيف على الكود داخل  ترجير  KEY-NEXT-ITEM

begin
	
:BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA);
	
:ena:='%'||:ena||'%';

go_block('emp');

execute_query;

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

للتوضيح الكود  فقط 

begin
	
:BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA);
	
:ena:='%'||:ena||'%';

go_block('emp');

execute_query;

end;

وضعنا هذا الكود  

:ena:='%'||:ena||'%'; 

لكي يأخذ أي جزء من الاسم

 

يعني على فرض وضعت sc  فقط وكبست Enter  تكون كالتالي 

 

161116854.jpg

 

 

 

مثال اخر على فرض وضعنا حرف  a  كالتالي 

 

 

305702935.jpg

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

جميل يا استاذ موسى

 

في حالة اردنا تحويل النص المدخل إلى حالة الحروف الكبيرة نستخدم الكود الي وضعته انت بارك الله فيك

begin
    
:BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA);
    
:ena:='%'||:ena||'%';

go_block('emp');

execute_query;

end;

طيب لو في حالة انه لدي عمود ENAME يحتوي قيم من الحالتين(حروف كبيرة وصغيرة) مثل Scott أو Martin

 

هل الكود سيكون هكذ؟


begin
    
:BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA);
    
:ena :='%'||:ena||'%';

go_block('emp');

UPPER(BLOCKQ.emp.ENAME);

execute_query;

end;

حاولت تحويل قيم العمود ENAME إلى حالة الحروف الكبيرة، هل طريقتي صحيحة؟

 

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

 

الموضوع اليوم هو عن الـــ Menus

 

لنأخذ مثال على تكوين القوائم

 

نذهب الى Menus ونعمل أنشاء + كالتالي

 

138354122.jpg

 

نعمل اعادة تسمية  My_Menus

 

ننقر على My_Menus مرتين (دبل كليك)

 

تفتح لنا نافذة جديدة لستخدم لتكوين القوائم كالتالي

 

801103406.jpg

 

في مكان <New_Item>  نكتب اول اسم قائمة وعلى سبيل المثال سنكتب  File

 

 

936272254.jpg

 

 

 

الان نريد عمل قوائم كما في الشكل التالي

 

545424446.jpg

 

نضع الماوس على File ثم نضغط على أضافة قائمة للأسفل ونحدد Save

 

ثم نضغط مرة اخرى على أضافة قائمة للأسفل ونحدد Exit

 

ثم نضع الماوس على File نضغط على أضافة قائمة لليمين ونحدد Edit 

 

ثم نضع الماوس على Edit ثم نضغط على أضافة قائمة للأسفل ونحدد Copy

 

وـــــــــ و Cut وـــــــــ و Past على نفس الترتيب

 

ثم نضع الماوس على Edit ثم نضغط على أضافة لليمين ونحدد  Hr

 

ثم نضع الماوس على Hr ثم نضغط على أضافة قائمة للأسفل ونحدد Emp  و Dept على نفس الترتيب

 

طبعا نحدد كل اسم عن طريق F4 ندخل على حقل الاسم  Name ونغير الاسم كما نريد

 

ـــــــــ  عبارة عن خط فاصل بين القوائم

 

الان نعمل تحديد وظيفة القوائم 

 

نذهب الى خصائص كل قائمة عن طريق F4 

 

يوجد في الخصائص خاصية اسمها Menu Item Type

 

وهي خمسة انواع 

 

Plain وهي عبارة عن مربع فاضي (عنوان) لما اكبس عليه لا يعمل أي شيئ

 

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

 

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

 

 Separator  وهو عبارة عن خط فاصل بين القوائم

 

Magic هي عبارة عن شغلات جاهزة مثل Copy و Cut  و Past  ... الخ

 

على فرض عندي فورمين Emp وDept موجودين على بارتشن الــ C

 

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

 

271683328.jpg

 

كما نرى يوجد امرين للأستدعاء الفورم  Call_Form  و New_Form 

 

يوجد فرق بين هذين الامرين

 

Call_Form  :  يفتح الفورمات فوق بعض عند استدعاء اكثر من فورم ويأخذ مواصفات الفورم القديم

 

New_Form  : يفتح الفورم الجديد ويغلق الفورم الاصلي ويأخذ مواصفات الفورم الجديد

 

الان نعمل تخزين للقائمة الجديدة عن طريق Save As يكون الشكل التالي

 

231247897.jpg

 

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

 

ونذهب الى خصائص هذا الفورم عن طريق F4 كالتالي 

 

378209865.jpg

 

نذهب الى خاصية Menu Module عن طريق هذه الخاصية نحدد القائمة التي ستظهر

 

و DEFAULT&SMARTBAR  محددة من اوراكل 

 

وممكن ان نضع DEFAULT من غير SMARTBAR

 

ولكن لا نستطيع ان نضع SMARTBAR من غير DEFAULT 

 

ولكي نشغل القائمة الجديدة ما علينا سو ان نضع مكان DEFAULT&SMARTBAR

 

اسم القائمة الجديدة مع موقعها كالتالي  C:\MY_MENUS.mmx

 

907867994.jpg

 

 

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

 

467694848.jpg

 

 

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

 

 

 

 

 

 

 

 

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

جميل يا استاذ موسى

 

في حالة اردنا تحويل النص المدخل إلى حالة الحروف الكبيرة نستخدم الكود الي وضعته انت بارك الله فيك

begin
    
:BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA);
    
:ena:='%'||:ena||'%';

go_block('emp');

execute_query;

end;

طيب لو في حالة انه لدي عمود ENAME يحتوي قيم من الحالتين(حروف كبيرة وصغيرة) مثل Scott أو Martin

 

هل الكود سيكون هكذ؟


begin
    
:BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA);
    
:ena :='%'||:ena||'%';

go_block('emp');

UPPER(BLOCKQ.emp.ENAME);

execute_query;

end;

حاولت تحويل قيم العمود ENAME إلى حالة الحروف الكبيرة، هل طريقتي صحيحة؟

 

 

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

update emp
set ename= upper(ename);

 

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

الموضوع اليوم هو عن الـــ Popup Menu

 

 

 

Popup Menu هي عبارة عن قائمة تخرج عندما اكبس رايت كليك

 

 

Popup Menu خاصة بالـــ Canvas والــــ Item .

 

 

ولفهم الموضوع اكثر سنأخذ مثال

 

 

نذهب الى Popup Menu ونعمل أنشاء + كالتالي

 

 

727757423.jpg

 

نعمل اعادة تسمية  MY_POPUP_MENU

 

ننقر على MY_POPUP_MENU مرتين (دبل كليك)

 

تفتح لنا نافذة جديدة تستخدم لتكوين القوائم كالتالي

 

959446337.jpg

 

في مكان <New_Item>  نكتب اول اسم قائمة وعلى سبيل المثال سنكتب  File

 

 

901213240.jpg

 

 

الان نريد عمل قوائم كما في الشكل التالي

 

819023685.jpg

عملية ربط القائمة او استدعائها لـــ Item كالتالي

 

نذهب الى خصائص حقل Ename الى خاصية Popup Menu ونحدد القائمة كالتالي

 

 230430780.jpg

 

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

 

653349126.jpg

 

 

653349126.jpg

 

 

 

عملية ربط القائمة او استدعائها لـــ Canvas كالتالي

 

 

نذهب الى خصائص حقل Canvas الى خاصية Popup Menu ونحدد القائمة كالتالي

 

 

419905110.jpg

نعمل تنفيذ للفورم الموظفين ونذهب الى أي مكان فاضي في الصفحة

 

ونكبس رايت كليك كالتالي

 

825808921.jpg

 

 

 

331514699.jpg

 

 

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

 

 

اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد

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

 

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

 

 موضوع اليوم خفيف و مهم جدا  عن الــــ  Object Group

 

Object Group هي عبارة عن حقيبة أضع فيها أي شيئ موجود داخل Object Navigator

 

بهدف توريث هذه الحقيبة للفورمات اخرى 

 

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

 

(Block,Canvas,Window,Trigger,Alert,Item,...Ex )

 

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

 

و Canvas و Window  ومواصفات معينة في الحقل كالتالي

 

نذهب الى فورم جديد نسميه Control_Form وننشأ Window جديد نسميه Control_block

 

ثم ننشأ Canvas جديد نسميه Control_Canvas

 

ثم  ننشأ بلوك جديد نسميه Control_Block

 

ونضع داخله 3 كبسات ( كبسة حذف وكبسة تخزين وكبسة خروج)

 

ثم ننشأ Visual Attributes جديد نسميه Control_Visual_Att

 

 ونغير فيه بعض الخصائص مثل لون الكتابة ولون الخلفية

 

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

 

709106298.jpg

 

كلام جميل

 

الان لعمل الحقيبة نذهب الى Object Group ونعمل أنشاء عن طريق +

 

 ونسميها CONTROL_OBJECT_GROUP 

 

 

 

623967079.jpg

 

 

الان كل ما علينا سو ان نسحب أي شيئ نريد داخل الحقيبة بأتجاه CONTROL_OBJECT_GROUP  كالتالي

 

665050187.jpg

 

نعمل على تخزين هذا الفورم 

 

نريد الان توريث هذه الحقيبة الى فورم اخر

 

نفتح فورم جديد  

 

570237075.jpg

 

 

 

 

 

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

 

309641844.jpg

 

نكبس على Copy  وتكون النتجة كتالي

 

 

318530666.jpg

 

 

 

 

نغلق الفورم الخاص بحقيبة التوريث ونبدء نعمل على الفورم الجديد 

 

يعني على سبيل المثال نريد بلوك خاص بالموظفين في الفورم الجديد كتالي

 

314822331.jpg

 

 واريد ان اورث الخصائص الموجودة في CONTROL_VISUAL_ATT الى حقل الاسم والراتب  

 

نذهب الى خصائص هذين الحقلين الى خاصية Visual Attributes Group ونحدد CONTROL_VISUAL_ATT كالتالي

 

533215961.jpg

 

 

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

 

397562799.jpg

 

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

 

اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد وهو  Key Trigger

 

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

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

 

سنأخذ مثال على فرض عندي بلوك خاص بالموظفين

 

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

 

218240371.jpg

 

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

 

885234743.jpg

 

اريد عندما اكبس على سهم النزول لما اصل لاخر سجل يرجع لاول سجل

 

واريد عندما  اكبس على سهم الطلوع لما اصل لاول يرجع لاخر سجل

 

نذهب الى فورم وننشأ ترجير اسمه KEY-UP ونكتب داخله هذا الكود

  declare
	v varchar2(100);
begin
	 
	 if :SYSTEM.CURSOR_RECORD ='1' THEN
	 	V := :SYSTEM.CURSOR_ITEM;
	 	LAST_RECORD;
	 	GO_ITEM('V');
	 ELSE
	 	UP;
	 END IF;
	 END; 

ثم نذهب الى فورم وننشأ ترجير اسمه KEY-DOWN ونكتب داخله هذا الكود

 declare
	v varchar2(100);
begin
	 
	 if :SYSTEM.LAST_RECORD ='TRUE' THEN
	 	V := :SYSTEM.CURSOR_ITEM;
	 	FIRST_RECORD;
	 	GO_ITEM('V');
	 ELSE
	 	DOWN;
	 END IF;
END; 

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

 

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

208498117.jpg

 

عندما اكبس على سهم الطلوع لما اصل لاول سجل يرجع لاخر سجل كالتالي

 

490916215.jpg

 

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

 

للرؤية وظيفة Key الاصلية اعمل تنفيذ للفورم ثم أذهب الى help ثم Keys كالتالي

 

828487056.jpg

 

وعند الضغط على Keys تكون النتيجة كالتالي

 

447642304.jpg

 

 

اريد ان اغير بعض وظائف هذه الــ keys على سبيل المثال 

 

F6 وظيفتها انشاء سجل جديد كالتالي

 

400950354.jpg

 

اريد ان اغير وظيفة F6 الى  التحرك الى السجل الي بعده 

 

 نذهب الى فورم وننشأ ترجير اسمه KEY-CREREC ونكتب داخله هذا الكود

NEXT_RECORD;

اعمل تنفيذ للبرنامج ثم اضغط F6  تكون النتيجة كالتالي

 

324854799.jpg

 

 

مثال اخر

 

F1 وظيفتها اخرج قائمة Help  كالتالي

 

610314122.jpg

 

اريد ان اغير وظيفة F1 الى الخروج من البرنامج

 

 

 نذهب الى فورم وننشأ ترجير اسمه KEY-HELP ونكتب داخله هذا الكود

EXIT_FORM;

اعمل تنفيذ للبرنامج ثم اضغط F1  تكون النتيجة كالتالي

 

541211086.jpg

 

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

 

كما نرى نستطيع ان نتحكم بوظائف الــ Keys كما نريد

 

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

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

موضوع اليوم هو عن الــــ  Tab Canvas
 
كما قلنا في السابق
 
Tab  يكون في الصفحة اكثر بلوك وتظهر في الاعلى لتنقل بين البلوك 
 
سنأخذ مثال للشرح الموضوع 
 
نذهب ونفتح فورم جديد ونضيف بلوك جديد خاص بالاقسام
 
وعندما نصل الى شاشة تحديد الــ Canvas كالتالي
 
551642049.jpg
 
نحدد نوع الــ Canvas بــ  Tab
 
ثم نكمل اضافة بلوك الاقسام ويكون الشكل التالي
 
 
666885978.jpg
 
ثم نذهب ونضيف بلوك جديد خاص بالموظفين 
 
وعندما نصل الى شاشة تحديد الــ Canvas نعمل التالي
 
498134401.jpg
 
 
ثم نكمل اضافة بلوك الموظفين ويكون الشكل التالي
 
304445807.jpg
 
 
ثم نعمل اعادة تسمية كل Page حسب اسم البلوك حسب الاتي
 
835088694.jpg
 
وتكون النتيجة كالتالي 
 
 
617438548.jpg
 
 
اريد ان اكتب كود وظيفته كل ما انقل من Page الى اخر يعمل تنفيذ للبلوك
 
 
نذهب الى فورم ثم ترجير جديد اسمه WHEN-TAB-PAGE-CHANGED ونكتب داخله هذا الكود
 
 
    IF :SYSTEM.TAB_NEW_PAGE ='EMP'THEN
  	GO_BLOCK('EMP');
  	EXECUTE_QUERY;
  	
  	ELSIF :SYSTEM.TAB_NEW_PAGE ='DEPT'THEN
  	GO_BLOCK('DEPT');
  	EXECUTE_QUERY;
  	END IF;
  	

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

 

865925561.jpg

 

وعند تغير الــ Page  تكون النتيجة

 

903073722.jpg

 

 

 

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

 

 

اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد

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

موضوع اليوم هو عن الــــ  Editors
 
كما قلنا في السابق الــــ  Editors محررالنصوص يشبه الــ Notepad 
 
سنأخذ مثال للشرح الموضوع 
 
على فرض عندي فورم خاص بالموظفين 
 
أذهب الى  Editors ثم اعمل أنشاء عن طريق  +
 
ثم اغير في خصائص  Editors الجديد كالتالي
 
 
949837332.jpg
 
 
ثم أذهب الى خصائص حقل Ename الى خاصية  Editor ونحدد MY_EDITORS
 
ثم نعمل تنفيذ للبرنامج ثم أذهب الى حقل Ename واكبس Ctrl+E  وتكون النتيجة كالتالي
 
173072264.jpg
 
اريد بمجرد الدخول على حقل الاسم ان ياتي بالـــ Editor
 
نذهب الى حقل ename ثم ننشأ ترجير اسمه  ونكتب داخله هذا الكود
 

 edit_textitem;

 

 طبعا هذا الكود جاهز من اوراكل

 

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

 

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

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

 

موضوع اليوم هو عن الــــ  Tab Canvas
 
كما قلنا في السابق
 
Tab  يكون في الصفحة اكثر بلوك وتظهر في الاعلى لتنقل بين البلوك 
 
سنأخذ مثال للشرح الموضوع 
 
نذهب ونفتح فورم جديد ونضيف بلوك جديد خاص بالاقسام
 
وعندما نصل الى شاشة تحديد الــ Canvas كالتالي
 
551642049.jpg
 
نحدد نوع الــ Canvas بــ  Tab
 
ثم نكمل اضافة بلوك الاقسام ويكون الشكل التالي
 
 
666885978.jpg
 
ثم نذهب ونضيف بلوك جديد خاص بالموظفين 
 
وعندما نصل الى شاشة تحديد الــ Canvas نعمل التالي
 
498134401.jpg
 
 
ثم نكمل اضافة بلوك الموظفين ويكون الشكل التالي
 
304445807.jpg
 
 
ثم نعمل اعادة تسمية كل Page حسب اسم البلوك حسب الاتي
 
835088694.jpg
 
وتكون النتيجة كالتالي 
 
 
617438548.jpg
 
 
اريد ان اكتب كود وظيفته كل ما انقل من Page الى اخر يعمل تنفيذ للبلوك
 
 
نذهب الى فورم ثم ترجير جديد اسمه WHEN-TAB-PAGE-CHANGED ونكتب داخله هذا الكود
 
 
    IF :SYSTEM.TAB_NEW_PAGE ='EMP'THEN
  	GO_BLOCK('EMP');
  	EXECUTE_QUERY;
  	
  	ELSIF :SYSTEM.TAB_NEW_PAGE ='DEPT'THEN
  	GO_BLOCK('DEPT');
  	EXECUTE_QUERY;
  	END IF;
  	

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

 

865925561.jpg

 

وعند تغير الــ Page  تكون النتيجة

 

903073722.jpg

 

 

 

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

 

 

اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد

 

يعطيك العافيه اخوي

سؤال عندي اذا كان التاب الاول لادخال بيانات مثل بيانات العميل

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

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

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

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

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

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

جاري التحميل



×
×
  • أضف...

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

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