miash80 بتاريخ: 6 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 6 يناير 2014 أتمنى في حالة عدم أستيعاب أي شيئ السؤال اول بأول 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 6 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 6 يناير 2014 (معدل) سنأخذ مثال جديد على الـــ Package بسم الله نبدء قبل ان نأخذ مثال سنشرح معنى Package Package هو عبارة عن عملية تنظيمية ينظم عمل الــ Function و الــ Procedure اريد ان اكتب Package يوجد داخله الاقتران والاجراء السابقين طبعا الــ Package ننشئه على خطوتين الخطوة الاولى Create_Spec الخطوة الثانية Create_Body نذهب الى Program Units من القائمة ونضغط على + ثم نحدد Create_Spec ونكتب اسمه Package_Emp كتالي ونكتب داخله هذا الكود 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 كتالي ونكتب داخله هذا الكود 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); وعند عمل تنفيذ البرنامج تكون النتيجة كالتالي تم اللازم والحمدلله أذا لم تكن هنالك اسئلة سنبدء غدا في موضوع مهم وهو PL/SQL Libraries تم تعديل 6 يناير 2014 بواسطة miash80 3 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
suhaieb بتاريخ: 6 يناير 2014 تقديم بلاغ مشاركة بتاريخ: 6 يناير 2014 جزاك الله عنا كل خير وجعل همتك دائما عالية لا تفتر ابدا ورزقك الله من حيث لا تحتسب ولا تشاء رزقا حلالا طيبا وغفر الله لنا ولك ولوالدينا وللمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات ذنوبنا وكفر عنا سيئاتنا ورزقنا رحمته واحسن خاتمتنا اللهم امين ما شاء الله عليك ارجو ان تواصل لك جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 7 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 يناير 2014 الله يبارك فيك يا اخي يا صهيب وما اروع هذا الدعاء ولك بالمثل ان شاء الله وان شاء الله مستمرين اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 8 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 8 يناير 2014 كما قلنا سابقاً الــ Program Units هي عبارة عن مجموعة من Function و Procedure و Package على مستوى الفورم الواحد يعني لا تستخدم الا على الفورم الذي أنشئت عليه يعني أذا اردت ان استخدم احد الــ Function أو الــ Procedure او الــPackage الموجودين على احد الفورم على فورم ثاني يجب علي اعادة كتابته مرة اخرى على الفورم الجديد وهذا الكلام غير عملي ولحل هذه المشكلة نقوم بوضع هذه الــ Function و الــ Procedure و الــPackage في مكان اقدر ان استخدمها في أي فورم اريد اتعرفون ما هذا المكان انـــــــهــــا PL/SQL Libraries هي عبارة عن مكتبات تخزن فيها الــ Function و الــ Procedure و الــPackage ويمكن الاستفادة منها في أي فورم اريد . نذهب الى PL/SQL Libraries ونعمل واحد جديد عن طريق + كالتالي ثم نقوم بسحب الــ Function و الــ Procedure و الــPackage الموجودين ونرميها داخل الــ PL/SQL Libraries الجديدة كالتالي ثم نقوم بحذف الــ Function و الــ Procedure و الــPackage من Program Units كالتالي وبعدها نعمل تخزين لــــ PL/SQL Libraries الجديد كتالي ولربط الفورم مع PL/SQL Libraries نستخدم كما قلنا سابقا Attached Libraries نعمل أضافة جديدة Attached Libraries وعن طريق Browse نحدد PL/SQL Libraries ونعمل Attach ويخرج لنا مسج كالتالي نضغط على No الان نستطيع استخدام الــ Function و الــ Procedure و الــPackage في أي فورم نريد كل المطلوب بعدها فقط استدعاء Attached Libraries في أي فورم اريد ان استخدم فيه Program Units تم المطلوب والحمدلله اذا لم يكن هنالك اسئلة سنبدء بموضوع جديد وهو Visual Attribute 3 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Bosaeed بتاريخ: 8 يناير 2014 تقديم بلاغ مشاركة بتاريخ: 8 يناير 2014 السلام عليكم استاذ موسى بعد ما نعمل Attached Libraries هل ستنشأ نسخة جديدة في Program Units مقصدي، هل سنحتاج لملف المكتبة pll عندما ننقل الفورم لسيرفر آخر أو يجب ارفاقه في السيرفر الجديد ونحدد مسار لربطه بالفورم؟ وجزاك الله عنا كل خير ورزقك و إيانا من فضله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 8 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 8 يناير 2014 وعليكم السلام ورحمةالله وبركاته اخي الفاضل نحن نخزن الفورم والـــ PL/SQL Libraries في نفس الملف وبمجرد نقل هذا الملف الى اي مكان يشتغل مباشرة أتمنى ان اكون اوصلت الفكرة 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 13 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 يناير 2014 Visual Attribute مجموعة من الخصائص النظرية فقط نقوم ببنائها وتوريثها الى عناصر مختلفة وللفهم الموضوع سناخذ مثال نذهب الى Visual Attribute ونضغط على + وتكون النتيجة كالتالي نذهب الى الخصائص عن طريق F4 ونغير بعض الخصائص كالتالي ثم نذهب الى خصائص حقل الاسم عن طريق F4 الى خاصية Visual Attribute Group ونحدد Visual Attribute الجديدة كالتالي وبعدها نعمل تنفيذ وتكون النتيج كالتالي كما راينا يوجد Visual Attribute Type وهي ثلاث انواع 1 ) Common : Fields 2 ) Prompt : Labels 3 ) Title : Frame وكل واحدة مختصة بشيئ معين بجانبها Visual Attribute مجموعة من الخصائص النظرية مثل لون الكتابة او لون الخلفية او حجم خط او نوعه ..... الخ من الخصائص النظرية تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد ومهم جدا الموضوع هو عن الــــ Global 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 اليوم سنقوم بشرح الــــ Global الـــ Global هو عبارة عن متغير يعرف في مكان ما ويمكن منادته والتعديل على قيمته من مكان اخر ليس لديه Data Type يعرف الـــ Global داخل begin و end وليس داخل declare و begin طريقة تعريف الـــ Global كتالي :Global.Global_name := ; على سبيل المثال :Global.x := 10; مثال أخر :Global.x :=:emp.sal; الـــ Global معرف على مستوى الفورم ولكي نفهم الموضوع اكثر سنأخذ مثال على ذلك نريد عمل فورمين فورم خاص بالاقسام وفورم خاص بالموظفين واريد ان اضع كبسة في فورم الاقسام لما اكبس عليها يأتي بشاشة الموظفين ويأخذ شرط أي رقم قسم موجود في فورم الاقسام مع تنفيذ الشرط خطوات العمل اعمل فورم خاص بالموظفين واخزنه على بارتشن الــ C اعمل فورم خاص بالاقسام واخزنه على بارتشن الــ C اذهب الى فورم الاقسام الى ترجير جديد اسمه 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 وهذه النتيجة بعد انشاء الفورم بأمتداد fmx نعمل تنفيذ لشاشة الاقسام ونضع شرط رقم القسم 10ونكبس على كبسة Call كتالي والنتيجة كالتالي نرجع الى شاشة الاقسام ونضع شرط رقم القسم 20 ونكبس على كبسة Call كتالي والنتيجة كالتالي تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد وهو شاشة الاستعلام 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 موضوع اليوم عن شاشة الاستعلام شاشة الاستعلام هي شاشة نعملها بهدف البحث عن معلومات بشرط معين ولفهم عمل شاشة الاستعلام سنأخذ بعض الامثلة المثال الاول : نريد عمل شاشة استعلام عن طريق رقم القسم كالتالي على فرض يوجد عندنا شاشة خاصة بالموظفين كالتالي نريد عمل شاشة استعلام عن طريق رقم القسم ننشأ بلوك جديد Manually ننشأ داخله حقل جديد نعطيه هذه الخصائص عن طريق F4 Name : Don Data Type :Number Database Item : No ثم نذهب الى بلوك الموظفين الى خصائص حقل رقم القسم ونغير خاصية Copy value from Item كالتالي Copy value from Item معناها يأخذ قيمة للهذا الحقل من مكان اخر نذهب الى حقل Don في شاشة الاستعلام وننشأ ترجير اسمه KEY-NEXT-ITEM ونكتب داخله go_block('emp'); execute_query; وعند عمل تنفيذ البرنامج تكون النتيجة كالتالي نذهب الى بلوك الاستعلام ونضع رقم القسم الذي نريد نستعلم عنه سناخذ على سبيل المثال رقم القسم 20 ثم نكبس Enter وتكون النتيجة كالتالي تم اللازم والحمدلله المثال التاني: نريد عمل شاشة استعلام عن طريق اسم الموظف كالتالي على فرض يوجد عندنا شاشة خاصة بالموظفين ننِشا بلوك جديد Manually ننشأ داخله حقل جديد نعطيه هذه الخصائص عن طريق F4 Name : Nam Data Type :char Database Item : No ثم نذهب الى بلوك الموظفين الى خصائص حقل اسم القسم ونغير خاصية Copy value from Item كالتالي ذهب الى حقل Don في شاشة الاستعلام وننشأ ترجير اسمه KEY-NEXT-ITEM ونكتب داخله begin :ena:='%'||:ena||'%'; go_block('emp'); execute_query; end; وعند عمل تنفيذ البرنامج تكون النتيجة كالتالي نذهب الى بلوك الاستعلام ونضع اسم الموظف الذي نريد نستعلم عنه سناخذ على سبيل المثال MARTIN ثم نكبس Enter وتكون النتيجة كالتالي تم اللازم والحمدلله المثال الثالث: نريد عمل شاشة استعلام عن طريق تحديد الراتب بين رقمين الموظف كالتالي على فرض يوجد عندنا شاشة خاصة بالموظفين ننشأ بلوك جديد 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) ثم ننشأ Button جديد نسميه Go وننشأ ترجير عليه WHEN-BUTTON-PRESSED ونكتب داخله go_block('emp'); execute_query; وعند عمل تنفيذ البرنامج نذهب الى بلوك الاستعلام ونحدد رقمين على سبيل المثال نريد الرواتب بين 1000 و 2000 ثم نكبس Enter وتكون النتيجة كالتالي تم اللازم والحمدلله 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد ومهم جدا الموضوع هو عن الــــ Menus 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mohamed mustafa بتاريخ: 16 يناير 2014 تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 وفقك الله وهداك واصلح بالك وجعله اللة لك زكاة علم واصل اخى الكريم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Bosaeed بتاريخ: 16 يناير 2014 تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 السلام عليكم ورحمة الله وبركاته اخوي موسى في المثال الثاني عندما نستعلم عن طريق اسم الموظف، هل لو كتبت اسم الموظف بحروف صغيرة راح يظهر نفس النتيجة؟ أو يجب ان تكون حالة الحروف مطابقة؟ وإذا يجب مطابقة حالة الحروف هل يوجد طريقة لتفاديها؟ هل نستطيع استخدام UPPER مع ما يدخله اليوزر بحيث مهما كان المكتوب يتحول إلى نفس حالة حروف العمود؟ 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 وفقك الله وهداك واصلح بالك وجعله اللة لك زكاة علم واصل اخى الكريم الله يبارك فيك يا اخي العزيز ولك بالمثل ان شاء الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 السلام عليكم ورحمة الله وبركاته اخوي موسى في المثال الثاني عندما نستعلم عن طريق اسم الموظف، هل لو كتبت اسم الموظف بحروف صغيرة راح يظهر نفس النتيجة؟ أو يجب ان تكون حالة الحروف مطابقة؟ وإذا يجب مطابقة حالة الحروف هل يوجد طريقة لتفاديها؟ هل نستطيع استخدام UPPER مع ما يدخله اليوزر بحيث مهما كان المكتوب يتحول إلى نفس حالة حروف العمود؟ وعليكم السلام ورحمة الله وبركاته اهلا باخي العزيز هل لو كتبت اسم الموظف بحروف صغيرة راح يظهر نفس النتيجة؟ لأ يا اخي العزيز مش نفس النتيجة لانه الاسماء مخزنة في قاعدة البيانات احرف كبيرة أو يجب ان تكون حالة الحروف مطابقة؟ طبعا يا اخي العزيز يجب ان تكون الحروف مطابقة وإذا يجب مطابقة حالة الحروف هل يوجد طريقة لتفاديها؟ طبعا يوجد طريقة اخي العزيز هل نستطيع استخدام UPPER مع ما يدخله اليوزر بحيث مهما كان المكتوب يتحول إلى نفس حالة حروف العمود؟ طبعا نستطيع يا اخي العزيز ما عليك سو ان تضيف على الكود داخل ترجير KEY-NEXT-ITEM begin :BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA); :ena:='%'||:ena||'%'; go_block('emp'); execute_query; end; 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 16 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2014 (معدل) للتوضيح الكود فقط begin :BLOCKQ.ENA :=UPPER(:BLOCKQ.ENA); :ena:='%'||:ena||'%'; go_block('emp'); execute_query; end; وضعنا هذا الكود :ena:='%'||:ena||'%'; لكي يأخذ أي جزء من الاسم يعني على فرض وضعت sc فقط وكبست Enter تكون كالتالي مثال اخر على فرض وضعنا حرف a كالتالي تم تعديل 16 يناير 2014 بواسطة miash80 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Bosaeed بتاريخ: 19 يناير 2014 تقديم بلاغ مشاركة بتاريخ: 19 يناير 2014 جميل يا استاذ موسى في حالة اردنا تحويل النص المدخل إلى حالة الحروف الكبيرة نستخدم الكود الي وضعته انت بارك الله فيك 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 إلى حالة الحروف الكبيرة، هل طريقتي صحيحة؟ 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 يناير 2014 (معدل) الموضوع اليوم هو عن الـــ Menus لنأخذ مثال على تكوين القوائم نذهب الى Menus ونعمل أنشاء + كالتالي نعمل اعادة تسمية My_Menus ننقر على My_Menus مرتين (دبل كليك) تفتح لنا نافذة جديدة لستخدم لتكوين القوائم كالتالي في مكان <New_Item> نكتب اول اسم قائمة وعلى سبيل المثال سنكتب File الان نريد عمل قوائم كما في الشكل التالي نضع الماوس على 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 كالتالي كما نرى يوجد امرين للأستدعاء الفورم Call_Form و New_Form يوجد فرق بين هذين الامرين Call_Form : يفتح الفورمات فوق بعض عند استدعاء اكثر من فورم ويأخذ مواصفات الفورم القديم New_Form : يفتح الفورم الجديد ويغلق الفورم الاصلي ويأخذ مواصفات الفورم الجديد الان نعمل تخزين للقائمة الجديدة عن طريق Save As يكون الشكل التالي وللأستدعاء القائمة الجديدة نذهب ونعمل فورم جديد ونسميه Form_Menu ونذهب الى خصائص هذا الفورم عن طريق F4 كالتالي نذهب الى خاصية Menu Module عن طريق هذه الخاصية نحدد القائمة التي ستظهر و DEFAULT&SMARTBAR محددة من اوراكل وممكن ان نضع DEFAULT من غير SMARTBAR ولكن لا نستطيع ان نضع SMARTBAR من غير DEFAULT ولكي نشغل القائمة الجديدة ما علينا سو ان نضع مكان DEFAULT&SMARTBAR اسم القائمة الجديدة مع موقعها كالتالي C:\MY_MENUS.mmx وتكون النتيجة عند عمل للفورم كالتالي تم اللازم والحمدلله تم تعديل 19 يناير 2014 بواسطة miash80 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 19 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 يناير 2014 جميل يا استاذ موسى في حالة اردنا تحويل النص المدخل إلى حالة الحروف الكبيرة نستخدم الكود الي وضعته انت بارك الله فيك 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); 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 20 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 يناير 2014 الموضوع اليوم هو عن الـــ Popup Menu Popup Menu هي عبارة عن قائمة تخرج عندما اكبس رايت كليك Popup Menu خاصة بالـــ Canvas والــــ Item . ولفهم الموضوع اكثر سنأخذ مثال نذهب الى Popup Menu ونعمل أنشاء + كالتالي نعمل اعادة تسمية MY_POPUP_MENU ننقر على MY_POPUP_MENU مرتين (دبل كليك) تفتح لنا نافذة جديدة تستخدم لتكوين القوائم كالتالي في مكان <New_Item> نكتب اول اسم قائمة وعلى سبيل المثال سنكتب File الان نريد عمل قوائم كما في الشكل التالي عملية ربط القائمة او استدعائها لـــ Item كالتالي نذهب الى خصائص حقل Ename الى خاصية Popup Menu ونحدد القائمة كالتالي نعمل تنفيذ لفورم الموظفين ونذهب الى داخل حقل Ename ونكبس رايت كليك كالتالي عملية ربط القائمة او استدعائها لـــ Canvas كالتالي نذهب الى خصائص حقل Canvas الى خاصية Popup Menu ونحدد القائمة كالتالي نعمل تنفيذ للفورم الموظفين ونذهب الى أي مكان فاضي في الصفحة ونكبس رايت كليك كالتالي تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 22 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 22 يناير 2014 (معدل) السلام عليكم ورحمة الله وبركاته موضوع اليوم خفيف و مهم جدا عن الــــ 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 ونغير فيه بعض الخصائص مثل لون الكتابة ولون الخلفية وتكون النتيجة كتالي كلام جميل الان لعمل الحقيبة نذهب الى Object Group ونعمل أنشاء عن طريق + ونسميها CONTROL_OBJECT_GROUP الان كل ما علينا سو ان نسحب أي شيئ نريد داخل الحقيبة بأتجاه CONTROL_OBJECT_GROUP كالتالي نعمل على تخزين هذا الفورم نريد الان توريث هذه الحقيبة الى فورم اخر نفتح فورم جديد ثم نسحب الحقيبة بأتجاه الفورم الجديد تخرج لنا رسالة كتالي نكبس على Copy وتكون النتجة كتالي نغلق الفورم الخاص بحقيبة التوريث ونبدء نعمل على الفورم الجديد يعني على سبيل المثال نريد بلوك خاص بالموظفين في الفورم الجديد كتالي واريد ان اورث الخصائص الموجودة في CONTROL_VISUAL_ATT الى حقل الاسم والراتب نذهب الى خصائص هذين الحقلين الى خاصية Visual Attributes Group ونحدد CONTROL_VISUAL_ATT كالتالي وتكون النتيجة كالتالي تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد وهو Key Trigger تم تعديل 22 يناير 2014 بواسطة miash80 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 22 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 22 يناير 2014 موضوع اليوم هو عن الــــ Key Trigger سنأخذ مثال على فرض عندي بلوك خاص بالموظفين عندما اكبس على سهم النزول لما اصل لاخر سجل يفتح سجل جديد كالتالي وعندما اكبس على سهم الطلوع لما اصل لاول سجل يقف عنده كالتالي اريد عندما اكبس على سهم النزول لما اصل لاخر سجل يرجع لاول سجل واريد عندما اكبس على سهم الطلوع لما اصل لاول يرجع لاخر سجل نذهب الى فورم وننشأ ترجير اسمه 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; النتيجة كالتالي عندما اكبس على سهم النزول لما اصل لاخر سجل يرجع لاول سجل كالتالي عندما اكبس على سهم الطلوع لما اصل لاول سجل يرجع لاخر سجل كالتالي تم المطلوب والحمدلله للرؤية وظيفة Key الاصلية اعمل تنفيذ للفورم ثم أذهب الى help ثم Keys كالتالي وعند الضغط على Keys تكون النتيجة كالتالي اريد ان اغير بعض وظائف هذه الــ keys على سبيل المثال F6 وظيفتها انشاء سجل جديد كالتالي اريد ان اغير وظيفة F6 الى التحرك الى السجل الي بعده نذهب الى فورم وننشأ ترجير اسمه KEY-CREREC ونكتب داخله هذا الكود NEXT_RECORD; اعمل تنفيذ للبرنامج ثم اضغط F6 تكون النتيجة كالتالي مثال اخر F1 وظيفتها اخرج قائمة Help كالتالي اريد ان اغير وظيفة F1 الى الخروج من البرنامج نذهب الى فورم وننشأ ترجير اسمه KEY-HELP ونكتب داخله هذا الكود EXIT_FORM; اعمل تنفيذ للبرنامج ثم اضغط F1 تكون النتيجة كالتالي تم اللازم والحمدلله كما نرى نستطيع ان نتحكم بوظائف الــ Keys كما نريد اذا لم يكن هنالك اسئلة سنبدء ان اشاء الله في موضوع جديد 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 25 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 يناير 2014 (معدل) موضوع اليوم هو عن الــــ Tab Canvas كما قلنا في السابق Tab يكون في الصفحة اكثر بلوك وتظهر في الاعلى لتنقل بين البلوك سنأخذ مثال للشرح الموضوع نذهب ونفتح فورم جديد ونضيف بلوك جديد خاص بالاقسام وعندما نصل الى شاشة تحديد الــ Canvas كالتالي نحدد نوع الــ Canvas بــ Tab ثم نكمل اضافة بلوك الاقسام ويكون الشكل التالي ثم نذهب ونضيف بلوك جديد خاص بالموظفين وعندما نصل الى شاشة تحديد الــ Canvas نعمل التالي ثم نكمل اضافة بلوك الموظفين ويكون الشكل التالي ثم نعمل اعادة تسمية كل Page حسب اسم البلوك حسب الاتي وتكون النتيجة كالتالي اريد ان اكتب كود وظيفته كل ما انقل من 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; وعند عمل تنفيذ للبرنامج تكون النتيجة وعند تغير الــ Page تكون النتيجة تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد تم تعديل 25 يناير 2014 بواسطة miash80 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 25 يناير 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 يناير 2014 (معدل) موضوع اليوم هو عن الــــ Editors كما قلنا في السابق الــــ Editors محررالنصوص يشبه الــ Notepad سنأخذ مثال للشرح الموضوع على فرض عندي فورم خاص بالموظفين أذهب الى Editors ثم اعمل أنشاء عن طريق + ثم اغير في خصائص Editors الجديد كالتالي ثم أذهب الى خصائص حقل Ename الى خاصية Editor ونحدد MY_EDITORS ثم نعمل تنفيذ للبرنامج ثم أذهب الى حقل Ename واكبس Ctrl+E وتكون النتيجة كالتالي اريد بمجرد الدخول على حقل الاسم ان ياتي بالـــ Editor نذهب الى حقل ename ثم ننشأ ترجير اسمه ونكتب داخله هذا الكود edit_textitem; طبعا هذا الكود جاهز من اوراكل تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء ان شاء الله في موضوع جديد تم تعديل 25 يناير 2014 بواسطة miash80 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ka7eell بتاريخ: 2 فبراير 2014 تقديم بلاغ مشاركة بتاريخ: 2 فبراير 2014 موضوع اليوم هو عن الــــ Tab Canvas كما قلنا في السابق Tab يكون في الصفحة اكثر بلوك وتظهر في الاعلى لتنقل بين البلوك سنأخذ مثال للشرح الموضوع نذهب ونفتح فورم جديد ونضيف بلوك جديد خاص بالاقسام وعندما نصل الى شاشة تحديد الــ Canvas كالتالي نحدد نوع الــ Canvas بــ Tab ثم نكمل اضافة بلوك الاقسام ويكون الشكل التالي ثم نذهب ونضيف بلوك جديد خاص بالموظفين وعندما نصل الى شاشة تحديد الــ Canvas نعمل التالي ثم نكمل اضافة بلوك الموظفين ويكون الشكل التالي ثم نعمل اعادة تسمية كل Page حسب اسم البلوك حسب الاتي وتكون النتيجة كالتالي اريد ان اكتب كود وظيفته كل ما انقل من 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; وعند عمل تنفيذ للبرنامج تكون النتيجة وعند تغير الــ Page تكون النتيجة تم اللازم والحمدلله اذا لم يكن هنالك اسئلة سنبدء في موضوع جديد يعطيك العافيه اخوي سؤال عندي اذا كان التاب الاول لادخال بيانات مثل بيانات العميل والتاب الثاني لكتابة العقد وابغى يكون التاب الثاني موجوده فيه جميع بيانات التاب الاول كيف الطريقه بدون الاستعلام اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.