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

برنامج دليل التلفونات مع الشرح


إسكندر

Recommended Posts

مرحبا..
كمشاركة أولى لي في هذا المنتدى أود أن أضيف برنامج..
ولكن لن أضع البرنامج إلا في نهاية شرحي للبرنامج
وسوف استمر في شرح هذا البرنامج درس درس
وهذا البرنامج هوتصميم برنامج لدليل التلفونات
وسوف اشرح فيه كل خطوة أقوم بها إن شاء الله
طبعا البرنامج بسيط جدا وليس معقد ويتكون فقط من جدول واحد
فأرجو تفاعلكم معي

أولا سوف أشرح عمل البرنامج:
البرنامج طبعاً للمبتدئين في أوراكل ديلفلوبر وهو يتكون من ثلاثة إطارات:
الإطار الرئيسي وبه البحث عن البيانات وعرضها ومن هذا الإطار يمكن الحذف أيضاً
وهذا الإطار هو الذي ينقلنا إلى بقية الإطارات الأخرى.
الإطار الثاني إطار الإضافة(إضافة بيان جديد)
الإطار الثالث إطار التحديث بالبيانات الموجودة.

ونبدأ على بركة الله ولكن أهم شيئ تفاعلكم ..

تكوين الجدول:
وهو عبارة عن جدول واحد فقط يوجد به البيانات التالية:
الإسمName ، العنوان Address ، التلفون Tel ، الإيميل Email ، ملاحظات Memo
إفتح برنامج SQL * PLUS وإدخل بالمستخدم system/manager
وإنشئ الجدول phone كما يلي:

CREATE TABLE phone(
name varchar(30) primary key,
address varchar(20),
tel varchar(20),
email varchar(30),
memo varchar(50));



لاحظ أن الإسم هو المفتاح الأساسي للجدول أي لايسمح أن يترك الأسم فارغا ولا يسمح أيضاً بإدخال الإسم أكثر من مرة (عدم تشابه الأسماء).
الأن ندخل مجموعة من القيود من أجل أن نطبق عليه بعض الأمثلة في البرنامج:

insert into phone
(name,address,tel,email,memo) values
('Ahmed','Yemen','123321','[email protected]','');
insert into phone
(name,address,tel,email,memo) values
('Mohammed','Iraq','2258647','[email protected]','');
insert into phone
(name,address,tel,email,memo) values
('amer','Sudia','58694725','[email protected]','');
insert into phone
(name,address,tel,email,memo) values
('moner','Egypt','55886644','[email protected]','');
insert into phone
(name,address,tel,email,memo) values
('Mohsen','Yemen','123355','[email protected]','');
insert into phone
(name,address,tel,email,memo) values
('moneraa','Iraq','5541857','[email protected]','');




بعد هذا سوف نبدأ بالدفلوبر ونبدأ بتصميم الإطارات
منتظر تفاعلكم مع الموضوع لكي أكملة..

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

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

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

  • إسكندر

    14

  • زكي الجعماني

    5

  • momo82_1982

    3

  • rofidamohammed

    3

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

الصور المنشورة

مرحبا بك معنا بالمنتدى

اسلوبك جديد وبسيط لعرض البرنامج .. ارجوا ان نستمر لافادة اعضاء المنتدى ..

لقد حددت ان الاسم سيكون هو مفتاح الجدول .. وهذا مع اللغه الانجليزيه لاتوجد تكرار
ولكن ماذا مع الاسماء باللغه العربيه ....
كيف يمكن تفادى حروف الادخال مثل أ الف همزه ... ا الف بدون همزه
ومثل ايضا حرف الهاء قد يكون ه هاء بدون نقطتين أو ة هاء فوقها نقطتين ...
أحمد ........ أحمـــــــد
أحمد ......... احمد
حمزه .......... حمزة

وحروف اخرى كثيرة مثل المد فى أحمــــــــــــــد

بداية موفقه ونحن معك للنهاية ان شاء الله

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

أولا جزاك الله خيرا
ثانيا كان لى بعض التعليق
1- لماذا لم تجعل لكل إسم مسجل فى قاعده بيانات سجل الهاتف كود له ويكون هو المفتاح الرئيسى بدلا من ان يكون المفتاح الرئيسى
هو الاسم
خاصه انه من الممكن ان يتكرر الاسم مرتان
2- أقترح إضافة نموزج ترحيبى فى البداية

مشكور وبإنتظار التالى
ولا تغيب علينا

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

أشكرك أخ أمجد على المتابعة والتنبيه على هذه الفقرة
طبعاً يمكن حل هذه المشكلة أثناء عملية البحث أو عند إضافة إسم جديد وذلك برمجياً
فأنت تعلم بأنه لا توجد دالة تقوم بتفادي هذه المشكلة
ولكن يمكن إستخدام الدالة Replace أي عند البحث او عند الإضافة للجدول يجب تغيير
الإسم الى شكل عام وثابت لكل الأسماء
فمثلاً نقوم بعمل التالي لكل أسم في الجدول:
أولاً نقوم بخزن الأسم في متغير وليكن X مثلاً
ثانياً نقوم بتغيير قيمة X كما يلي:

x:=Replace('x','ـ','');
x:=Replace('x','ا','أ');
x:=Replace('x','ا','إ');
x:=Replace('x','ه','ة');


وهكذا لجميع الإحتمالات الممكنة.
ثالثاً نقوم بمقارنة قيمة X الجديدة مع الإسم الذي تبحث عنه أو الذي تريد إضافته.

ونقوم بهذه الخطوات بداخل حلقة تكرار لكي يتم تطبيقها لجميع الأسماء الموجودة في الجدول
وبذلك نكون قد تفادينا هذه المشكلة.
كلك أيمن ثم Save Traget As لتطبيق المثال السابق

وإن شاء الله سوف نستخدم هذه الطريقة في هذا البرنامج لتوضح الفكرة أكثر..

الأخ ahmedelhamahmy
فأشكرك على ملاحظاتك.
ولكن كنت قد فكرت بطريقة إضافة كود لكل إسم ولكن وجدت ان هذا الكود لن يحل مشكلة التكرار ولذلك لن نحتاج إلى هذا الكود فهو يأخذ مساحة في قاعدة البيانات ولا يحل مشكلتنا.
لإن الكود صحيح لن يتكرر لكن الإسم سوف يتكرر
فمثلاُ الاسم محمد قد يحمل الكود رقم 5 وكذلك قد يحمل الكود رقم 9 في نفس الوقت
ولكن إستخدام الدالة Replace قد تحل مشكلة تكرار الأسماء نوعاً ما
أما بالنسبة للشاشة الترحيبية فسوف نستخدمها إن شاء الله في برنامجنا هذا
وبما أن الشاشة الترحيبة هي من الأشياء الجمالية والشكلية في البرنامج فلذلك سوف نتطرق لها في نهاية البرنامج إذا بقى لنا متسع من الوقت وسوف نركز حالياً على الأشياء الأساسية في البرنامج وبالتفصيل.
وأشكركم جميعاً على تفاعلكم الجيد هذا مع البرنامج

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

ولنبدأ على بركة الله في درس اليوم:

1- افتح برنامج Oracle Form Builder
2- من نافذة 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
datablock12ne.jpg
سوف يظهر لنا في العمود Available Columns أسماء جميع الحقول التي كوناها في الجدول.
إختار الجميع ليتم نقلهن جميعاً إلى العمود Database Item ثم التالي.
datablock28ka.jpg
5- إختار Create the data block, then call the Layout Wizard ثم نهاية
وذلك من أجل إستدعاء Wizard أخر من أجل عمل تصميم لمحتويات بلك البيانات.
6- من الـ Wizard الجديد إختار التالي ثم إختار New Canvas أي ساحة عمل جديدة وإختار النوع Content
datablock37dz.jpg
- ثم إختار الكل لنقل حقول الجدول إلى العمود Displayed Items
من أجل عرض هذه الحقول في ساحة العمل Canvas الجديدة ثم إختار التالي.
8- إختار التالي مرة أخرى أو يمكنك قبل إختار التالي ان تغير من عناوين الأعمدة
وهذا لايؤثر على التسميات الموجودة في الجدول ولكن أفضل تركها كما هي.
datablock47bs.jpg
- بعد إختيار التالي سوف تظهر شاشة لإختار شكل التصميم
إختار Form من اجل عرض صف واحد من البيانات
أما Tabular من أجل عرض عدد من الصفوف.
إختار Form ثم التالي.
10- سوف تظهر الآن شاشة من أجل وضع إسم للإطار الذي سوف يحوي بلك البيانات إجعله فارغا ثم التالي ثم نهاية.

لقد كونا الآن بلك بيانات مرتبط بقاعدة البيانات وبالجدول phone. يجب أن تكون شاشتك كما في الشكل التالي:
pic11jl.jpg
سوف يكون هذا Canvas هو الشاشة الأساسية الأولى ومنه سوف يتم الإنتقال إلى بقية الشاشات الأخرى التي سوف نكونها في الدروس التالية..
أي أن هذا الـ Canvas سوف يكون فقط لعرض النتائج وليس للإضافة والتعديل.
الان نغير من بعض الخصائص:
بلك البيانات المسمى حاليا phone سوف نغيير خصائصة كما يلي:
إنقر على بلك البيانات phone ثم إضغط المفتاح F4 من أجل عرض نافذة الخصائص
غير الخصائص كما يلي:
Name: View
Database Data Block: No
وإحذف كلمة phone من أمام الخاصية Query Data Source Name وذلك من أجل ان نجعل بلوك البيانات هذا غير مرتبط بالجدول( قد تتسأل لماذا أجعله غير مربوط بالجدول ومن أين سوف أستدعي البيانات) الجواب البيانات سوف نبحث عنها بإستخدام مربع نص وسيكون بلوك البيانات View فقط لعرض ما حصلنا عليه من البحث (لاتشغل بالك سوف تتوضح الفكرة مع التقدم في الدرس)
datablock50yj.jpg
أما خصائص ساحة العمل Canvas فسوف نغيير خصائصها كما يلي:
Name: CNVView

الان حدد العناصر Name,Address,Tel,Email,Memo وذلك بالضغط على كل عنصر مع الإستمرار بالضغط على المفتاح Ctrl ثم إضغط المفتاح F4 لعرض الخصائص وغير كما يلي:
Item Type: Display Item وذلك من أجل العرض فقط
Database item: No
Canvas: CNVVIEW
Reading Order: Left to Right
datablock61bp.jpg
أما خصائص FRAME فغيرها كما يلي:
Update layout: Locked وذلك من أجل إذا أردت التغيير في حجم الإطار فلا يؤثر على العناصر.

الآن إحفظ عملك بالضغط على حفظ وإحفظه بإسم telephone

سوف أتوقف هنا اليوم ومنتظر تفاعلكم مع الدروس
وموعدنا قريب بإذن الله ...

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

مرحباً..
أشكرك أخت مايسة وأشكرك أخ alabqari على ردودكم..

وتكملة للدروس فالدرس الثالث اليوم سيكون عن عرض البيانات وعرض نتائج البحث (الأسماء فقط) في قائمة وبمجرد الضغط على إسم شخص من القائمة تظهر التفاصيل في بلك البيانات.(هل وضحت الصور؟؟)
ونبدأ على بركة الله..
كيف ستكون عملية البحث؟؟؟
لعملية البحث نحتاج الى عنصر نص Text Item يتم كتابة حرف أو أكثر من حروف الاسم في عنصر النص هذا فيتم عرض جميع الأسماء (الأسماء فقط) التي تبدأ بهذا الحرف أو الحروف في قائمة. إذا سوف نحتاج أيضاً إلى عنصر القائمة List Item لعرض نتائج البحث..
إذا نحتاج الأن لتكوين عنصرين (عنصر نص لكتابة حروف البحث وعنصر القائمة لعرض قائمة بنتائج البحث).
1- كون مربع نص Text Item وعنصر قائمة List Item في بلوك البيانات View كما في الصورة التالية:
search15ns.jpg
- غير خصائص Text Item كما يلي:
Name:SEARCH
Database Item: No
Canvas:CNVVIEW
search25su.jpg
3- غير خصائص عنصر القائمة List Item كما يلي:
Name:LISTVIEW وتذكر هذا الإسم جيداً LISTVIEW سوف نستخدمه كثيراً في هذا الدرس.
إضغط على More بجوار الخاصية Elements in List وإحذف أي نص موجود أسفل List Elements ثم موافق
وذلك لمنع من إدخال أي بيانات الى القائمة يدوياً. فسوف يتم إدخال البيانات إلى القائمة بالإعتماد على محتوى مربع نص البحث.
List Style: Tlist
Database Item: NO
Canvas:CNVVIEW
Direction: Left To Right
search31ql.jpg
الأن إحفظ البرنامج ثم نفذه المفروض أن تظهر نافذة التنفيذ كما يلي:
pic39os.jpg
هذه النافذة كشكل عام تحتاج إلى التعديل عليها بالنقط التالية:
1- شريطي الأدوات والقوائم نريد إخفائهم (لن نحتاجهم في هذه الشاشة شاشة العرض والبحث)
2- إسم نافذة البرنامج Window1 نريد تغييرها إلى Telephone Guide
3- نافذة البرنامج نريدها مكبرة maximize
لتعديل هذه النقاط نقوم بالتالي:
1- من خصائص الفورم الرئيسي Telephone نحذف كلمتي DEFAULT&SMARTBAR من أمام الخاصية Menu Module
فهاتين الكلمتين تدلان على شريطي القوائم والأدوات.
2- من خصائص النافذة Window نغير التالي:
Name:Window1
Title: Telephone Guide
3- أما عملية تكبير النافذة فسوف نحتاج إلى Trigger (ماهو الترايجر؟؟)
الترايجر هو عبارة عن أكواد برمجية يتم تنفيذها في أوقات محددة في البرنامج .
إذا نكون ترايجر على مستوى الفورم Telephone أي أسفل الفورم TELEPHONE أنقر بالأيمن على Trigger ثم إختار
SmartTriggers ثم إختار WHEN-NEW-FORM-INSTANCE أي أن وقت تنفيذ هذا الترايجر هو عند تشغيل الفورم.
search49qb.jpg
سوف تفتح نافذة جديدة سوف نكتب بها بعض الأكواد بلغة 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; لفتح المتغير curs
loop بداية دوارة
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 وإسمه في قاعدة البيانات ايضاً قيمة المتغير a
end loop; نهاية الدوارة.
end; نهاية البرنامج أو الكود.


