تم النشر منذ 8 Nov 2005 (معدل) مرحبا..أنا عضو جديد في هذا المنتدى..وكمشاركة أولى لي أود أن أضيف موضوع في هذا المنتدى..وهذا الموضوع هوتصميم برنامج لدليل التلفوناتوسوف اشرح فيه كل خطوة أقوم بهاطبعا البرنامج بسيط جدا وليس معقد ويتكون فقط من جدول واحد فأرجو تفاعلكم معي وإذا كانت هناك طريقة أخرى أفضل من الطريقة التي استخدمتها فإطرحوها لكي تعم الفائدة على الجميع.أولا سوف أشرح عمل البرنامج:البرنامج طبعاً للمبتدئين في أوراكل ديلفلوبر وهو يتكون من ثلاثة إطارات:الإطار الرئيسي وبه البحث عن البيانات وعرضها ومن هذا الإطار يمكن الحذف أيضاًوهذا الإطار هو الذي ينقلنا إلى بقية الإطارات الأخرى.الإطار الثاني إطار الإضافة(إضافة بيان جديد) الإطار الثالث إطار التحديث بالبيانات الموجودة.ونبدأ على بركة الله ولكن أهم شيئ تفاعلكم ..أولا تكوين الجدول:وهو عبارة عن جدول واحد فقط يوجد به البيانات التالية:الإسمName ، العنوان Address ، التلفون Tel ، الإيميل Email ، ملاحظات Noteإفتح برنامج SQL * PLUS وإدخل بالمستخدم system/managerوإنشئ الجدول 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]','');بعد هذا سوف نبدأ بالدفلوبر ونبدأ بتصميم الإطاراتمنتظر تفاعلكم مع الموضوع لكي أكملة.. تم تعديل 8 Nov 2005 بواسطه إسكندر 2 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 8 Nov 2005 اهلاً بك اخي إسكندر و انا في إنتظار القادم :) و حاول ان تدعم الموضوع في الصور عند الحديث عن الديفلوبر حتى يكون الموضوع مرجع لكل مبتدء هنا ..و السلام ،،بنت اليمن ،، 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 9 Nov 2005 (معدل) مرحبا..لم أجد أي تفاعل..معقولة أكثر من 50 زيارة وقراءة للموضوع ولم يرد سوى عضو واحد وشكرا جزيلاً لبنت اليمن على الرد.على العموم سوف أكمل اليوم الدرس. ولكن إذا لم أجد تفاعل يذكر لن أستمر (أتفقنا..).ولنبدأ على بركة الله:1- افتح برنامج Oracle Form Builder2- من نافذة Welcome to the form Builder إختار Use the Data Block Wizard(لماذا؟) وذلك من أجل تكوين بلوك بيانات (داتا بلوك) جديد مربوط بالجدول phone الذي أنشأناه في الدرس الماضي. ولن تستطيع تطبيق هذا الدرس إلا إذا طبقت الدرس الماضي.3- إختار Display this page next time ثم التالي ثم إختار Table or View ثم التالي، وذلك من أجل أن نستدعي الجدول من قاعدة البيانات.4- لإستدعاء الجدول نختار Browse ثم إكتب إسم المستخدم وكلمة المرور system/manager ثم نختار إسم الجدول وهو كما سميناه سابقاً بإسم phone سوف يظهر لنا في العمود Available Columns أسماء جميع الحقول التي كوناها في الجدول. إختار الجميع ليتم نقلهن جميعاً إلى العمود Database Item ثم التالي.5- إختار Create the data block, then call the Layout Wizard ثم نهاية وذلك من أجل إستدعاء Wizard أخر من أجل عمل تصميم لمحتويات بلك البيانات.6- من الـ Wizard الجديد إختار التالي ثم إختار New Canvas أي ساحة عمل جديدة وإختار النوع Content7- ثم إختار الكل لنقل حقول الجدول إلى العمود Displayed Items من أجل عرض هذه الحقول في ساحة العمل Canvas الجديدة ثم إختار التالي.8- إختار التالي مرة أخرى أو يمكنك قبل إختار التالي ان تغير من عناوين الأعمدة وهذا لايؤثر على التسميات الموجودة في الجدول ولكن أفضل تركها كما هي.[imghttp://www.arabteam2000.com/picload/pics_10_05/04_06_06_12_21_48_1149405708datablock47bs.jpg9- بعد إختيار التالي سوف تظهر شاشة لإختار شكل التصميم إختار Form من اجل عرض صف واحد من البيانات أما Tabular من أجل عرض عدد من الصفوف. إختار Form ثم التالي.10- سوف تظهر الآن شاشة من أجل وضع إسم للإطار الذي سوف يحوي بلك البيانات إجعله فارغا ثم التالي ثم نهاية.لقد كونا الآن بلك بيانات مرتبط بقاعدة البيانات وبالجدول phone. يجب أن تكون شاشتك كما في الشكل التالي:سوف يكون هذا Canvas هو الشاشة الأساسية الأولى ومنه سوف يتم الإنتقال إلى بقية الشاشات الأخرى التي سوف نكونها في الدروس التالية..أي أن هذا الـ Canvas سوف يكون فقط لعرض النتائج وليس للإضافة والتعديل.الان نغير من بعض الخصائص:بلك البيانات المسمى حاليا phone سوف نغيير خصائصة كما يلي:إنقر على بلك البيانات phone ثم إضغط المفتاح F4 من أجل عرض نافذة الخصائصغير الخصائص كما يلي:Name: ViewDatabase Data Block: Noوإحذف كلمة phone من أمام الخاصية Query Data Source Name وذلك من أجل ان نجعل بلوك البيانات هذا غير مرتبط بالجدول( قد تتسأل لماذا أجعله غير مربوط بالجدول ومن أين سوف أستدعي البيانات) الجواب البيانات سوف نبحث عنها بإستخدام مربع نص وسيكون بلوك البيانات View فقط لعرض ما حصلنا عليه من البحث (لاتشغل بالك سوف تتوضح الفكرة مع التقدم في الدرس)أما خصائص ساحة العمل Canvas فسوف نغيير خصائصها كما يلي:Name: CNVViewالان حدد العناصر Name,Address,Tel,Email,Memo وذلك بالضغط على كل عنصر مع الإستمرار بالضغط على المفتاح Ctrl ثم إضغط المفتاح F4 لعرض الخصائص وغير كما يلي:Item Type: Display Item وذلك من أجل العرض فقطDatabase item: NoCanvas: CNVVIEWReading Order: Left to Rightأما خصائص FRAME فغيرها كما يلي:Update layout: Locked وذلك من أجل إذا أردت التغيير في حجم الإطار فلا يؤثر على العناصر.الآن إحفظ عملك بالضغط على حفظ وإحفظه بإسم telephoneسوف أتوقف هنا اليوم ومنتظر تفاعلكم مع الدروسوموعدنا غداً وإن غداً لناظره لقريب... تم تعديل 4 Jun 2006 بواسطه walcom 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 9 Nov 2005 ملاحظة: يوجد تناقض بسيط بين الدرس الأول والدرس الثاني المطبق للبرنامج فقط هو الذي سيكتشفه.. :lol: :D 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 9 Nov 2005 السلام عليكم استمر اخي الكريم مهما قل التفاعل ... فالموضوع سيستفاد منه .. و إن حرمك الاعضاء هنا التفاعل ... فلن يحرمك الله - إن شاء الله - الاجر .. و يكفي بأنه سيمر على الموضوع اعضاء سيدعون لك الله بما افدتهم ،،، :)خالص الشكر مرة اخرى ...بنت اليمن ،، 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 9 Nov 2005 بسم الله الرحمن الرحيم بارك الله فيك اخي العزيز إسكندر واهلا وسهلا بك في المنتدى .,.. لا تزعل يا اخي إسكندر من قلت المشاركه ... فمنتدى الاوراكل يمر عليه الاعضاء مر الكرام .. يا خذ ما يريدونه او يعطون اسالة واجب.. او سئله تجد لها مليون جواب داخل المنتدى ولا يكلف نفسه في البحث في المنتدى .. .. ولقد قلت اعطاء الدروس هنا .. فمرحبا بك ومرحبا بدروسك ... استمر وبارك الله فيك . ساقوم بتثبت الموضوع .. كي يكون لك حافز كبير للمتابعه وللاعضاء للمشاركه .. 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 9 Nov 2005 بارك الله فيك يا اسكندر استمر 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 10 Nov 2005 (معدل) صباح الخيرأشكرك أختى بنت اليمن على تفاعلك وإن شاء الله الأجرعند اللهوأشكرك أخي المشرف على تثبتك للموضوع مما أعطاني حافز كبير للإستمراروأشكرك أخ aseer30 على تشجيعك لي.. وتكملة للدروس فالدرس الثالث اليوم سيكون عن عرض البيانات وعرض نتائج البحث (الأسماء فقط) في قائمة وبمجرد الضغط على إسم شخص من القائمة تظهر التفاصيل في بلك البيانات.(هل وضحت الصور؟؟)ونبدأ على بركة الله..كيف ستكون عملية البحث؟؟؟لعملية البحث نحتاج الى عنصر نص Text Item يتم كتابة حرف أو أكثر من حروف الاسم في عنصر النص هذا فيتم عرض جميع الأسماء (الأسماء فقط) التي تبدأ بهذا الحرف أو الحروف في قائمة. إذا سوف نحتاج أيضاً إلى عنصر القائمة List Item لعرض نتائج البحث..إذا نحتاج الأن لتكوين عنصرين (عنصر نص لكتابة حروف البحث وعنصر القائمة لعرض قائمة بنتائج البحث).1- كون مربع نص Text Item وعنصر قائمة List Item في بلوك البيانات View كما في الصورة التالية:2- غير خصائص Text Item كما يلي: Name:SEARCH Database Item: No Canvas:CNVVIEW3- غير خصائص عنصر القائمة List Item كما يلي: Name:LISTVIEW وتذكر هذا الإسم جيداً LISTVIEW سوف نستخدمه كثيراً في هذا الدرس. إضغط على More بجوار الخاصية Elements in List وإحذف أي نص موجود أسفل List Elements ثم موافق وذلك لمنع من إدخال أي بيانات الى القائمة يدوياً. فسوف يتم إدخال البيانات إلى القائمة بالإعتماد على محتوى مربع نص البحث. List Style: Tlist Database Item: NO Canvas:CNVVIEW Direction: Left To Rightالأن إحفظ البرنامج ثم نفذه المفروض أن تظهر نافذة التنفيذ كما يلي:هذه النافذة كشكل عام تحتاج إلى التعديل عليها بالنقط التالية:1- شريطي الأدوات والقوائم نريد إخفائهم (لن نحتاجهم في هذه الشاشة شاشة العرض والبحث)2- إسم نافذة البرنامج Window1 نريد تغييرها إلى Telephone Guide3- نافذة البرنامج نريدها مكبرة maximize لتعديل هذه النقاط نقوم بالتالي:1- من خصائص الفورم الرئيسي Telephone نحذف كلمتي DEFAULT&SMARTBAR من أمام الخاصية Menu Module فهاتين الكلمتين تدلان على شريطي القوائم والأدوات.2- من خصائص النافذة Window نغير التالي: Name:Window1 Title: Telephone Guide3- أما عملية تكبير النافذة فسوف نحتاج إلى Trigger (ماهو الترايجر؟؟) الترايجر هو عبارة عن أكواد برمجية يتم تنفيذها في أوقات محددة في البرنامج . إذا نكون ترايجر على مستوى الفورم Telephone أي أسفل الفورم TELEPHONE أنقر بالأيمن على Trigger ثم إختار SmartTriggers ثم إختار WHEN-NEW-FORM-INSTANCE أي أن وقت تنفيذ هذا الترايجر هو عند تشغيل الفورم. سوف تفتح نافذة جديدة سوف نكتب بها بعض الأكواد بلغة PL/SQL البسيطة. وسوف نكتب في هذا الترايجر ما يلي:set_window_property('window1',window_state,maximize);معنى هذا الكود انه غير في خصائص النافذة التي اسمها 'Window1' بحيث تصبح Maximizeالأن إحفظ البرنامج ونفذه.تلاحظ أن النقاط السابقة قد تم تلافيها.الان ماذا تلاحظ في نافذة التفيذ أين البيانات التي أدخلناها في الجدول في أول درسحاول أن تكتب أي حرف في عنصر نص البحث ثم إضغط إنتر !!!!؟لا يوجد شيئ... لم يبحث عن شيئ.. طبعاً لا يوجد شيئلإن حاليا كل الذي سويناه فقط الجزء المرئي يبقى الأن دور البرمجة.أول شيئ نريده وقبل البدء بالبحث نريد عرض جميع الأسماء في عنصر القائمة Listview.ولعمل ذلك سوف نحتاج إلى ترايجر على الفورم الرئيسي (نفس التريجر السابق سوف نفتحة ونعدلة إلى الشكل التالي:) declare cursor curs is select name from phone; a varchar(30); n number:=0;begin set_window_property('window1',window_state,maximize); clear_list('listview'); open curs; loop fetch curs into a; exit when curs%notfound; n:=n+1; add_list_element('listview',n,a,a); end loop;end;الأن دعنا نشرح هذا الكود خطوة خطوة:declare عنوان لتعريف المتغيرات ويحتوي على المتغيرات التالية:cursor curs is select name from phone أي أن الـ curs هو متغير من نوع مؤشر أي مصفوفة من البيانات تحتوي على عدد من البيانات ترجعها جملة الإستعلام select وجملة select السابقة تعود بجميع الأسماء الموجودة في الجدولphone (واضح إن شاء الله)a varchar(30 متغير حرفي طولة 30 حرف وسوف نستخدم هذا المتغير من أجل خزن الإسم فيه.n number:=0 متغير رقمي قيمته الإبتدائية تساوي صفر وسوف نستخدمه كرقم السطر في القائمةbegin إيعاز لبداية البرنامج أو الكودset_window_property('window1',window_state,maximize); تم شرحها سابقا والخاصة بتكبير النافذةclear_list ('listview'); لتصفير وحذف أي عنصر من القائمة listview وهذه القائمة تعرفوها جيدا ألم أقل لكم تذكروا إسمها جيداopen curs; لفتح المتغير cursloop بداية دوارةfetch curs into a; جلب أول سطر من المتغير curs ووضعة في المتغير a وعند الرجوع مرة أخرى لهذ الكود فسوف يتم إستدعاء السطر الثاني من المتغير curs وهكذا الى حين الخروج من الدوارة.exit when curs%notfound; شرط الخروج من الدوارة وهو عندما يكون المتغير curs قد أستدعى جميع أسطرهn:=n+1; زيادة قيمة المتغير n بواحد أي يصبح واحد في الدورة الأولى و أثنين في الدورة الثانية وهكذا.add_list_element('listview',n,a,a); إضافة عنصر للقائمة listview في الموقع n واسم العنصرالذي سوف نضيفه في القائمة هو قيمة المتغير a وإسمه في قاعدة البيانات ايضاً قيمة المتغير aend loop; نهاية الدوارة.end; نهاية البرنامج أو الكود.إن شاء الله يكون هذا الكود واضح على العموم يجب أن يكون لديك فكرة ولو بسيطة عن لغة PL/SQL الان إحفظ البرنامج ثم نفذ ماذا تلاحظ؟؟؟جميع الأسماء التي أضفناها في الدرس الأول قد ظهرت في القائمة listview نتجية جميلة أليس كذلك؟؟ولكن أين بقية البيانات اي العنوان ورقم التلفون وغيرها؟؟؟لكي تظهر هذه البيانات نحتاج ألى ترايجر أخر. (أين نحط هذا الترايجر ومتى يجب أن يتنفذ؟؟؟)هذا ماسوف نتطرق به في الدرس القادم....أترككم في رعاية الله. تم تعديل 4 Jun 2006 بواسطه walcom 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 10 Nov 2005 (معدل) بارك الله فيك ولك .. واصل وكلنا معك الى النهايه ان شاء الله :) تم تعديل 10 Nov 2005 بواسطه ANSI 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 12 Nov 2005 (معدل) السلام عليكم..أكمل وإلا لا؟؟؟؟سوف أكمل.. :D ماذا نريد الآن؟؟خطوة أخيرة قبل البدء بعملة البحث..نريد عندما نضغط على إسم شخص من القائمة، تظهر جميع بياناته في بلك البيانات ، وهذا الشيئ يحتاج إلى ماذا؟؟؟نعم برمجة بإستخدام PL/SQL والترايجر.لكن هذه المرة أين سيكون موقع الترايجر؟؟؟التريجر سيكون عند ضغط الماوس على عنصر القائمةإذا سوف ننشئ ترايجر تحت listview وبالحدث WHEN-MOUSE-CLICKأنقر بالز الأيمن على Trigger أسفل listview ثم أختار Smart Triggers ثم إختار Otherسوف تظهر نافذة إختار منها When-Mouse-Click ثم موافق ثم أكتب الكود التالي:declare cursor curs is select * from phone where name=:view.listview; n varchar(30); a varchar(20); t varchar(20); e varchar(30); m varchar(50);begin open curs; loop fetch 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 تحت شرط معينوهو عندما محتوى name في الجدول يساوي محتوي القائمة listview تعرفوها طبعا وموقعها فن بلك البيانات View (View.listview) الناتج سوف يكون سطر واحد فقط من الجدول (منو يعرف ليش؟؟)المتغيرات n,a,t,e,m هي متغيرات حرفية (لماذا بعضها ذات طول 20 وبعضها 30 وواحدة 50؟؟؟)fetch curs into n,a,t,e,m;لاحظ أن في جملة select أستدعينا جميع البيانات وليس الأسم ولذلك يجب في جملة fetch أن نضع قيمة المتغير curs في أكثر من متغيير وهي n للإسم وa للعنوان و t للتلفون و e للإيميل و m للملاحظات.exit when curs%notfound;شرط الخروج من الدوارة.:view.name:=n;وتعني إجعل قيمة العنصر name الموجود في بلك البيانات view يساوي المتغير nوهكذا لبقية الأسطر الأربعة الأخرى.الأن إحفظ البرنامج ثم نفذه.اختار بالماوس على أحد الأسماء(ماذا ينتج؟)أليست نتيجة رائعة تظهر جميع محتويات هذا الاسم في بلوك البيانات.الآن وبعد أن انتهينا من عملية العرض بالشكل المناسب ننتقل إلى عملية البحث عن إسم معين.هل تذكروا في بداية الدرس الثالث عندما أنشئنا عنصر نص Text Item واعطيناه الإسم Searchالأن سوف ننشئ ترايجر أسفل هذا العنصر تحت الحدث POST-CHANGE أي عند حدوث تغيير في هذا العنصرونكتب فيه الكود المبين في الصورة التالية:الكود هذا لقد مر علينا سابقاً غير ان هناك فارق بيسط فيه وهي جملة selectselect name from phone where substr(name,1,length(:view.search))=:view.search;أي اعرض جميع الأسماء من الجدول phone تحت الشرط التالي:substr(name,1,length(:view.search))substr هي دالة إستقطاع جزء من النص النص المستقطع هو name أي الاسم من الجدول phone وبداية الأستقطاع هو من الحرف الأول (1) وبطول length(:view.search) أي بطول عدد الحروف الموجودة في العنصر search الموجود في بلك البيانات viewفإذا هذا الجزء المستقطع من الاسم يساوي محتوي العنصر 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 tel where lower(substr(name,1,length(:view.tis)))lower(:view.tis);يمكن أن تستخدم الدالة Upper بدلاً من lower الأمر بسيط للغاية lower تحول جميع الأحرف إلى أحرف صغيرةو upper تحول جميع الأحرف إلى أحرف كبيرةإحفظ البرنامج ونفذ مرة أخرى أكتب الان m أو M ثم إضغط إنتر (نتيجة رائعة)الان أكتب أكثر من حرف وليكن مثلاً moh ثم إنتر تم عرض فقط الأسماء التي تبدأ بالحروف mohوبذلك نكون قد أنتهينا من عملية البحث (أي إقتراح أخر يمكنكم طرحة لنحله معاً)في الدرس القادم سوف نبدأ بالتمهيد لعمليات الحذف والإضافة. تم تعديل 4 Jun 2006 بواسطه walcom 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 14 Nov 2005 (معدل) مرحبا في هذا الدرس سوف نقوم بالتمهيد للعميات الأخرى كالحذف والإضافة والتعديلوبما أن الشاشة التي كوناها سابقاً هي الشاشة الرئيسية فلذلك سوف نضطر إلى إضافة مجموعة من الأزرار للقيام بالعمليات الإضافة والحذف والتعديل وأيضاً الخروج من البرنامجفأول خطوة سوف نخطوها اليوم هي إضافة مجموعة من الأزرار (Buttons)وسوف نحصر هذه الأزرار في إطار مناسب إذا قم بالتالي:1- على الـ Canver المسمى CNVVIEW إنشئ إطار ثم أربعة Buttons 2- غير في خصائص الإطار بحيث تكون قيمة الخاصية Frame Titel تساوي لاشيئ (أي فارغ)3- غير في خصائص أول Button بحيث: Name= B_Exit Label= Exit Canvas= CNVVIEW وسيكون هذا هو زر الخروج من البرنامج.4- غير في خصائص ثاني Button بحيث: Name= B_Delete Label= Delete Canvas= CNVVIEW وسيكون هذا هو زر حذف قيد.5- غير في خصائص ثالث Button بحيث: Name= B_Edit Label= Edit Canvas= CNVVIEW وسيكون هذا هو زر تعديل قيد.6- غير في خصائص رابع Button بحيث: Name= B_Add Label= Add Canvas= CNVVIEW وسيكون هذا هو زر إضافة قيد.الأن يجب أن نبرمج كل زر بحيث يقوم بوظيفته:أمر الخروج من البرنامج (Exit) نضيف ترايجر أسفل الزر Exit وبالحدث WHEN-BUTTON-PRESSED ونكتب فيه الكود التالي:Exit_form; وهذا الكود لايحتاج إلى شرح (وظيفته الخروج من البرنامج).إحفظ البرنامج ثم نفذهإضغط على أي Button غير Exit تلاحظ لايؤثر في شيئ لإنها تخلو من البرمجة، لكن إضغط على زر exit تلاحظ خروجك من البرنامج بسبب أن الترايجر يوجهها الى هذا الأمر.الأن الـ Button الثاني والخاص بحذف عنصر.من البديهيات المعروفة انه قبل حذف أي عنصر فإنه يجب التنبيه بذلك أي يجب عرض رسالة تحذيرية تخبرنا بالتأكيد على الحذف أم لا.ولعرض هذه الرسالة سوف نحتاج إلى إضافة Alert .أضف Alert جديد وغير في خصائصه كما يلي:Name= MSGAlert Style= Caution أي رسالة تحذيريةButton 1 Label= Yes أي ان الزر الأول في الرسالة يكتب فيه كلمة YesButton 2 Label= No أي الزر الثاني في الرسالة يكتب فيه كلمة NoButton 3 Label إجعله فارغا لإننا لا نحتاج إلى زر ثالثDefault Alert Button= Button 2 أي إجعل الزر الثاني هو الزر الإفتراضي (النشط)الأن نرجع إلى برمجة الزر Delete ننشئ ترايجر جديد أسفل الزر delete عند الحدث WHEN-BUTTON-PRESSED ونكتب فيه الكود التالي:if :view.name is not null then set_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 then delete from phone where name=(:view.name); commit_form; end if;end if;شرح الكود:السطر الأول يوجد به شرط IF والشرط (هل قيمة العنصر name في البلوك View يكون فارغ أي لا يحتوي على أي حرف) فإذا تحقق هذا الشرط فسوف يتم تنفيذ السطور التالية حتى نهاية جملة IF والتي تنتهي بالجملة End if في آخر سطر في الكود.أما إذا لم يتحقق هذا الشرط فلن يتم تنفيذ شيئ.السطر الثاني يتم فيه تغيير في خصائص الـ Alert التي سميناها MSG أي خصائص رسالةالتنبيه حيث يتم تغيير عنوان (Titel) الرسالة (MSG) إلى الكلمة Delete.السطر الثالث يتم فيه أيضا تغيير في خصائص الـ Alert التي سميناها MSG أي خصائص رسالةالتنبيه حيث يتم وضع نص (alert_message_text) الرسالة (MSG) إلى الجملة:Are You Sure to Delete يلي هذه الرسالة يضيف ( || علامة الإضافة) يضيف محتوي العنصر name من البلك VIEW.فإذا كان محتوى العنصر name هو الإسم Mohammed فسوف يكون نص الرسلة هو:Are You Sure to Delete Mohammed السطر الرابع: فيه شرط If يقول show_alert أي إعرض الرسالة MSG فإذا كان الإختيار على الزر الأول(alert_button1 والذي حددنها سابقا في خصائص الـ Alert بالقيمة Yes)فإذا كان الإختيار على هذا الزر (أي تم ضغط هذا الزر) فإن البرنامج سوف يقوم بتنفيذ الأسطر التي تلي هذا الشرط والتي تنتهي بالجملة End If في السطر القبل الأخيرأما إذا كان الضغط على الزر No فإن البرنامج لن يفعل شيئ.السطر الخامس: وهي أهم خطوة أمر الحذف وهو أحذف(Delete) من الجدول Phone عندما يكون الأسم يساوي محتوي العنصر name في البلوك View.السطر السادس: أمر التثبيت. وذلك من أجل تثبيت الحذف.الأن إحفظ البرنامج.طبعاً عملية الحذف الأن تقريباً أكتملت ولكن ينقصها بعض التعديلات من أجل الشكل فقط سوف نناقشها بعد تنفيذ البرنامج.الأن نفذ البرنامج:إختار أحد الأسماء من القائمة وليكن مثلاً الإسم amer طبعاً عند إختياره سوف تظهر جميع بياناته (نعرفها سابقاً)الأن إضغط على الزر delete سوف تظهر مباشرتاً الرسالة:لإلغاء عملية الحذف إختارعلى الزر No أو إو إضغط على إنتر Enter من لوحة المفاتيح لإن الزر No هو الزر الفعال حالياًأما إذا أخترت Yes فسوف يتم حذف القيد amerالأن بعد أن حذفت القيد amer تلاحظ أن القيد مازال موجوداً في القائمة، ولكنه قد حذف من الجدول وللتأكد من عملية الحفإخرج من البرنامج بالضغط على الزر Exit ثم نفذه من جديد ستلاحظ بأن القيد amer غير موجود ضمن القائمة.ولكن كيف يمكن أن أجعل العنصر ينحذف حتى من القائمة بعد الحذف مباشرتاً وبدون خروج من البرنامج؟؟؟لحل هذا المشكلة إنتظروا الدرس القادمملاحظة:يمكنك إضافة القيود التي حذفتها يدوياً بأن تقص الكود التالي وتلصقه في 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; تم تعديل 4 Jun 2006 بواسطه walcom 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 15 Nov 2005 (معدل) سوف نكمل شرحنا اليومأخر نقطة توقفنا عندها في الدرس السابق هىولكن كيف يمكن أن أجعل العنصر ينحذف حتى من القائمة بعد الحذف مباشرتاً وبدون خروج من البرنامج؟؟؟أي عندما أحذف العنصر يجب أن ينحذف من القائمة وليس فقط من الجدول. حتى يبين للجميع بأن الإسم قد تم حذفه.أتذكرون الترايجر التي كوناه أسفل الفورم الرئيسي والذي يتنفذ عند تنفيذ البرنامج (ماهي وظيفة هذا الترايجر؟)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;loop fetch curs into a; exit when curs%notfound; n:=n+1; add_list_element('listview',n,a,a);end loop;end;كما شرحناه سابقاً فإن وظيفته هي إستدعاء جميع الأسماء الموجودة في الجدول وعرضها في القائمة.إذا بماذا يفيدنا هذا الترايجر؟؟؟هذا يفيدنا بأن نستدعيه بعد كل عملية حذف حتى يستدعي جميع الأسماء الموجودة في الجدول.(طبعاً الإسم المحذوف غير موجود في الجدول لإنه أنحذف)وبذلك فسوف لن يتم عرض الإسم المحذف في القائمة.ويبقى السؤال الأن كيف أقوم بإستدعاء هذا الترايجر بعد كل عملية حذف.سوف نحتاج هنا إلى إجراء عام يمكن إإستدعاه من أي ترايجر بمجرد فقط ذكر إسمه. (كيف ذلك؟؟).1- إختار Program Units2- إختار إضافة3- إختار Procedure 4- إكتب إسم الإجراء بجوار الحقل name وليكن Refresh5- إختار Okسوف تظهر نافذة جديدة يوجد بها بعض الأسطرأضف الكود التالي إلى هذه النافذه بحيث تصبح بالشكل التالي:كما تلاحظ هو نفس الكود الموجود بالترايجر أسفل الفورم الرئيسي ولكن هناك بعض الإختلافات لإن هذا هنا عبارة عن إجراء قابل للإستدعاء من قبل أي ترايجر أخر.الأن ماهي التعديلات التي سوف نجريها على الترايجر الأول الذي أسفل الفورم الرئيسي؟؟؟وماهي التغيرات التي سوف نجريها على ترايجر الحذف؟؟؟التعديلات ستكون كما في الشكل التالي: أعتقد بأن التغيرات التي أجريناها لاتحتاج إلى شرح أكثر من هذا؟الان إحفظ البرنامج ثم نفذه.ثم حاول أن تحذف أحد القيود؟؟ فعلاً لقد تم حذف الإسم حتى من القائمة.ولكن بقت مشكلة بسيطة جدأ وهي أن بيانات الشخص المحذوف تبقى في بلك البيانات. (كيف يمكن معالجة هذه المشكلة البسيطة؟؟)زالحل بسيط جداً..في ترايجر الحذف أضف الأسطر التالية: :view.name:=''; :view.Address:=''; :view.Tel:=''; :view.Email:=''; :view.Memo:='';وظيفة هذه الأسطر هو جعل قيم بلك البيانات فارغة.الأن إحفظ البرنامج ثم نفذه.ثم حاول حذف أحد الأسماء.. (لاتوجد مشاكل الأن.. :rolleyes: .)أنتهى درس الحذف وبنهايتهة ينتهي درس اليوم ولم يبقى لنا سوي التعديل والإضافةموعدنا الدرس القادم مع التعديل على البيانات. تم تعديل 4 Jun 2006 بواسطه walcom 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 16 Nov 2005 (معدل) مرحبا...درسنا اليوم هو عن التعديل على البياناتسوف نقوم في هذا الدرس بإنشاء بلك بيانات جديد وCanvas جديدبلك البيانات سوف نربطه بالجدول PHONEإذا أول خطوة هي أنشئ بلك بيانات جديد (لكيفية إنشاء بلك البيانات راجع الدرس الثاني..)وخطوات إنشاء بلك البيانات هي كالتالي ( للتذكير):1- إختار Data Blocks.2- إختار إضافة.3- User The Data Block Wizard ثم O.K4- Display the Page Next time ثم التالي.5- Table Or View ثم التالي.6- Browse..7- أدخل اليوزر نيم والباسورد (system/manager) ثم connect8- إختار الجدول PHONE ثم O.K9- إختار الكل ثم التالي.10- التالي.11- Create the data block, then call the Layout Wizard. ثم نهاية.12- Display the Page Next time ثم التالي.13- Canvas = New Canves Type = Content ثم التالي.14- إختار الكل ثم التالي.15- التالي.16- Form ثم التالي.17- التالي.18- نهاية.الأن قم بتغيير الخصائص كما يلي:1- الداتا بلوك Phone name= EDIT2- CANVAS name= CNVEDIT3- FRAME الموجود في CNVEDIT Update Layout= LOCKED4- حدد العناصر NAME,ADDRESS,TEL,EMAIL,MEMO وغير في خصائصهم كالتالي: Reading Order= Left To Rightالأن أضيف زرين (BUTTONs) إلى الداتا بلك EDITوغير خصائصهما كما يلي:1- الزر الأول: name= P_CANCEL label= CANCEL2- الزر الثاني: name= P_OK label= OKالأن أضيف مربع نص في CNVEDIT وأكتب فيه الكلمة EDITإجعل شاشتك تظهر بالشكل التالي:الأن أنتهينا من التصميم المرئي لبلك البيانات الخاص بشاشة التعديل EDITوبقى فقط الجزئ البرمجي...إحفظ برنامج ثم نفذ..تلاحظ بأن شاشة التعديل هي التي ظهرت وليست الشاشة الرئيسية التي أنشئناها في الدروس السابقة.كيف أجعل شاشة العرض هي التي تظهر بالبداية؟؟؟إذهب الى الترايجر الذي أسفل الفورم الرئيسيى والذي عدلنا به في الدرس الماضي والمسمى بـWHEN-NEW-FORM-INSTANCEوأضف الكود التالي في نهايته:GO_BLOCK('VIEW');وهذا الكود يعني إذهب وأعرض بلك البيانات الذي أسمه VIEWالأن إحفظ البرنامج ونفذ.فعلاً ظهرت الأن شاشة العرض الأساسية.إضغط على الزر Edit (لا يحصل شيئ!!!)إختار على أحد الأسماء من القائمة ثم إضغط على الزر Edit مرة أخرى (أيضاً لا يحصل شيئ!!!!!)طبعاً لايحصل شيئ لإن ترايجر زر التعديل لم نوجهه حتى الأنإذا أخرج من شاشة التفيذ وأضيف ترايجر جديد أسفل زر التعديل Edit في بلك البيانات VIEW ويكون تحت الحدث WHEN-BUTTON-PRESSED وأكتب فيه الكود التالي:if :view.name is not null then go_block('edit'); set_block_property('edit',default_where,'name=:view.name'); execute_query;end if;شرح الكود:يوجد بالكود شرط وهو يجب أن لا يكون العنصر name في بلك البيانات VIEW فارغاً لأجل تنفيذ الأسطر التالية حتى نهاية جملة end if (تذكر هذا الشرط جيداً..)السطر الثاني واضح وهو أمر الذهاب وعرض بلك البيانات EDITالسطر الثالث وهو تغيير في خصائص بلك البيانات EDIT بحيث يصبح يحتوي على الإستعلام التالي الاسم name يساوي العنصر name في بلك البيانات VIEWالسطر الرابع وهو أمر تنفيذ الإستعلامهذين السطرين الثالث والرابع وظيفتهما هو عرض جميع بيانات القيد الذي أسمة يساوي الإسم الموجود في بلك البيانات VIEWالأن نضيف ترايجر أخر في بلك البيانات EDIT تحت الزر CANCEL وبالحدث WHEN-BUTTON-PRESSED ونكتب فيه الكود التالي:go_block('view');واضح معناه أي الرجوع وعرض بلك البيانات VIEW وبدون حفظ أي تغيير.وأخيراً سوف نظيف ترايجر ثالث في بلك البيانات EDIT تحت الزر OK وبالحدث WHEN-BUTTON-PRESSED ونكتب فيه الكود التالي:commit_form;go_block('view');refresh;السطر الأول واضح جداً وهو من أجل تثبيت البيانات التي غيرنا فيها وحفظها في الجدول.السطر الثاني أوضح من الأول، وهو من أجل الرجوع إلى بلك البيانات الرئيسي VIEWأما السطر الثالث فهو موجه لكم أنتم لماذا أستخدمناه وماهي وظيفته؟؟؟؟؟ (راجع الدروس السابقة).الآن إحفظ البرنامج ثم نفذه.1- قبل أن تختار أي إسم من القائمة إضغط على الزر Edit (ماذا يحصل؟) لا يحصل شيئ وذلك بسبب ان العنصر NAME في بلك البيانات VIEW فارغاً بينما الشرط في الترايجر يقول يجب أن يكون الاسم في بلك البيانات VIEW غير فارغ. (ألم أقل لكم تذكروا هذا الشرط جيداً) (كيف أجعله يظهر رسالة تخبرني بأنه لايوجد إسم في العنصر name ؟؟)2- الأن إختار أحد الأسماء الذي تريد أن تعدل في بياناته من القائمة ثم إضغط على Edit سوف تظهر شاشة التعديل وبه جميع بيانات ذلك الشخص. غير بياناته.3- إذا ضغطت على Cancel فلن يتم حفظ التغيرات.4- أما إذا ضغط على OK فسوف يتم حفظ التعديلات.مبروك لقد أنتهينا من درس التعديل على البيانات.درسنا القادم هو إضافة بيان (قيد) جديد... تم تعديل 4 Jun 2006 بواسطه walcom 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 16 Nov 2005 بارك الله فيك اخي اسكندر . واعانك الله وجزاك على كل حرف الف حسنه وعن كل قارئ مليون حسنه .. جزاك الله الف خير الجزاء .. وزاد الرجال من امثالك . 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 17 Nov 2005 أمين يارب العالمينأشكرك اخي المشرف ANSI على متابعتك... 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 17 Nov 2005 ما زلت عند رأئي ... موضوع متميز .. واصل اخي الخبـــير اسكندر .. و سأحاول ان اطبق في اقرب وقت (كنت من اشد المعجبين بأوراكل و ديفلوبر لكن المسارات احياناً تأخدنا بعيداً عنما نحن !!! ) و مبروك على الترقية مرة اخرى :)بنت اليمن ،، 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 17 Nov 2005 أشكرك جداً بنت اليمن على مدحك للموضوعوإن شاء الله يكون الموضوع بقدر المدحوأشكرك أيضاً على التهنئة :rolleyes: 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 17 Nov 2005 بسم الله ما شاء الله تبارك الرحمناخ اسكندر عفوا الخبير اسكندر :rolleyes: من يوميين فقط عندما حصلت على هذا المنتدى الرائع وسجلت فيه موضوعك استقبل اول مشاركة لي B) .. واصل ,.. فمثل هذة المواضيع لها اقبال كبير وفى نفس الوقت موضوعك هو بمثابة درس وفى الدرس نحن لا نستطيع ان نقاطع المدرس :rolleyes: .. وشكراً 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 18 Nov 2005 من الذي بيتابع انا او الاخت بنت اليمن . :) اهلا وسهلا بك اخ Has2 .. ارجو ان تستفد وتفيد. ونشوفك خبير جديد . تابع دروسك يا خبير ........ 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 19 Nov 2005 (معدل) مرحبا..إن شاء الله الكل متابع أخي المشرف وأشكركم على متابعتكم وتشجيعكم.وأشكر ايضا أخي Has2 على المشاركة وأهلا وسهلاً بك معنا.درسنا اليوم هو عملية إضافة قيد جديدولعمل ذلك سوف نحتاج إلى بلك بيانات جديد خاص بالإضافة وسوف يكون إسمه هو ADD وسوف يكون في Canvas جديد وسيكون إسم الـ Canvas هو CNVADD (أتفقنا..).أعتقد هذه الخطوات أصبحت بسيطة ولكن للتذكير سوف أسردها لكم وهي:1- إختار Data Blocks.2- إختار إضافة.3- User The Data Block Wizard ثم O.K4- Display the Page Next time ثم التالي.5- Table Or View ثم التالي.6- Browse..7- أدخل اليوزر نيم والباسورد (system/manager) ثم connect (إذا مرتبط سابقاً فلن تظهر هذه الخطوة.)8- إختار الجدول PHONE ثم O.K9- إختار الكل ثم التالي.10- التالي.11- Create the data block, then call the Layout Wizard. ثم نهاية.12- Display the Page Next time ثم التالي.13- Canvas = New Canves Type = Content ثم التالي.14- إختار الكل ثم التالي.15- التالي.16- Form ثم التالي.17- التالي.18- نهاية.الأن قم بتغيير الخصائص كما يلي:1- الداتا بلوك Phone name= ADD2- CANVAS name= CNVADD 3- FRAME الموجود في CNVADD Update Layout= LOCKED4- حدد العناصر NAME,ADDRESS,TEL,EMAIL,MEMO من بللك البيانات ADD وغير في خصائصهم كالتالي: Reading Order= Left To Rightالأن أضيف زرين (BUTTONs) إلى الداتا بلك ADDوغير خصائصهما كما يلي:1- الزر الأول: name= P_CANCEL label= CANCEL2- الزر الثاني: name= P_SAVE label= SAVEالأن أضيف مربع نص في CNVEDIT وأكتب فيه الكلمة ADDإجعل شاشتك تظهر بالشكل التالي:الأن أضيف ترايجر على الزر Add الموجود في بلك البيانات VIEW وبالحدث WHEN-BUTTON-PRESSED واكتب فيه الكود التالي:Go_block('add');create_recordالكود هذا أكيد نعرف وظيفته جيداً وهي لإستدعاء وعرض بلك البيانات الذي سميناه ADDثم في السطر الثاني فإنه يقوم بإضافة قيد جديد فارغ.أما الزر CANCEL الموجود في بلك البيانات ADD أضيف إليه ترايجر وبالحدث WHEN-BUTTON-PRESSED وأكتب فيه الكود التالي:Delete_record;Go_block('View');أيضاً واضح وهو حذف العنصر الذي كنا قدر حاولنا إضافته. وفي السطر الثاني الرجوع إلى بلك البيانات الرئيسيى VIEW.أما الزر SAVE الموجود في بلك البيانات ADD فسوف نضيف إليه ترايجر وبالحدث WHEN-BUTTON-PRESSED ونكتب فيه الكود التالي:Commit_form;Go_block('view');Refresh;وأعتقد أيضاً واضح شرحة فكل هذا قد مر علينا سابقاً (راجع الدرس السابق)الأن إحفظ البرنامج ونفذه.إضغط على الزر Addسوف تظهر لك نافذة الإضافة.أضف إسم جديد مع بياناته ثم إضغط الزر CANCEL أي عدم الحفظتلاحظ عدم إضافة أي إسم للقائمة.ولكن حاول إضافة إسم جديد مع بياناته ثم إضغط على الزر SAVE (ما تلاحظ؟)لقد أنضاف الإسم إلى القائمة ويمكنك النقر عليه لرؤية جميع بياناته التي أضفتها.ويمكنك تكرار العملية لإضافة إسم آخر.. وهكذاوبذلك نكون قد أنتهينا من برنامج دليل التلفونات والحمد لله..برنامج بسيط جداً ولكنه يعتبر دفعة قوية للمبتدئين بالأوراكل ديفلوبر...ولن أرفق البرنامج لإنه يجب عليك تطبيق الخطوات بنفسك.والذي يريد تطبيق البرنامج عليه أن يفهم كل خطة يقوم بها وأنا مستعد للإجابه على جميع الإستفسارت الخاصة بالبرنامج.وقريباً إن شاء الله سوف أطرح مجموعة من الأسئلة لكيفية تطوير البرنامج... والذي عنده فكرة جيده عليه طرحها لمناقشتها وتطبيقها إن أمكن.كمثلاُ كيف أجعل البرنامج يبحث عن الرقم وليس عن الإسم حسب الإختيار...(أي نجعله متعدد البحث أما عن الإسم أو عن الرقم )حاولوا أولاً تطبيق هذا البرنامج وفهم كل خطوة فيه حتى ننتقل إلى الخطوة التالية وهي خطوة تطوير البرنامج.اترككم في رعاية الله.وأنا متواجد دائما للرد على إستفسارتكم.تحياتي....إسكندر تم تعديل 4 Jun 2006 بواسطه walcom 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 22 Nov 2005 مرحبا من جديد..اليوم سأطرح بعض من الأسئلة:السؤال الأولتطوير البحث كيف يمكن البحث عن أي حرف أو مجموعة حروف حتى لو كانت في وسط الإسم وليس من الظروري أن تكون في بداية الإسم.السؤال الثانيتطوير البحث كيف يمكن عرض نتائج البحث بمجرد كتابة أي حرف. أي لانحتاج لإن نضغط على إنترفمثلاُ عن كتابة m يعرض جميع الإسماء المحتوية على الحرف m مباشرتاً دون الضغط على إنتروعند إلحاقها بحرف أخر وليكن مثلاُ o يعرض مباشرتاً جميع الأسماء التي تحتوي على الحرفين mo وهكذا...منتظر ردودكم للإجابة على هذه الأسئلةحاولوا حتى وإن أخطأتم. فليس من العيب أن تحاول وتخطئ العيب أنك لا تحاول أبداً.. 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 24 Nov 2005 اين الحلولمش معقول ولا واحد عرف يجاوب على هذه الأسئلة البسيطةلتسهيل الحلالسؤال الأول غير في جملة select واستخدم المعامل like :D والسؤال الثاني غير نوع العنصرItem Type :rolleyes: :blink: 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 24 Nov 2005 ماشاء الله تبارك اللهللاسف كنت منقطع عن المنتدىوتفاجأت عن موضوع تصميم برنامج عن طريق ال FORM فعلا هذا القسم يفتقد للبرامج وهجرة مبرمجي اوركل من القسموباذن الله من اليوم نبداء خطوة خطوة معاكوشكرا لك 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
قام بالرد منذ 27 Nov 2005 :D يعني انت مصمم انك ما تواصل الا بالاجوبه .. الاول : SELECT ename FROM emp WHERE ename LIKE 'S%';الثاني : ←اضغط على السهم الاحمر والان واصل الدروس :D 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه