بتاريخ: 4 مايو 200916 سنة comment_155747 أريد تعلموني الدفلوبر بمثال بسيطلأنا أبي أتعلم الدفلوبرمتحمس تقديم بلاغ
بتاريخ: 4 مايو 200916 سنة comment_155749 أعتقد جدا صعب ماتقول لكن ابدأ من هذه المواضيع وياريت يكون معك الماتريل مواضيع عديدة لكل ممبتدأ تقديم بلاغ
بتاريخ: 5 مايو 200916 سنة comment_155830 هذا مثال بسيط قد يساعدك-----------------------------------------------------------------------------------برنامج تلیفوناتأولا تكوین الجدول:وھو عبارة عن جدول واحد فقط یوجد بھ البیانات التالیة:Note ملاحظات ، Email الإیمیل ، Tel التلفون ، Address العنوان ،Name الإسمsystem/manager وإدخل بالمستخدم SQL * PLUS إفتح برنامجكما یلي: phone وإنشئ الجدولكودCREATE TABLE phone(name varchar(30) primary key,address varchar(20),tel varchar(20),email varchar(30),note varchar(50));لاحظ أن الإسم ھو المفتاح الأساسي للجدول أي لایسمح أن یترك الأسم فارغا ولا یسمح أیضاً بإدخال الإسم أكثر من مرة) عدم تشابھ الأسماء.(الأن ندخل مجموعة من القیود من أجل أن نطبق علیھ بعض الأمثلة في البرنامج:كودinsert into phone(name,address,tel,email,note) values('Ahmed','Yemen','123321','[email protected]','');insert into phone(name,address,tel,email,note) values('Mohammed','Iraq','2258647','[email protected]','');insert into phone(name,address,tel,email,note) values('amer','Sudia','58694725','[email protected]','');insert into phone(name,address,tel,email,note) values('moner','Egypt','55886644','[email protected]','');insert into phone(name,address,tel,email,note) values('Mohsen','Yemen','123355','[email protected]','');insert into phone(name,address,tel,email,note) values('moneraa','Iraq','5541857','[email protected]','');commit;بعد ھذا سوف نبدأ بالدفلوبر ونبدأ بتصمیم الإطاراتOracle Form Builder ١- افتح برنامجوذلك من أجل تكوین بلوك بیانات (داتا بلوك) جدید Use the Data Block Wizard إختار Welcome to the form Builder ٢- من نافذةالذي أنشأناه في الدرس الماضي. phone مربوط بالجدولثم التالي،وذلك من أجل أن نستدعي الجدول من قاعدة البیانات. Table or View ثم التالي ثم إختار Display this page next time ٣- إختارثم نختار إسم الجدول وھو كما سمیناه سابقاً بإسم system/manager ثم إكتب إسم المستخدم وكلمة المرور Browse ٤- لإستدعاء الجدول نختارphoneأسماء جمیع الحقول التي كوناھا في الجدول. Available Columns سوف یظھر لنا في العمودثم التالي. Database Item إختار الجمیع لیتم نقلھن جمیعاً إلى العمودثم نھایة Create the data block, then call the Layout Wizard ٥- إختارأخر من أجل عمل تصمیم لمحتویات بلك البیانات. Wizard وذلك من أجل إستدعاءContent أي ساحة عمل جدیدة وإختار النوع New Canvas الجدید إختار التالي ثم إختار Wizard ٦- من الDisplayed Items ٧- ثم إختار الكل لنقل حقول الجدول إلى العمودالجدیدة ثم إختار التالي. Canvas من أجل عرض ھذه الحقول في ساحة العمل٨- إختار التالي مرة أخرى أو یمكنك قبل إختار التالي ان تغیر من عناوین الأعمدةوھذا لایؤثر على التسمیات الموجودة في الجدول ولكن أفضل تركھا كما ھي.٩- بعد إختیار التالي سوف تظھر شاشة لإختار شكل التصمیممن اجل عرض صف واحد من البیانات Form إختارمن أجل عرض عدد من الصفوف. Tabular أماثم التالي. Form إختار١٠ - سوف تظھر الآن شاشة من أجل وضع إسم للإطار الذي سوف یحوي بلك البیانات إجعلھ فارغا ثم التالي ثم نھایة.یجب أن تكون شاشتك كما في الشكل التالي: phone. لقد كونا الآن بلك بیانات مرتبط بقاعدة البیانات وبالجدولھو الشاشة الأساسیة الأولى ومنھ سوف یتم الإنتقال إلى بقیة الشاشات الأخرى التي سوف نكونھا في الدروس التالیة.. Canvas سوف یكون ھذاسوف یكون فقط لعرض النتائج ولیس للإضافة والتعدیل. Canvas أي أن ھذا الالان نغیر من بعض الخصائص:سوف نغییر خصائصة كما یلي: phone بلك البیانات المسمى حالیامن أجل عرض نافذة الخصائص F ثم إضغط المفتاح 4 phone إنقر على بلك البیاناتغیر الخصائص كما یلي:Name: ViewDatabase Data Block: Noوذلك من أجل ان نجعل بلوك البیانات ھذا غیر مرتبط بالجدول( قد تتسأل Query Data Source Name من أمام الخاصیة phone وإحذف كلمةلماذا أجعلھ غیر مربوط بالجدول ومن أین سوف أستدعي البیانات) الجواب البیانات سوف نبحث عنھا بإستخدام مربع نص وسیكون بلوك البیاناتفقط لعرض ما حصلنا علیھ من البحث (لاتشغل بالك سوف تتوضح الفكرة مع التقدم في الدرس) Viewفسوف نغییر خصائصھا كما یلي: Canvas أما خصائص ساحة العملName: CNVViewثم إضغط Ctrl وذلك بالضغط على كل عنصر مع الإستمرار بالضغط على المفتاح Name,Address,Tel,Email,Memo الان حدد العناصرلعرض الخصائص وغیر كما یلي: F المفتاح 4وذلك من أجل العرض فقط Item Type: Display ItemDatabase item: NoCanvas: CNVVIEWReading Order: Left to Rightفغیرھا كما یلي: FRAME أما خصائصوذلك من أجل إذا أردت التغییر في حجم الإطار فلا یؤثر على العناصر. Update layout: Lockedtelephone الآن إحفظ عملك بالضغط على حفظ وإحفظھ بإسموتكملة للدروس فالدرس الثالث الیوم سیكون عن عرض البیانات وعرض نتائج البحث (الأسماء فقط) في قائمة وبمجرد الضغط على إسم شخص منالقائمة تظھر التفاصیل في بلك البیانات.كیف ستكون عملیة البحث؟؟؟یتم كتابة حرف أو أكثر من حروف الاسم في عنصر النص ھذا فیتم عرض جمیع الأسماء (الأسماء Text Item لعملیة البحث نحتاج الى عنصر نصلعرض نتائج البحث.. List Item فقط) التي تبدأ بھذا الحرف أو الحروف في قائمة. إذا سوف نحتاج أیضاً إلى عنصر القائمةإذا نحتاج الأن لتكوین عنصرین (عنصر نص لكتابة حروف البحث وعنصر القائمة لعرض قائمة بنتائج البحث).كما في الصورة التالیة: View في بلوك البیانات List Item وعنصر قائمة Text Item ١- كون مربع نصكما یلي: Text Item ٢- غیر خصائصName:SEARCHDatabase Item: NoCanvas:CNVVIEWكما یلي: List Item ٣- غیر خصائص عنصر القائمةسوف نستخدمھ كثیراً في ھذا الدرس. LISTVIEW وتذكر ھذا الإسم جیداً Name:LISTVIEWثم موافق List Elements وإحذف أي نص موجود أسفل Elements in List بجوار الخاصیة More إضغط علىوذلك لمنع من إدخال أي بیانات الى القائمة یدویاً. فسوف یتم إدخال البیانات إلى القائمة بالإعتماد على محتوى مربع نص البحث.List Style: TlistDatabase Item: NOCanvas:CNVVIEWDirection: Left To Rightالأن إحفظ البرنامج ثم نفذه المفروض أن تظھر نافذة التنفیذ كما یلي:ھذه النافذة كشكل عام تحتاج إلى التعدیل علیھا بالنقط التالیة:١- شریطي الأدوات والقوائم نرید إخفائھم (لن نحتاجھم في ھذه الشاشة شاشة العرض والبحث)Telephone Guide نرید تغییرھا إلى Window ٢- إسم نافذة البرنامج 1maximize ٣- نافذة البرنامج نریدھا مكبرةلتعدیل ھذه النقاط نقوم بالتالي:Menu Module من أمام الخاصیة DEFAULT&SMARTBAR نحذف كلمتي Telephone ١- من خصائص الفورم الرئیسيفھاتین الكلمتین تدلان على شریطي القوائم والأدوات.نغیر التالي: Window ٢- من خصائص النافذةName:Window1Title: Telephone Guideماھو الترایجر؟؟ - Trigger ٣- أما عملیة تكبیر النافذة فسوف نحتاج إلىالترایجر ھو عبارة عن أكواد برمجیة یتم تنفیذھا في أوقات محددة في البرنامج.ثم إختار Trigger أنقر بالأیمن على TELEPHONE أي أسفل الفورم Telephone إذا نكون ترایجر على مستوى الفورمأي أن وقت تنفیذ ھذا الترایجر ھو عند تشغیل الفورم. WHEN-NEW-FORM-INSTANCE ثم إختار SmartTriggersالبسیطة. PL/SQL سوف تفتح نافذة جدیدة سوف نكتب بھا بعض الأكواد بلغةوسوف نكتب في ھذا الترایجر ما یلي:كودset_window_property('window1',window_state,maximize);Maximize بحیث تصبح 'Window معنى ھذا الكود انھ غیر في خصائص النافذة التي اسمھا ' 1الأن إحفظ البرنامج ونفذه.تلاحظ أن النقاط السابقة قد تم تلافیھا.الان ماذا تلاحظ في نافذة التفیذ أین البیانات التي أدخلناھا في الجدول في أول درسحاول أن تكتب أي حرف في عنصر نص البحث ثم إضغط إنتر!!!! ؟لا یوجد شیئ... لم یبحث عن شیئ.. طبعاً لا یوجد شیئلإن حالیا كل الذي سویناه فقط الجزء المرئي یبقى الأن دور البرمجة.Listview. أول شیئ نریده وقبل البدء بالبحث نرید عرض جمیع الأسماء في عنصر القائمةولعمل ذلك سوف نحتاج إلى ترایجر على الفورم الرئیسي (نفس التریجر السابق سوف نفتحة ونعدلة إلى الشكل التاليكودdeclarecursor curs is select name from phone;a varchar(30);n number:=0;beginset_window_property('window1',window_state,maximize);clear_list('listview');open curs;loopfetch curs into a;exit when curs%notfound;n:=n+1;add_list_element('listview',n,a,a);end loop;end;الأن دعنا نشرح ھذا الكود خطوة خطوة:عنوان لتعریف المتغیرات ویحتوي على المتغیرات التالیة: declareھو متغیر من نوع مؤشر أي مصفوفة من البیانات curs أي أن ال cursor curs is select name from phoneselect تحتوي على عدد من البیانات ترجعھا جملة الإستعلامphone السابقة تعود بجمیع الأسماء الموجودة في الجدول select وجملةمتغیر حرفي طولة ٣٠ حرف وسوف نستخدم ھذا المتغیر من أجل خزن الإسم فیھ. a varchar(30متغیر رقمي قیمتھ الإبتدائیة تساوي صفر وسوف نستخدمھ كرقم السطر في القائمة n number:=0إیعاز لبدایة البرنامج أو الكود beginتم شرحھا سابقا والخاصة بتكبیر النافذة set_window_property('window1',window_state,maximize);وھذه القائمة تعرفوھا جیدا ألم أقل لكم تذكروا إسمھا جیدا listview لتصفیر وحذف أي عنصر من القائمة clear_list ('listview');curs لفتح المتغیر open curs;بدایة دوارة loopa ووضعة في المتغیر curs جلب أول سطر من المتغیر fetch curs into a;وھكذا الى حین الخروج من الدوارة. curs وعند الرجوع مرة أخرى لھذ الكود فسوف یتم إستدعاء السطر الثاني من المتغیرقد أستدعى جمیع أسطره curs شرط الخروج من الدوارة وھو عندما یكون المتغیر exit when curs%notfound;بواحد أي یصبح واحد في الدورة الأولى و أثنین في الدورة الثانیة وھكذا. n زیادة قیمة المتغیر n:=n+1;n في الموقع listview إضافة عنصر للقائمة add_list_element('listview',n,a,a);a وإسمھ في قاعدة البیانات ایضاً قیمة المتغیر a واسم العنصرالذي سوف نضیفھ في القائمة ھو قیمة المتغیرنھایة الدوارة. end loop;نھایة البرنامج أو الكود. end;PL/SQL إن شاء الله یكون ھذا الكود واضح على العموم یجب أن یكون لدیك فكرة ولو بسیطة عن لغةالان إحفظ البرنامج ثم نفذ ماذا تلاحظ؟؟؟نتجیة جمیلة ألیس كذلك؟؟ listview جمیع الأسماء التي أضفناھا في الدرس الأول قد ظھرت في القائمةولكن أین بقیة البیانات اي العنوان ورقم التلفون وغیرھا؟؟؟لكي تظھر ھذه البیانات نحتاج ألى ترایجر أخر. (أین نحط ھذا الترایجر ومتى یجب أن یتنفذ؟؟؟(ماذا نرید الآن؟؟خطوة أخیرة قبل البدء بعملة البحث..نرید عندما نضغط على إسم شخص من القائمة، تظھر جمیع بیاناتھ في بلك البیانات ، وھذا الشیئ یحتاج إلى ماذا؟؟؟والترایجر. PL/SQL نعم برمجة بإستخداملكن ھذه المرة أین سیكون موقع الترایجر؟؟؟التریجر سیكون عند ضغط الماوس على عنصر القائمةWHEN-MOUSE-CLICK وبالحدث listview إذا سوف ننشئ ترایجر تحتOther ثم إختار Smart Triggers ثم أختار listview أسفل Trigger أنقر بالز الأیمن علىثم موافق ثم أكتب الكود التالي: When-Mouse-Click سوف تظھر نافذة إختار منھاكودdeclarecursor curs is select * from phone where name=:view.listview;n varchar(30);a varchar(20);t varchar(20);e varchar(30);m varchar(50);beginopen curs;loopfetch curs into n,a,t,e,m;exit when curs%notfound;:view.name:=n;:view.address:=a;:view.tel:=t;:view.email:=e;:view.memo:=m;end loop;end;ولنشرح بعض أجزاء الكود:كودCursor curs is select * from phone where name=:view.listview;تحت شرط معین phone أعتقد واضحة. وھي تكوین متغیر یحتوي على جمیع بیانات (*) الجدولView تعرفوھا طبعا وموقعھا فن بلك البیانات listview في الجدول یساوي محتوي القائمة name وھو عندما محتوىالناتج سوف یكون سطر واحد فقط من الجدول (View.listview))؟؟؟ ھي متغیرات حرفیة (لماذا بعضھا ذات طول ٢٠ وبعضھا ٣٠ وواحدة ٥٠ n,a,t,e,m المتغیراتكودfetch curs into n,a,t,e,m;n في أكثر من متغییر وھي curs أن نضع قیمة المتغیر fetch أستدعینا جمیع البیانات ولیس الأسم ولذلك یجب في جملة select لاحظ أن في جملةللملاحظات. m للإیمیل و e للتلفون و t للعنوان و a للإسم وكودexit when curs%notfound;شرط الخروج من الدوارة.كود:view.name:=n;n یساوي المتغیر view الموجود في بلك البیانات name وتعني إجعل قیمة العنصروھكذا لبقیة الأسطر الأربعة الأخرى.الأن إحفظ البرنامج ثم نفذه.اختار بالماوس على أحد الأسماء(ماذا ینتج؟(ألیست نتیجة رائعة تظھر جمیع محتویات ھذا الاسم في بلوك البیانات.الآن وبعد أن انتھینا من عملیة العرض بالشكل المناسب ننتقل إلى عملیة البحث عن إسم معین.Search واعطیناه الإسم Text Item ھل تذكروا في بدایة الدرس الثالث عندما أنشئنا عنصر نصأي عند حدوث تغییر في ھذا العنصر POST-CHANGE الأن سوف ننشئ ترایجر أسفل ھذا العنصر تحت الحدثونكتب فیھ الكود المبین في الصورة التالیة:select الكود ھذا لقد مر علینا سابقاً غیر ان ھناك فارق بیسط فیھ وھي جملةكودselect name from phone where substr(name,1,length(:view.search))=:view.search;تحت الشرط التالي: phone أي اعرض جمیع الأسماء من الجدولكودsubstr(name,1,length(:view.search))( وبدایة الأستقطاع ھو من الحرف الأول ( ١ phone أي الاسم من الجدول name ھي دالة إستقطاع جزء من النص النص المستقطع ھو substrview الموجود في بلك البیانات search أي بطول عدد الحروف الموجودة في العنصر length(:view.search) وبطولsearch (=:view.search) فإذا ھذا الجزء المستقطع من الاسم یساوي محتوي العنصرسوف ترجع بإسم ھذا الحقل (إن شاء الله مفھوم(.. select فإن الجملةبقیة الكود تم شرح مثلھ في درس سابق.الأن إحفظ البرنامج ثم نفذه.أكتب أي اسم او حرف لبدایة إسم ترید البحث عنھ search في عنصر النصثم إضغط إنتر (ماھي النتیجة؟؟( m ولیكن مثلا حرفإنقر على أي إسم لعرض بیاناتھ. m القائمة عرضة فقط الأسماء التي تبدأ بحرفكیف یمكن تفادي ھذه المشكلة..؟؟؟؟؟( M ( یختلف عن البحث عن m لاحظ أن حالة ألاحرف حساسة أي البحث عنلتفادي ھذه المشكلة غیر الكودكودselect name from phone where substr(name,1,length(:view.search))=:view.search;إلى الكودكودcursor curs is select name from phone where lower(substr(name,1,length(:view.search)))=lower(:view.search);lower بدلاً من Upper یمكن أن تستخدم الدالةتحول جمیع الأحرف إلى أحرف صغیرة lower الأمر بسیط للغایةتحول جمیع الأحرف إلى أحرف كبیرة upper وإحفظ البرنامج ونفذ مرة أخرىثم إضغط إنتر M أو m أكتب الانثم إنتر moh الان أكتب أكثر من حرف ولیكن مثلاًmoh تم عرض فقط الأسماء التي تبدأ بالحروفوبذلك نكون قد أنتھینا من عملیة البحث--------------------------------------في ھذا الدرس سوف نقوم بالتمھید للعمیات الأخرى كالحذف والإضافة والتعدیلوبما أن الشاشة التي كوناھا سابقاً ھي الشاشة الرئیسیةفلذلك سوف نضطر إلى إضافة مجموعة من الأزرار للقیام بالعملیات الإضافة والحذف والتعدیل وأیضاً الخروج من البرنامج(Buttons) فأول خطوة سوف نخطوھا الیوم ھي إضافة مجموعة من الأزراروسوف نحصر ھذه الأزرار في إطار مناسب إذا قم بالتالي:Buttons إنشئ إطار ثم أربعة CNVVIEW المسمى Canvas ١- على التساوي لاشیئ (أي فارغ) Frame Title ٢- غیر في خصائص الإطار بحیث تكون قیمة الخاصیةبحیث: Button ٣- غیر في خصائص أولName= B_ExitLabel= ExitCanvas= CNVVIEWوسیكون ھذا ھو زر الخروج من البرنامج.بحیث: Button ٤- غیر في خصائص ثانيName= B_DeleteLabel= DeleteCanvas= CNVVIEWوسیكون ھذا ھو زر حذف قید.بحیث: Button ٥- غیر في خصائص ثالثName= B_EditLabel= EditCanvas= CNVVIEWوسیكون ھذا ھو زر تعدیل قید.بحیث: Button ٦- غیر في خصائص رابعName= B_AddLabel= AddCanvas= CNVVIEWوسیكون ھذا ھو زر إضافة قید.الأن یجب أن نبرمج كل زر بحیث یقوم بوظیفتھ:ونكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED وبالحدث Exit نضیف ترایجر أسفل الزر (Exit) أمر الخروج من البرنامجكودExit_form;وھذا الكود لایحتاج إلى شرح (وظیفتھ الخروج من البرنامج).إحفظ البرنامج ثم نفذهتلاحظ خروجك من البرنامج بسبب أن exit تلاحظ لایؤثر في شیئ لإنھا تخلو من البرمجة، لكن إضغط على زر Exit غیر Button إضغط على أيالترایجر یوجھھا الى ھذا الأمر.الثاني والخاص بحذف عنصر. Button الأن المن البدیھیات المعروفة انھ قبل حذف أي عنصر فإنھ یجب التنبیھ بذلك أي یجب عرض رسالة تحذیریة تخبرنا بالتأكید على الحذف أم لا.Alert . ولعرض ھذه الرسالة سوف نحتاج إلى إضافةجدید وغیر في خصائصھ كما یلي: Alert أضفName= MSGأي رسالة تحذیریة Alert Style= CautionYes أي ان الزر الأول في الرسالة یكتب فیھ كلمة Button 1 Label= YesNo أي الزر الثاني في الرسالة یكتب فیھ كلمة Button 2 Label= Noإجعلھ فارغا لإننا لا نحتاج إلى زر ثالث Button 3 Labelأي إجعل الزر الثاني ھو الزر الإفتراضي (النشط( Default Alert Button= Button 2Delete الأن نرجع إلى برمجة الزرونكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED عند الحدث delete ننشئ ترایجر جدید أسفل الزركودif :view.name is not null thenset_alert_property('msg',title,'Delete');set_alert_property('msg',alert_message_text,'Are You Sure to Delete ' || :view.name);if show_alert('msg')=alert_button1 thendelete from phone where name=(:view.name);commit_form;end if;end if;شرح الكود:یكون فارغ أي لا یحتوي على أي حرف (فإذا تحقق ھذا الشرط View في البلوك name والشرط (ھل قیمة العنصر IF السطر الأول یوجد بھ شرطفي آخر سطر في الكود. End if والتي تنتھي بالجملة IF فسوف یتم تنفیذ السطور التالیة حتى نھایة جملةأما إذا لم یتحقق ھذا الشرط فلن یتم تنفیذ شیئ.أي خصائص رسالةالتنبیھ MSG التي سمیناھا Alert السطر الثاني یتم فیھ تغییر في خصائص الDelete. إلى الكلمة (MSG) الرسالة (Title) حیث یتم تغییر عنوانأي خصائص رسالةالتنبیھ MSG التي سمیناھا Alert السطر الثالث یتم فیھ أیضا تغییر في خصائص الإلى الجملة: (MSG) الرسالة (alert_message_text) حیث یتم وضع نصVIEW. من البلك name یلي ھذه الرسالة یضیف ( || علامة الإضافة (یضیف محتوي العنصر Are You Sure to Deleteفسوف یكون نص الرسلة ھو: Mohammed ھو الإسم name فإذا كان محتوى العنصرAre You Sure to Delete MohammedMSG أي إعرض الرسالة show_alert یقول If السطر الرابع: فیھ شرطYes بالقیمة Alert والذي حددنھا سابقا في خصائص ال alert_button فإذا كان الإختیار على الزر الأول 1فإذا كان الإختیار على ھذا الزر (أي تم ضغط ھذا الزر) فإن البرنامج سوف یقوم بتنفیذ الأسطر التي تلي ھذا الشرطفي السطر القبل الأخیر End If والتي تنتھي بالجملةفإن البرنامج لن یفعل شیئ. No أما إذا كان الضغط على الزرفي البلوك name عندما یكون الأسم یساوي محتوي العنصر Phone من الجدول (Delete) السطر الخامس: وھي أھم خطوة أمر الحذف وھو أحذفView.السطر السادس: أمر التثبیت. وذلك من أجل تثبیت الحذف.الأن إحفظ البرنامج.طبعاً عملیة الحذف الأن تقریباً أكتملت ولكن ینقصھا بعض التعدیلات من أجل الشكل فقط سوف نناقشھا بعد تنفیذ البرنامج.الأن نفذ البرنامج:طبعاً عند إختیاره سوف تظھر جمیع بیاناتھ amer إختار أحد الأسماء من القائمة ولیكن مثلاً الإسمسوف تظھر مباشرتاً الرسالة: delete الأن إضغط على الزرھو الزر الفعال حالیاً No من لوحة المفاتیح لإن الزر Enter أو إو إضغط على إنتر No لإلغاء عملیة الحذف إختارعلى الزرamer فسوف یتم حذف القید Yes أما إذا أخترتتلاحظ أن القید مازال موجوداً في القائمة، ولكنھ قد حذف من الجدول وللتأكد من عملیة الحذف amer الأن بعد أن حذفت القیدغیر موجود ضمن القائمة. amer ثم نفذه من جدید ستلاحظ بأن القید Exit إخرج من البرنامج بالضغط على الزرولكن كیف یمكن أن أجعل العنصر ینحذف حتى من القائمة بعد الحذف مباشراً وبدون خروج من البرنامج؟؟؟لحل ھذا المشكلة إنتظروا الدرس القادمملاحظة:وذلك من أجل أن تتمرن أكثر على عملیة الحذف. SQL *Plus یمكنك إضافة القیود التي حذفتھا یدویاً بأن تقص الكود التالي وتلصقھ فيكودdelete from phone;insert into phonevalues('Ahmed','Yemen','123321','[email protected]','');insert into phonevalues('Mohammed','Iraq','2258647','[email protected]','');insert into phonevalues('amer','Sudia','58694725','[email protected]','');insert into phonevalues('moner','Egypt','55886644','[email protected]','');insert into phonevalues('Mohsen','Yemen','123355','[email protected]','');insert into phonevalues('moneraa','Iraq','5541857','[email protected]','');commit;-- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - --ولكن كیف یمكن أن أجعل العنصر ینحذف حتى من القائمة بعد الحذف مباشراً وبدون خروج من البرنامج؟؟؟أي عندما أحذف العنصر یجب أن ینحذف من القائمة ولیس فقط من الجدول. حتى یبین للجمیع بأن الإسم قد تم حذفھ.أتذكرون الترایجر التي كودناه أسفل الفورم الرئیسي والذي یتنفذ عند تنفیذ البرنامج (ماھي وظیفة ھذا الترایجر؟)كودdeclarecursor curs is select name from phone;a varchar(30);n number:=0;beginset_window_property('window1',window_state,maximize);clear_list('listview');open curs;loopfetch curs into a;exit when curs%notfound;n:=n+1;add_list_element('listview',n,a,a);end loop;end;كما شرحناه سابقاً فإن وظیفتھ ھي إستدعاء جمیع الأسماء الموجودة في الجدول وعرضھا في القائمة.إذا بماذا یفیدنا ھذا الترایجر؟؟؟ھذا یفیدنا بأن نستدعیھ بعد كل عملیة حذف حتى یستدعي جمیع الأسماء الموجودة في الجدول.(طبعاً الإسم المحذوف غیر موجود في الجدول لإنھأنحذف)وبذلك فسوف لن یتم عرض الإسم المحذف في القائمة.ویبقى السؤال الأن كیف أقوم بإستدعاء ھذا الترایجر بعد كل عملیة حذف.سوف نحتاج ھنا إلى إجراء عام یمكن إإستدعاه من أي ترایجر بمجرد فقط ذكر إسمھ. (كیف ذلك؟؟).Program Units 1- إختار2- إختار إضافةProcedure 3- إختارRefresh ولیكن name 4- إكتب إسم الإجراء بجوار الحقلOk 5- إختارسوف تظھر نافذة جدیدة یوجد بھا بعض الأسطرأضف الكود التالي إلى ھذه النافذه بحیث تصبح بالشكل التالي:كما تلاحظ ھو نفس الكود الموجود بالترایجر أسفل الفورم الرئیسي ولكن ھناك بعض الإختلافات لإن ھذا ھنا عبارة عن إجراء قابل للإستدعاء من قبلأي ترایجر أخر.الأن ماھي التعدیلات التي سوف نجریھا على الترایجر الأول الذي أسفل الفورم الرئیسي؟؟؟وماھي التغیرات التي سوف نجریھا على ترایجر الحذف؟؟؟التعدیلات ستكون كما في الشكل التالي :أعتقد بأن التغیرات التي أجریناھا لاتحتاج إلى شرح أكثر من ھذا؟الان إحفظ البرنامج ثم نفذه.ثم حاول أن تحذف أحد القیود؟؟فعلاً لقد تم حذف الإسم حتى من القائمة.ولكن بقت مشكلة بسیطة جدأ وھي أن بیانات الشخص المحذوف تبقى في بلك البیانات. (كیف یمكن معالجة ھذه المشكلة البسیطة؟؟)زالحل بسیط جداً..في ترایجر الحذف أضف الأسطر التالیة:كود:view.name:='';:view.Address:='';:view.Tel:='';:view.Email:='';:view.note:='';وظیفة ھذه الأسطر ھو جعل قیم بلك البیانات فارغة.الأن إحفظ البرنامج ثم نفذه.ثم حاول حذف أحد الأسماء) ..لاتوجد مشاكل الأن .. (.أنتھى درس الحذف وبنھایتھة ینتھي درس الیوم ولم یبقى لنا سوي التعدیل والإضافةموعدنا الدرس القادم مع التعدیل على البیانات .-- - -- -- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - --درسنا الیوم ھو عن التعدیل على البیاناتجدید Canvas سوف نقوم في ھذا الدرس بإنشاء بلك بیانات جدید وPHONE بلك البیانات سوف نربطھ بالجدولإذا أول خطوة ھي أنشئ بلك بیانات جدید (لكیفیة إنشاء بلك البیانات راجع الدرس الثاني..)وخطوات إنشاء بلك البیانات ھي كالتالي( للتذكیر):Data Blocks. ١- إختار٢- إختار إضافة.O.K ثم User The Data Block Wizard -٣ثم التالي. Display the Page Next time -٤ثم التالي. Table Or View -٥Browse.. -٦connect ثم (system/manager) ٧- أدخل الیوزر نیم والباسوردO.K ثم PHONE ٨- إختار الجدول٩- إختار الكل ثم التالي.١٠ - التالي.ثم نھایة. Create the data block, then call the Layout Wizard. -١١ثم التالي. Display the Page Next time -١٢Canvas = New Canves -١٣ثم التالي. Type = Content١٤ - إختار الكل ثم التالي.١٥ - التالي.ثم التالي. Form -١٦١٧ - التالي.١٨ - نھایة.الأن قم بتغییر الخصائص كما یلي:Phone ١- الداتا بلوكname= EDITCANVAS -٢name= CNVEDITCNVEDIT الموجود في - FRAME -٣Update Layout= LOCKEDوغیر في خصائصھم كالتالي: NAME,ADDRESS,TEL,EMAIL,MEMO ٤- حدد العناصرReading Order= Left To RightEDIT إلى الداتا بلك (BUTTONs) الأن أضیف زرینوغیر خصائصھما كما یلي:1- الزر الأول:name= P_CANCELlabel= CANCEL2- الزر الثاني:name= P_OKlabel= OKEDIT وأكتب فیھ الكلمة CNVEDIT الأن أضیف مربع نص فيإجعل شاشتك تظھر بالشكل التالي:EDIT الأن أنتھینا من التصمیم المرئي لبلك البیانات الخاص بشاشة التعدیلوبقى فقط الجزئ البرمجي...إحفظ برنامج ثم نفذ..تلاحظ بأن شاشة التعدیل ھي التي ظھرت ولیست الشاشة الرئیسیة التي أنشئناھا في الدروس السابقة.كیف أجعل شاشة العرض ھي التي تظھر بالبدایة؟؟؟إذھب الى الترایجر الذي أسفل الفورم الرئیسیى والذي عدلنا بھ في الدرس الماضي والمسمى بWHEN-NEW-FORM-INSTANCEوأضف الكود التالي في نھایتھ:كودGO_BLOCK('VIEW');VIEW وھذا الكود یعني إذھب وأعرض بلك البیانات الذي أسمھالأن إحفظ البرنامج ونفذ.فعلاً ظھرت الأن شاشة العرض الأساسیة.لا یحصل شیئ(!!! Edit ( إضغط على الزرمرة أخرى) أیضاً لا یحصل شیئ(!!!!! Edit إختار على أحد الأسماء من القائمة ثم إضغط على الزرطبعاً لایحصل شیئ لإن ترایجر زر التعدیل لم نوجھھ حتى الأنVIEW في بلك البیانات Edit إذا أخرج من شاشة التفیذ وأضیف ترایجر جدید أسفل زر التعدیلوأكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED ویكون تحت الحدثكودif :view.name is not null thengo_block('edit');set_block_property('edit',default_where,'name=:view.name');execute_query;end if;شرح الكود:فارغاً VIEW في بلك البیانات name یوجد بالكود شرط وھو یجب أن لا یكون العنصرتذكر ھذا الشرط جیداً) ) end if لأجل تنفیذ الأسطر التالیة حتى نھایة جملةEDIT السطر الثاني واضح وھو أمر الذھاب وعرض بلك البیاناتبحیث یصبح یحتوي على الإستعلام التالي EDIT السطر الثالث وھو تغییر في خصائص بلك البیاناتVIEW في بلك البیانات name یساوي العنصر name الاسمالسطر الرابع وھو أمر تنفیذ الإستعلامVIEW ھذین السطرین الثالث والرابع وظیفتھما ھو عرض جمیع بیانات القید الذي أسمة یساوي الإسم الموجود في بلك البیاناتCANCEL تحت الزر EDIT الأن نضیف ترایجر أخر في بلك البیاناتونكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED وبالحدثكودgo_block('view');وبدون حفظ أي تغییر. VIEW واضح معناه أي الرجوع وعرض بلك البیاناتOK تحت الزر EDIT وأخیراً سوف نضیف ترایجر ثالث في بلك البیاناتونكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED وبالحدثكودcommit_form;go_block('view');refresh;السطر الأول واضح جداً وھو من أجل تثبیت البیانات التي غیرنا فیھا وحفظھا في الجدول.VIEW السطر الثاني أوضح من الأول، وھو من أجل الرجوع إلى بلك البیانات الرئیسيأما السطر الثالث فھو موجھ لكم أنتم لماذا أستخدمناه وماھي وظیفتھ؟؟؟؟؟ (راجع الدروس السابقة).الآن إحفظ البرنامج ثم نفذه.ماذا یحصل؟) ) Edit ١- قبل أن تختار أي إسم من القائمة إضغط على الزرفارغاً VIEW في بلك البیانات NAME لا یحصل شیئ وذلك بسبب ان العنصرغیر فارغ. (ألم أقل لكم تذكروا ھذا الشرط جیداً) VIEW بینما الشرط في الترایجر یقول یجب أن یكون الاسم في بلك البیانات(؟؟ name (كیف أجعلھ یظھر رسالة تخبرني بأنھ لایوجد إسم في العنصرEdit ٢- الأن إختار أحد الأسماء الذي ترید أن تعدل في بیاناتھ من القائمة ثم إضغط علىسوف تظھر شاشة التعدیل وبھ جمیع بیانات ذلك الشخص. غیر بیاناتھ.فلن یتم حفظ التغیرات. Cancel ٣- إذا ضغطت علىفسوف یتم حفظ التعدیلات. OK ٤- أما إذا ضغط على- -- -- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - --درسنا الیوم ھو عملیة إضافة قید جدیدجدید وسیكون إسم ال Canvas وسوف یكون في ADD ولعمل ذلك سوف نحتاج إلى بلك بیانات جدید خاص بالإضافة وسوف یكون إسمھ ھوأتفقنا..). ) CNVADD ھو Canvasأعتقد ھذه الخطوات أصبحت بسیطة ولكن للتذكیر سوف أسردھا لكم وھي:Data Blocks. ١- إختار٢- إختار إضافة.O.K ثم User The Data Block Wizard -٣ثم التالي. Display the Page Next time -٤ثم التالي. Table Or View -٥Browse..-٦إذا مرتبط سابقاً فلن تظھر ھذه الخطوة(. connect ( ثم (system/manager) ٧- أدخل الیوزر نیم والباسوردO.K ثم PHONE ٨- إختار الجدول٩- إختار الكل ثم التالي.١٠ - التالي.ثم نھایة. Create the data block, then call the Layout Wizard. -١١ثم التالي. Display the Page Next time -١٢Canvas = New Canves-١٣ثم التالي. Type = Content١٤ - إختار الكل ثم التالي.١٥ - التالي.ثم التالي. Form -١٦١٧ - التالي.١٨ - نھایة.الأن قم بتغییر الخصائص كما یلي:Phone ١- الداتا بلوكname= ADDCANVAS -٢name= CNVADDCNVADD الموجود في FRAME -٣Update Layout= LOCKEDوغیر في خصائصھم كالتالي: ADD من بللك البیانات NAME,ADDRESS,TEL,EMAIL,MEMO ٤- حدد العناصرReading Order= Left To RightADD إلى الداتا بلك (BUTTONs) الأن أضیف زرینوغیر خصائصھما كما یلي:١- الزر الأول:name= P_CANCELlabel= CANCEL٢- الزر الثاني:name= P_SAVElabel= SAVEADD وأكتب فیھ الكلمة CNVADD الأن أضیف مربع نص فيإجعل شاشتك تظھر بالشكل التالي:واكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED وبالحدث VIEW الموجود في بلك البیانات Add الأن أضیف ترایجر على الزركودGo_block('add');create_record;ADD الكود ھذا أكید نعرف وظیفتھ جیداً وھي لإستدعاء وعرض بلك البیانات الذي سمیناهثم في السطر الثاني فإنھ یقوم بإضافة قید جدید فارغ.وأكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED أضیف إلیھ ترایجر وبالحدث ADD الموجود في بلك البیانات CANCEL أما الزركودDelete_record;Go_block('View');أیضاً واضح وھو حذف العنصر الذي كنا قدر حاولنا إضافتھ .VIEW. وفي السطر الثاني الرجوع إلى بلك البیانات الرئیسیىونكتب فیھ الكود WHEN-BUTTON-PRESSED فسوف نضیف إلیھ ترایجر وبالحدث ADD الموجود في بلك البیانات SAVE أما الزرالتالي:كودCommit_form;Go_block('view');Refresh;وأعتقد أیضاً واضح شرحة فكل ھذا قد مر علینا سابقاً (راجع الدرس السابق)الأن إحفظ البرنامج ونفذه.Add إضغط على الزرسوف تظھر لك نافذة الإضافة.أي عدم الحفظ CANCEL أضف إسم جدید مع بیاناتھ ثم إضغط الزرتلاحظ عدم إضافة أي إسم للقائمة.ما تلاحظ؟) ) SAVE ولكن حاول إضافة إسم جدید مع بیاناتھ ثم إضغط على الزرلقد أنضاف الإسم إلى القائمة ویمكنك النقر علیھ لرؤیة جمیع بیاناتھ التي أضفتھا.ویمكنك تكرار العملیة لإضافة إسم آخر.. وھكذاالیوم سأطرح بعض من الأسئلة:السؤال الأولتطویر البحث كیف یمكن البحث عن أي حرف أو مجموعة حروف حتى لو كانت في وسط الإسم ولیس من الظروري أن تكون في بدایة الإسم.السؤال الثانيتطویر البحث كیف یمكن عرض نتائج البحث بمجرد كتابة أي حرف. أي لانحتاج لإن نضغط على إنترمباشرتاً دون الضغط على إنتر m یعرض جمیع الإسماء المحتویة على الحرف m فمثلاُ عن كتابةوھكذا... mo یعرض مباشرتاً جمیع الأسماء التي تحتوي على الحرفین o وعند إلحاقھا بحرف أخر ولیكن مثلاُالإجابات ھي:إجابة السؤال الأول/بحیث تصبح الجملة كما یلي: VIEW الموجود في بلك البیانات search بالكود الخاص بالعنصر select غیر جملةكودselect name from phone where upper(name)like '%' || upper(:view.search) || '%';إجابة السؤال الثاني/كما یلي: search غیر في خصائص نفس العنصر السابقItem Type= List Itemفارغاً List Elements إجعل العمود أسفل Elements in List=List Style= ComboBoxWHEN-LIST-CHANGED إلى POST-CHANGE وخطوة أخیرة غیر حدث الترایجر منإحفظ البرنامج ونفذ.تلاحظوا بأنكم بمجرد كتابة حرف واحد وقبل أن ترفعوا أصبعكم من لوحة المفاتیح تكون نتائج البحث قد ظھرت في القائمة وتحتوي على جمیعالأسماء التي یوجد بھا ھذا الحرف سواء كان ھذا الحرف في بدایة الإسم أو وسطھ أو في نھایتھ. تقديم بلاغ
بتاريخ: 9 يونيو 200916 سنة comment_159839 Thanks alot for this details >>>>>wish you all the best تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.