إن شاء الله يكون هذا الكود واضح على العموم يجب أن يكون لديك فكرة ولو بسيطة عن لغة PL/SQL
الان إحفظ البرنامج ثم نفذ ماذا تلاحظ؟؟؟
جميع الأسماء التي أضفناها في الدرس الأول قد ظهرت في القائمة listview نتجية جميلة أليس كذلك؟؟
search57tw.jpg
ولكن أين بقية البيانات اي العنوان ورقم التلفون وغيرها؟؟؟
لكي تظهر هذه البيانات نحتاج ألى ترايجر أخر. (أين نحط هذا الترايجر ومتى يجب أن يتنفذ؟؟؟)
هذا ماسوف نتطرق به في الدرس القادم....
أترككم في رعاية الله.

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

مرحباً..
أشكر الأخ زكي الجعماني والأخ Mugaid على ردودهم.

ماذا نريد أن نفعل في درس اليوم؟؟
خطوة أخيرة قبل البدء بعملة البحث..
نريد عندما نضغط على إسم شخص من القائمة، تظهر جميع بياناته في بلك البيانات ، وهذا الشيئ يحتاج إلى ماذا؟؟؟
نعم برمجة بإستخدام PL/SQL والترايجر.
لكن هذه المرة أين سيكون موقع الترايجر؟؟؟
التريجر سيكون عند ضغط الماوس على عنصر القائمة
إذا سوف ننشئ ترايجر تحت listview وبالحدث WHEN-MOUSE-CLICK
أنقر بالز الأيمن على Trigger أسفل listview ثم أختار Smart Triggers ثم إختار Other
search63rh.jpg
سوف تظهر نافذة إختار منها 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
وهكذا لبقية الأسطر الأربعة الأخرى.

الأن إحفظ البرنامج ثم نفذه.
اختار بالماوس على أحد الأسماء(ماذا ينتج؟)
أليست نتيجة رائعة تظهر جميع محتويات هذا الاسم في بلوك البيانات.
search73ag.jpg
الآن وبعد أن انتهينا من عملية العرض بالشكل المناسب ننتقل إلى عملية البحث عن إسم معين.
هل تذكروا في بداية الدرس الثالث عندما أنشئنا عنصر نص Text Item واعطيناه الإسم Search
الأن سوف ننشئ ترايجر أسفل هذا العنصر تحت الحدث POST-CHANGE أي عند حدوث تغيير في هذا العنصر
ونكتب فيه الكود التالي:

declare
cursor curs is select name from phone where upper(name)like '%' || upper(:view.search) || '%';
n varchar(30);
i number:=0;
begin
open curs;
clear_list ('listview');
loop
 fetch curs into n;
 exit when curs%notfound;
 i:=i+1;
 add_list_element('listview',i,n,n);
end loop;
end;


الكود هذا لقد مر علينا سابقاً غير ان هناك فارق بيسط فيه وهي جملة select

select name from phone where upper(name)like '%' || upper(:view.search) || '%';


أي اعرض جميع الأسماء من الجدول phone تحت الشرط التالي:

where upper(name)like '%' || upper(:view.search) || '%';


في هذا الشرط أستخدمنا المعامل like
وسوف يقوم المعامل like بالتعرف على الأسماء التي تحتوي على الكلمة أو الحرف الموجودة في عنصر النص search
وقد أستخدمنا الدالة UPPER او يمكن إستخدام الدالة LOWER بدلاً عنها فوظيفتهما هي أما تحويل جميع الحروف الإنجليزية إلى حروف كبيرة UPPER
أو تحويل جميع الحروف الإنجليزية إلى حروف صغيرة LOWER
(إن شاء الله أكون قد أستطعت أن أقرب الصورة لعمل هذا الكود)
أما بقية الأسطر فهي واضحة وقد تم شرح مثلها سابقاً
الأن إحفظ البرنامج ثم نفذه.
في عنصر النص search أكتب أي اسم او أي حرف تريد البحث عنه
وليكن مثلا حرفي me ثم إضغط إنتر (ماهي النتيجة؟؟)
pic060da.jpg
القائمة عرضة فقط الأسماء التي تحتوي على الحرفين me سواء كان الحرفين في بداية الإسم أو في وسطه أو نهايته إنقر على أي إسم لعرض بياناته.

