الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

أريد تعلموني الدفلوبر بمثال بسيط

Featured Replies

بتاريخ:

أريد تعلموني الدفلوبر بمثال بسيط

لأنا أبي أتعلم الدفلوبر




متحمس

بتاريخ:

أعتقد جدا صعب ماتقول
لكن ابدأ من هذه المواضيع وياريت يكون معك الماتريل

مواضيع عديدة لكل ممبتدأ

بتاريخ:

هذا مثال بسيط قد يساعدك
-----------------------------------------------------------------------------------
برنامج تلیفونات
أولا تكوین الجدول:
وھو عبارة عن جدول واحد فقط یوجد بھ البیانات التالیة:
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: View
Database Data Block: No
وذلك من أجل ان نجعل بلوك البیانات ھذا غیر مرتبط بالجدول( قد تتسأل Query Data Source Name من أمام الخاصیة phone وإحذف كلمة
لماذا أجعلھ غیر مربوط بالجدول ومن أین سوف أستدعي البیانات) الجواب البیانات سوف نبحث عنھا بإستخدام مربع نص وسیكون بلوك البیانات
فقط لعرض ما حصلنا علیھ من البحث (لاتشغل بالك سوف تتوضح الفكرة مع التقدم في الدرس) View
فسوف نغییر خصائصھا كما یلي: Canvas أما خصائص ساحة العمل
Name: CNVView
ثم إضغط Ctrl وذلك بالضغط على كل عنصر مع الإستمرار بالضغط على المفتاح Name,Address,Tel,Email,Memo الان حدد العناصر
لعرض الخصائص وغیر كما یلي: F المفتاح 4
وذلك من أجل العرض فقط Item Type: Display Item
Database item: No
Canvas: CNVVIEW
Reading Order: Left to Right
فغیرھا كما یلي: FRAME أما خصائص
وذلك من أجل إذا أردت التغییر في حجم الإطار فلا یؤثر على العناصر. Update layout: Locked
telephone الآن إحفظ عملك بالضغط على حفظ وإحفظھ بإسم
وتكملة للدروس فالدرس الثالث الیوم سیكون عن عرض البیانات وعرض نتائج البحث (الأسماء فقط) في قائمة وبمجرد الضغط على إسم شخص من
القائمة تظھر التفاصیل في بلك البیانات.
كیف ستكون عملیة البحث؟؟؟
یتم كتابة حرف أو أكثر من حروف الاسم في عنصر النص ھذا فیتم عرض جمیع الأسماء (الأسماء Text Item لعملیة البحث نحتاج الى عنصر نص
لعرض نتائج البحث.. List Item فقط) التي تبدأ بھذا الحرف أو الحروف في قائمة. إذا سوف نحتاج أیضاً إلى عنصر القائمة
إذا نحتاج الأن لتكوین عنصرین (عنصر نص لكتابة حروف البحث وعنصر القائمة لعرض قائمة بنتائج البحث).
كما في الصورة التالیة: View في بلوك البیانات List Item وعنصر قائمة Text Item ١- كون مربع نص
كما یلي: Text Item ٢- غیر خصائص
Name:SEARCH
Database Item: No
Canvas:CNVVIEW
كما یلي: List Item ٣- غیر خصائص عنصر القائمة
سوف نستخدمھ كثیراً في ھذا الدرس. LISTVIEW وتذكر ھذا الإسم جیداً Name:LISTVIEW
ثم موافق List Elements وإحذف أي نص موجود أسفل Elements in List بجوار الخاصیة More إضغط على
وذلك لمنع من إدخال أي بیانات الى القائمة یدویاً. فسوف یتم إدخال البیانات إلى القائمة بالإعتماد على محتوى مربع نص البحث.
List Style: Tlist
Database Item: NO
Canvas:CNVVIEW
Direction: Left To Right
الأن إحفظ البرنامج ثم نفذه المفروض أن تظھر نافذة التنفیذ كما یلي:
ھذه النافذة كشكل عام تحتاج إلى التعدیل علیھا بالنقط التالیة:
١- شریطي الأدوات والقوائم نرید إخفائھم (لن نحتاجھم في ھذه الشاشة شاشة العرض والبحث)
Telephone Guide نرید تغییرھا إلى Window ٢- إسم نافذة البرنامج 1
maximize ٣- نافذة البرنامج نریدھا مكبرة
لتعدیل ھذه النقاط نقوم بالتالي:
Menu Module من أمام الخاصیة DEFAULT&SMARTBAR نحذف كلمتي Telephone ١- من خصائص الفورم الرئیسي
فھاتین الكلمتین تدلان على شریطي القوائم والأدوات.
نغیر التالي: Window ٢- من خصائص النافذة
Name:Window1
Title: Telephone Guide
ماھو الترایجر؟؟ - Trigger ٣- أما عملیة تكبیر النافذة فسوف نحتاج إلى
الترایجر ھو عبارة عن أكواد برمجیة یتم تنفیذھا في أوقات محددة في البرنامج.
ثم إختار Trigger أنقر بالأیمن على TELEPHONE أي أسفل الفورم Telephone إذا نكون ترایجر على مستوى الفورم
أي أن وقت تنفیذ ھذا الترایجر ھو عند تشغیل الفورم. WHEN-NEW-FORM-INSTANCE ثم إختار SmartTriggers
البسیطة. PL/SQL سوف تفتح نافذة جدیدة سوف نكتب بھا بعض الأكواد بلغة
وسوف نكتب في ھذا الترایجر ما یلي:
كود
set_window_property('window1',window_state,maximize);
Maximize بحیث تصبح 'Window معنى ھذا الكود انھ غیر في خصائص النافذة التي اسمھا ' 1
الأن إحفظ البرنامج ونفذه.
تلاحظ أن النقاط السابقة قد تم تلافیھا.
الان ماذا تلاحظ في نافذة التفیذ أین البیانات التي أدخلناھا في الجدول في أول درس
حاول أن تكتب أي حرف في عنصر نص البحث ثم إضغط إنتر!!!! ؟
لا یوجد شیئ... لم یبحث عن شیئ.. طبعاً لا یوجد شیئ
لإن حالیا كل الذي سویناه فقط الجزء المرئي یبقى الأن دور البرمجة.
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
ھو متغیر من نوع مؤشر أي مصفوفة من البیانات curs أي أن ال cursor curs is select name from phone
select تحتوي على عدد من البیانات ترجعھا جملة الإستعلام
phone السابقة تعود بجمیع الأسماء الموجودة في الجدول select وجملة
متغیر حرفي طولة ٣٠ حرف وسوف نستخدم ھذا المتغیر من أجل خزن الإسم فیھ. a varchar(30
متغیر رقمي قیمتھ الإبتدائیة تساوي صفر وسوف نستخدمھ كرقم السطر في القائمة n number:=0
إیعاز لبدایة البرنامج أو الكود begin
تم شرحھا سابقا والخاصة بتكبیر النافذة set_window_property('window1',window_state,maximize);
وھذه القائمة تعرفوھا جیدا ألم أقل لكم تذكروا إسمھا جیدا listview لتصفیر وحذف أي عنصر من القائمة clear_list ('listview');
curs لفتح المتغیر open curs;
بدایة دوارة loop
a ووضعة في المتغیر 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 سوف تظھر نافذة إختار منھا
كود
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 أعتقد واضحة. وھي تكوین متغیر یحتوي على جمیع بیانات (*) الجدول
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 ھي دالة إستقطاع جزء من النص النص المستقطع ھو substr
view الموجود في بلك البیانات 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_Exit
Label= Exit
Canvas= CNVVIEW
وسیكون ھذا ھو زر الخروج من البرنامج.
بحیث: Button ٤- غیر في خصائص ثاني
Name= B_Delete
Label= Delete
Canvas= CNVVIEW
وسیكون ھذا ھو زر حذف قید.
بحیث: Button ٥- غیر في خصائص ثالث
Name= B_Edit
Label= Edit
Canvas= CNVVIEW
وسیكون ھذا ھو زر تعدیل قید.
بحیث: Button ٦- غیر في خصائص رابع
Name= B_Add
Label= Add
Canvas= CNVVIEW
وسیكون ھذا ھو زر إضافة قید.
الأن یجب أن نبرمج كل زر بحیث یقوم بوظیفتھ:
ونكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED وبالحدث Exit نضیف ترایجر أسفل الزر (Exit) أمر الخروج من البرنامج
كود
Exit_form;
وھذا الكود لایحتاج إلى شرح (وظیفتھ الخروج من البرنامج).
إحفظ البرنامج ثم نفذه
تلاحظ خروجك من البرنامج بسبب أن exit تلاحظ لایؤثر في شیئ لإنھا تخلو من البرمجة، لكن إضغط على زر Exit غیر Button إضغط على أي
الترایجر یوجھھا الى ھذا الأمر.
الثاني والخاص بحذف عنصر. Button الأن ال
من البدیھیات المعروفة انھ قبل حذف أي عنصر فإنھ یجب التنبیھ بذلك أي یجب عرض رسالة تحذیریة تخبرنا بالتأكید على الحذف أم لا.
Alert . ولعرض ھذه الرسالة سوف نحتاج إلى إضافة
جدید وغیر في خصائصھ كما یلي: Alert أضف
Name= MSG
أي رسالة تحذیریة Alert Style= Caution
Yes أي ان الزر الأول في الرسالة یكتب فیھ كلمة Button 1 Label= Yes
No أي الزر الثاني في الرسالة یكتب فیھ كلمة Button 2 Label= No
إجعلھ فارغا لإننا لا نحتاج إلى زر ثالث Button 3 Label
أي إجعل الزر الثاني ھو الزر الإفتراضي (النشط( Default Alert Button= Button 2
Delete الأن نرجع إلى برمجة الزر
ونكتب فیھ الكود التالي: WHEN-BUTTON-PRESSED عند الحدث delete ننشئ ترایجر جدید أسفل الزر
كود
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;
شرح الكود:
یكون فارغ أي لا یحتوي على أي حرف (فإذا تحقق ھذا الشرط 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 Mohammed
MSG أي إعرض الرسالة 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 phone
values
('Ahmed','Yemen','123321','[email protected]','');
insert into phone
values
('Mohammed','Iraq','2258647','[email protected]','');
insert into phone
values
('amer','Sudia','58694725','[email protected]','');
insert into phone
values
('moner','Egypt','55886644','[email protected]','');
insert into phone
values
('Mohsen','Yemen','123355','[email protected]','');
insert into phone
values
('moneraa','Iraq','5541857','[email protected]','');
commit;
-- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - -- - - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- - -- -- - -- - -- - -- - -- - -- -- - -- - --
ولكن كیف یمكن أن أجعل العنصر ینحذف حتى من القائمة بعد الحذف مباشراً وبدون خروج من البرنامج؟؟؟
أي عندما أحذف العنصر یجب أن ینحذف من القائمة ولیس فقط من الجدول. حتى یبین للجمیع بأن الإسم قد تم حذفھ.
أتذكرون الترایجر التي كودناه أسفل الفورم الرئیسي والذي یتنفذ عند تنفیذ البرنامج (ماھي وظیفة ھذا الترایجر؟)
كود
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;
كما شرحناه سابقاً فإن وظیفتھ ھي إستدعاء جمیع الأسماء الموجودة في الجدول وعرضھا في القائمة.
إذا بماذا یفیدنا ھذا الترایجر؟؟؟
ھذا یفیدنا بأن نستدعیھ بعد كل عملیة حذف حتى یستدعي جمیع الأسماء الموجودة في الجدول.(طبعاً الإسم المحذوف غیر موجود في الجدول لإنھ
أنحذف)
وبذلك فسوف لن یتم عرض الإسم المحذف في القائمة.
ویبقى السؤال الأن كیف أقوم بإستدعاء ھذا الترایجر بعد كل عملیة حذف.
سوف نحتاج ھنا إلى إجراء عام یمكن إإستدعاه من أي ترایجر بمجرد فقط ذكر إسمھ. (كیف ذلك؟؟).
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= EDIT
CANVAS -٢
name= CNVEDIT
CNVEDIT الموجود في - FRAME -٣
Update Layout= LOCKED
وغیر في خصائصھم كالتالي: NAME,ADDRESS,TEL,EMAIL,MEMO ٤- حدد العناصر
Reading Order= Left To Right
EDIT إلى الداتا بلك (BUTTONs) الأن أضیف زرین
وغیر خصائصھما كما یلي:
1- الزر الأول:
name= P_CANCEL
label= CANCEL
2- الزر الثاني:
name= P_OK
label= OK
EDIT وأكتب فیھ الكلمة CNVEDIT الأن أضیف مربع نص في
إجعل شاشتك تظھر بالشكل التالي:
EDIT الأن أنتھینا من التصمیم المرئي لبلك البیانات الخاص بشاشة التعدیل
وبقى فقط الجزئ البرمجي...
إحفظ برنامج ثم نفذ..
تلاحظ بأن شاشة التعدیل ھي التي ظھرت ولیست الشاشة الرئیسیة التي أنشئناھا في الدروس السابقة.
كیف أجعل شاشة العرض ھي التي تظھر بالبدایة؟؟؟
إذھب الى الترایجر الذي أسفل الفورم الرئیسیى والذي عدلنا بھ في الدرس الماضي والمسمى ب
WHEN-NEW-FORM-INSTANCE
وأضف الكود التالي في نھایتھ:
كود
GO_BLOCK('VIEW');
VIEW وھذا الكود یعني إذھب وأعرض بلك البیانات الذي أسمھ
الأن إحفظ البرنامج ونفذ.
فعلاً ظھرت الأن شاشة العرض الأساسیة.
لا یحصل شیئ(!!! Edit ( إضغط على الزر
مرة أخرى) أیضاً لا یحصل شیئ(!!!!! Edit إختار على أحد الأسماء من القائمة ثم إضغط على الزر
طبعاً لایحصل شیئ لإن ترایجر زر التعدیل لم نوجھھ حتى الأن
VIEW في بلك البیانات Edit إذا أخرج من شاشة التفیذ وأضیف ترایجر جدید أسفل زر التعدیل
وأكتب فیھ الكود التالي: 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;
شرح الكود:
فارغاً 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= ADD
CANVAS -٢
name= CNVADD
CNVADD الموجود في FRAME -٣
Update Layout= LOCKED
وغیر في خصائصھم كالتالي: ADD من بللك البیانات NAME,ADDRESS,TEL,EMAIL,MEMO ٤- حدد العناصر
Reading Order= Left To Right
ADD إلى الداتا بلك (BUTTONs) الأن أضیف زرین
وغیر خصائصھما كما یلي:
١- الزر الأول:
name= P_CANCEL
label= CANCEL
٢- الزر الثاني:
name= P_SAVE
label= SAVE
ADD وأكتب فیھ الكلمة 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= ComboBox
WHEN-LIST-CHANGED إلى POST-CHANGE وخطوة أخیرة غیر حدث الترایجر من
إحفظ البرنامج ونفذ.
تلاحظوا بأنكم بمجرد كتابة حرف واحد وقبل أن ترفعوا أصبعكم من لوحة المفاتیح تكون نتائج البحث قد ظھرت في القائمة وتحتوي على جمیع
الأسماء التي یوجد بھا ھذا الحرف سواء كان ھذا الحرف في بدایة الإسم أو وسطھ أو في نھایتھ.

  • بعد 1 شهر...
بتاريخ:

Thanks alot for this details >>>>>wish you all the best

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.