وبذلك نكون قد أنتهينا من عملية البحث
في الدرس القادم سوف نبدأ بالتمهيد لعمليات الحذف والإضافة والتعديل.

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

ممتاز أخ /أسكندر ..و يعطيك العافيه ان شاء الله
الدرس مهم وواضح..وبدءنا نتعمق في المشروع
استمر..والجميع بانتظارك...
[email protected]
وشكـــرا

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

مرحبا

أشكرك أخي زكي على المتابعة.

في هذا الدرس سوف نقوم بالتمهيد للعميات الأخرى كالحذف والإضافة والتعديل
وبما أن الشاشة التي كوناها سابقاً هي الشاشة الرئيسية
فلذلك سوف نضطر إلى إضافة مجموعة من الأزرار للقيام بالعمليات الإضافة والحذف والتعديل وأيضاً الخروج من البرنامج
فأول خطوة سوف نخطوها اليوم هي إضافة مجموعة من الأزرار (Buttons)
وسوف نحصر هذه الأزرار في إطار مناسب إذا قم بالتالي:
1- على الـ Canvas المسمى 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
وسيكون هذا هو زر إضافة قيد.
exit16go.jpg

الأن يجب أن نبرمج كل زر بحيث يقوم بوظيفته:
أمر الخروج من البرنامج (Exit) نضيف ترايجر أسفل الزر Exit وبالحدث WHEN-BUTTON-PRESSED ونكتب فيه الكود التالي:

Exit_form;


وهذا الكود لايحتاج إلى شرح (وظيفته الخروج من البرنامج).


إحفظ البرنامج ثم نفذه
إضغط على أي Button غير Exit تلاحظ لايؤثر في شيئ لإنها تخلو من البرمجة، لكن إضغط على زر exit تلاحظ خروجك من البرنامج بسبب أن الترايجر يوجهها الى هذا الأمر.

الأن الـ Button الثاني والخاص بحذف عنصر.
من البديهيات المعروفة انه قبل حذف أي عنصر فإنه يجب التنبيه بذلك أي يجب عرض رسالة تحذيرية تخبرنا بالتأكيد على الحذف أم لا.
ولعرض هذه الرسالة سوف نحتاج إلى إضافة Alert .
أضف Alert جديد وغير في خصائصه كما يلي:
Name= MSG
Alert Style= Caution أي رسالة تحذيرية
Button 1 Label= Yes أي ان الزر الأول في الرسالة يكتب فيه كلمة Yes
Button 2 Label= No أي الزر الثاني في الرسالة يكتب فيه كلمة No
Button 3 Label إجعله فارغا لإننا لا نحتاج إلى زر ثالث
Default Alert Button= Button 2 أي إجعل الزر الثاني هو الزر الإفتراضي (النشط)
exit26za.jpg

الأن نرجع إلى برمجة الزر 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 سوف تظهر مباشرتاً الرسالة:
delete11bd.jpg

لإلغاء عملية الحذف إختارعلى الزر No أو إو إضغط على إنتر Enter من لوحة المفاتيح لإن الزر No هو الزر الفعال حالياً
أما إذا أخترت Yes فسوف يتم حذف القيد amer

الأن بعد أن حذفت القيد amer تلاحظ أن القيد مازال موجوداً في القائمة، ولكنه قد حذف من الجدول وللتأكد من عملية الحف
إخرج من البرنامج بالضغط على الزر Exit ثم نفذه من جديد ستلاحظ بأن القيد amer غير موجود ضمن القائمة.

ولكن كيف يمكن أن أجعل العنصر ينحذف حتى من القائمة بعد الحذف مباشرتاً وبدون خروج من البرنامج؟؟؟
لحل هذا المشكلة إنتظروا الدرس القادم

ملاحظة:
يمكنك إضافة القيود التي حذفتها يدوياً بأن تقص الكود التالي وتلصقه في 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;

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

السلام عليكم شكرا اخ اسكندر على هذة البرنامج وهذة المعلومات اريد ان اشارك معكم في هذا البرنامج واتمنى ان الكل يشارك .
اريد ان اضيف تعديل بسيط على البرنامج وانشاء الله يكون جيد لكم وينال اعجابكم :
اذهب الى حقل الذي اسمو SEARCH واجعلو من نوع LISTVALUE واذهب ال F4 ومن هناك اذهب الى خاصية ELEMENT IN LIST واجعلها فارغة كما فعلتم في LISTVEW ومن اذهب الى خاصية LIST STYLE واختار COMBO BOX ومن ثم انسخ الكود الذي كتبتوا في تركر
POST-CHANGE واختار تركر آخر اسمو WHEN-LIST-CHANGE وانسخ الكود فيه ومن ثم احذف التركر POST-CHANGE وبعد ذلك شغل البرنامج سوف تلاحظ انه مجرد ما كتبت اول حرف تتغير القيم في LISTVIEW بدون الحاجة الى عمل ENTER ارجو ان تجربو هاذا الدرس وتخبرونا عن رايكم وشكرا لكم جميعا

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

مرحبا
شكرا جزيلاً لكل الأعضاء الذين ردوا على الموضوع
وطبعاً أعذروني على التأخير الموقع كان مغلق مايفتح

وأشكر الأخ m_dba على إقتراحه الرائع
طبعاً هذا يجعل البحث يتم بمجرد الكتابة فقط لا يحتاج إلى enter
وهذا الفقرة كنت أريد أن أجعلها مقترح تطوير في نهاية البرنامج ولكن ماشاء الله عليك سبقتني وطرحتها.
على العموم سوف أشرحها بالصور في نهاية البرنامج.

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

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

ولكن كيف يمكن أن أجعل العنصر ينحذف حتى من القائمة بعد الحذف مباشرتاً وبدون خروج من البرنامج؟؟؟

أي عندما أحذف العنصر يجب أن ينحذف من القائمة وليس فقط من الجدول. حتى يبين للجميع بأن الإسم قد تم حذفه.
أتذكرون الترايجر التي كوناه أسفل الفورم الرئيسي والذي يتنفذ عند تنفيذ البرنامج (ماهي وظيفة هذا الترايجر؟)
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;



كما شرحناه سابقاً فإن وظيفته هي إستدعاء جميع الأسماء الموجودة في الجدول وعرضها في القائمة.
إذا بماذا يفيدنا هذا الترايجر؟؟؟
هذا يفيدنا بأن نستدعيه بعد كل عملية حذف حتى يستدعي جميع الأسماء الموجودة في الجدول.(طبعاً الإسم المحذوف غير موجود في الجدول لإنه أنحذف)
وبذلك فسوف لن يتم عرض الإسم المحذف في القائمة.

ويبقى السؤال الأن كيف أقوم بإستدعاء هذا الترايجر بعد كل عملية حذف.
سوف نحتاج هنا إلى إجراء عام يمكن إإستدعاه من أي ترايجر بمجرد فقط ذكر إسمه. (كيف ذلك؟؟).
1- إختار Program Units
2- إختار إضافة
3- إختار Procedure
4- إكتب إسم الإجراء بجوار الحقل name وليكن Refresh
5- إختار Ok
delete21pu.jpg

سوف تظهر نافذة جديدة يوجد بها بعض الأسطر
أضف الكود التالي إلى هذه النافذه بحيث تصبح بالشكل التالي:
delete35hc.jpg

كما تلاحظ هو نفس الكود الموجود بالترايجر أسفل الفورم الرئيسي ولكن هناك بعض الإختلافات لإن هذا هنا عبارة عن إجراء قابل للإستدعاء من قبل أي ترايجر أخر.

الأن ماهي التعديلات التي سوف نجريها على الترايجر الأول الذي أسفل الفورم الرئيسي؟؟؟
وماهي التغيرات التي سوف نجريها على ترايجر الحذف؟؟؟
التعديلات ستكون كما في الشكل التالي:
delete48st.jpg

أعتقد بأن التغيرات التي أجريناها لاتحتاج إلى شرح أكثر من هذا؟

الان إحفظ البرنامج ثم نفذه.
ثم حاول أن تحذف أحد القيود؟؟
فعلاً لقد تم حذف الإسم حتى من القائمة.
ولكن بقت مشكلة بسيطة جدأ وهي أن بيانات الشخص المحذوف تبقى في بلك البيانات. (كيف يمكن معالجة هذه المشكلة البسيطة؟؟)ز
الحل بسيط جداً..
في ترايجر الحذف أضف الأسطر التالية:

  :view.name:='';
 :view.Address:='';
 :view.Tel:='';
 :view.Email:='';
 :view.Memo:='';



وظيفة هذه الأسطر هو جعل قيم بلك البيانات فارغة.
delete52dj.jpg

الأن إحفظ البرنامج ثم نفذه.
ثم حاول حذف أحد الأسماء.. (لاتوجد مشاكل الأن.. :angry: .)

أنتهى درس الحذف وبنهايتهة ينتهي درس اليوم ولم يبقى لنا سوي التعديل والإضافة
موعدنا الدرس القادم مع التعديل على البيانات.

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

مرحبا...

درسنا اليوم هو عن التعديل على البيانات
سوف نقوم في هذا الدرس بإنشاء بلك بيانات جديد وCanvas جديد
بلك البيانات سوف نربطه بالجدول PHONE
إذا أول خطوة هي أنشئ بلك بيانات جديد (لكيفية إنشاء بلك البيانات راجع الدرس الثاني..)
وخطوات إنشاء بلك البيانات هي كالتالي ( للتذكير):
1- إختار Data Blocks.
2- إختار إضافة.
3- User The Data Block Wizard ثم O.K
4- Display the Page Next time ثم التالي.
5- Table Or View ثم التالي.
6- Browse..
7- أدخل اليوزر نيم والباسورد (system/manager) ثم connect
8- إختار الجدول PHONE ثم O.K
9- إختار الكل ثم التالي.
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= EDIT
2- CANVAS
name= CNVEDIT
3- FRAME الموجود في CNVEDIT
Update Layout= LOCKED
4- حدد العناصر NAME,ADDRESS,TEL,EMAIL,MEMO وغير في خصائصهم كالتالي:
Reading Order= Left To Right

الأن أضيف زرين (BUTTONs) إلى الداتا بلك EDIT
وغير خصائصهما كما يلي:
1- الزر الأول:
name= P_CANCEL
label= CANCEL
2- الزر الثاني:
name= P_OK
label= OK

الأن أضيف مربع نص في CNVEDIT وأكتب فيه الكلمة EDIT
إجعل شاشتك تظهر بالشكل التالي:
edit10ps.jpg

الأن أنتهينا من التصميم المرئي لبلك البيانات الخاص بشاشة التعديل 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 فسوف يتم حفظ التعديلات.

مبروك لقد أنتهينا من درس التعديل على البيانات.
درسنا القادم هو إضافة بيان (قيد) جديد...

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

الله يعطيك العافية بس فعلا عندك روح وصبر وتسلسل افكار وجزاك الله كل خير ...
اريد ان اطرح مشروعي وهو عبارة عن تعريب الواجهة بالانجليزي والعربي حسب اختيار المستخدم قريبا
ولكن اريد ان اسألك عن كيفية تحميل شرحك بالصور لعلي اقوم انا ايضا بذلك بدلا من تحميل البرنامج وذلك كي يستفيد الآخرون وبارك الله فيك

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

مرحبا بالجميع..
الاخ/اسكندر حقيقة يتميز بالصبر و روح التعاون
بارك الله فيك وزادك علما..
وان شاء الله نستطيع الاسهام معك.
بالتوفيق..
[email protected]
[email protected]

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

شكراً لجميع الأخوة.
وإن شاء الله قريباً نرى برنامج الأخ m_dba على هذا المنتدى وبالشرح بالصور.
ولكيفية الشرح بالصور إتبع التالي:
1- إلتقط الصورة التي تريد أن تظهرها وذلك بعرضها على الشاشة ثم الضغط على المفتاح Print Screen من لوحة المفاتيح.
2- إفتح أي برنامج رسومات وليكن مثلاً برنامج الرسام Paint
3- من القائمة Edit إختار Past. سوف تظهر الصورة التي ألتقطتها في برنامج الرسام.
4- غير في شكل الصورة بحيث يظهر فقط الذي تريد عرضه.
5- إحفظ الصورة بإمتداد jpg
6- إفتح الموقع التالي: http://img297.imageshack.us
7- إضغط على Browse من الموقع ثم إختار الصورة التي حفظتها. ثم Open
8- إضغط على الزر Host it. سوف يبدأ الموقع برفع الصورة إلى الإنترنت. وبعد أن ينتهي سوف يعطيق وصلة توصلك إلى الصورة.
9- انسخ هذه الوصلة. وبذلك نكون قد رفعنا الصورة إلى موقع على الإنترنت ولم يبقى سوي وضع وصلتها على المنتدى.
10- إثناء كتابتك للشرح وفي المكان الذي تريد أن تضع الصورة فيه ضع مؤشر الكتابة هناك. ثم إختار IMG من الخيارات التي يعطيها المنتدى إثناء كتابة الدروس.
11- إلصق وصلة الصورة التي نسختها من الموقع في المربع الخاص بذلك. ثم موفق
سوف يظهر فقط وصلة الصورة ولكن عند إستعراض المشاركة سوف تظهر الصورة التي حفظتها.

جرب هذه الطريقة وإذا هناك شيئ غير واضح يمكنك السؤال عنه.

تحياتي..

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

مرحبا..
درسنا اليوم هو عملية إضافة قيد جديد
ولعمل ذلك سوف نحتاج إلى بلك بيانات جديد خاص بالإضافة وسوف يكون إسمه هو ADD وسوف يكون في Canvas جديد وسيكون إسم الـ Canvas هو CNVADD (أتفقنا..).
أعتقد هذه الخطوات أصبحت بسيطة ولكن للتذكير سوف أسردها لكم وهي:
1- إختار Data Blocks.
2- إختار إضافة.
3- User The Data Block Wizard ثم O.K
4- Display the Page Next time ثم التالي.
5- Table Or View ثم التالي.
6- Browse..
7- أدخل اليوزر نيم والباسورد (system/manager) ثم connect (إذا مرتبط سابقاً فلن تظهر هذه الخطوة.)
8- إختار الجدول PHONE ثم O.K
9- إختار الكل ثم التالي.
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= ADD

2- CANVAS
name= CNVADD

3- FRAME الموجود في CNVADD
Update Layout= LOCKED

4- حدد العناصر NAME,ADDRESS,TEL,EMAIL,MEMO من بللك البيانات ADD وغير في خصائصهم كالتالي:
Reading Order= Left To Right

الأن أضيف زرين (BUTTONs) إلى الداتا بلك ADD
وغير خصائصهما كما يلي:
1- الزر الأول:
name= P_CANCEL
label= CANCEL

2- الزر الثاني:
name= P_SAVE
label= SAVE

الأن أضيف مربع نص في CNVEDIT وأكتب فيه الكلمة ADD

إجعل شاشتك تظهر بالشكل التالي:
add17oy.jpg

الأن أضيف ترايجر على الزر 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 ونكتب فيه الكود التالي:

declare
cursor curs is select name from phone;
 x varchar(30);
 y varchar(30);
 n boolean:=true;
 r number;
begin
open curs;
x:=:add.name;
x:=replace (x,'ـ','');
x:=replace (x,'أ','ا');
x:=replace (x,'إ','ا');
x:=replace (x,'ة','ه');
loop
 fetch curs into y;
 exit when curs%notfound;
 	y:=replace (y,'ـ','');
  y:=replace (y,'أ','ا');
  y:=replace (y,'إ','ا');
  y:=replace (y,'ة','ه');
  if x=y then
   n:=false;
  end if;
end loop; 
if n then
 commit_form;
 go_block('view');
 refresh;
else
 message ('The Name Is Found..');
 end if;
end;


قد يكون هذا الكود طويل. ولكن يمكن أن نكتفي بالكود التالي:

  commit_form;
 go_block('view');
 refresh;


فقط. ولكن لا أنصح بذلك.

ولكن لماذا بهذه الزيادة؟؟
المتابع للدروس الأولى سوف يفهما

أتذكرون رد الأخ Amgad في اول درس عندما قال:

لقد حددت ان الاسم سيكون هو مفتاح الجدول .. وهذا مع اللغه الانجليزيه لاتوجد تكرار
ولكن ماذا مع الاسماء باللغه العربيه ....
كيف يمكن تفادى حروف الادخال مثل أ الف همزه ... ا الف بدون همزه
ومثل ايضا حرف الهاء قد يكون ه هاء بدون نقطتين أو ة هاء فوقها نقطتين ...
أحمد ........ أحمـــــــد
أحمد ......... احمد
حمزه .......... حمزة

وحروف اخرى كثيرة مثل المد فى أحمــــــــــــــد

فكل هذه الزيادة لتفادي ذلك..
ولقد شرحت هذا الكود في وقتها (راجع الدروس السابقة)
وإذا يوجد شيئ غير واضح فأنا في الخدمة...

الأن إحفظ البرنامج ونفذه.
إضغط على الزر Add
سوف تظهر لك نافذة الإضافة.

أضف إسم جديد مع بياناته ثم إضغط الزر CANCEL أي عدم الحفظ
تلاحظ عدم إضافة أي إسم للقائمة.
ولكن حاول إضافة إسم جديد غير مكرر مع بياناته ثم إضغط على الزر SAVE (ما تلاحظ؟)
لقد أنضاف الإسم إلى القائمة ويمكنك النقر عليه لرؤية جميع بياناته التي أضفتها.
الأن أضف إسم جديد وليكن مثلاً (أسامة)
ثم أضف إسم أخر وليكن مثلاً (اسامـــــــه)
لن يقبله فسوف يعتبره مكرر رغم أنه يختلف عنه بالألف والمد والهاء

ويمكنك تكرار العملية لإضافة إسم آخر.. وهكذا

وبذلك نكون قد أنتهينا من برنامج دليل التلفونات والحمد لله..
برنامج بسيط جداً ولكنه يعتبر دفعة قوية للمبتدئين بالأوراكل ديفلوبر...
والذي يريد تطبيق البرنامج عليه أن يفهم كل خطوة يقوم بها وأنا مستعد للإجابه على جميع الإستفسارت الخاصة بالبرنامج.

اترككم في رعاية الله.
وأنا متواجد دائما للرد على إستفسارتكم.
تحياتي....
إسكندر
رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل



×
×
  • أضف...

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

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