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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

شفرات بعض الازرار الرئيسية لكل فورم


36 رد (ردود) على هذا الموضوع

#1 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 22 April 2007 - 01:11 AM

السلام عليكم ورحمة الله وبركاته
انا مبتدئة في تعلم الاوراكل والديفيلوبر وافضل طريقة للفهم وتثبيت المعلومات هي عن طريق تعليم الاخرين.
انا انشاء الله اليوم حبدأ هذا الدرس واي استفسار او سؤال او تصحيح ياريت تتكرموا وتعلموني به.
طبعا اولا نفتح الفورم بيلدر
ومن قائمة ملف نختار connect ثم ندخل على scott / tiger.
اما من معالج انشاء بلوك data block wizard او عن طريق الرسم اليدوي نرسم ثلاثة text item
نعطي لكل منهم اسم برمجي وهو اسم خاص بالمبرمج وغير مرئي من قبل المستخدم
ابتدئنا الاسم بالمقطع txt وذلك لسهوله المراجعة لاحقا.
الاول:
name:txt_deptno
column name:deptno
الثاني:
name:txt_dname
column name:dname
والثالث:
name:txt_loc
column name:loc

نرسم ايضا خمسة ازرار على الفورم.
الاول:
label:new اي لانشاء سجل جديد.
احداث triggers الازرار كلها when-button-pressed اي بعد رسم الزر على الفورم من لوحة الادوات ننقر عليه بالزر الايمن ونختار smart triggers ثم نختار الحدث المطلوب when-button-pressed اي عندما يتم الضغط على الزر

زر ادخال سجل جديد:

[code=auto:0]
begin
insert into dept (deptno,dname,loc)values(:txt_deptno,:txt_dname,:txt_loc);
commit;
message('a new record has been added');
end;



شرح الشفرة:
دليل بداية الكود begin
insert into dept(deptno,dname,loc)values(:txt_deptno,:txt_dname,:txt_loc);
اي ادخل الى حقول الجدول dept وهي رقم القسم deptno ,اسم القسم dname, والموقع loc القيم التالية:
قيمة الكائنات المذكورة.فقيمة الكائن المسمىtxt_deptno تذهب للحقل deptno, ووضعت النقاط : امام الاسم لانه كائن في الفورم وليس متغير.وهكذا للبقية مع ضرورة الترتيب.
ومن اجل الحفظ للسجل الجديد يجب عمل commit;
message(' ');تستخدم لارسال رسالة للمستخدم تفيد ان السجل قد تم انشائة وحفظة بنجاح
واخيرا نهاية الكود end;
وانشاء الله اتمم بقية الازرار وهي تعديل،حذف,بحث,وخروج
  • ABOHMAED و samsoft2010 معجبون بهذا

#2 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 22 April 2007 - 01:29 AM

بالنسبة للزر الثاني "تعديل" وضيفته هي تعديل سجل موجود
وبما ان رقم القسم مفتاح اساسي primary key من الافضل عدم تعديله وذلك لامكانية وجود عدة سجلات في جدول الموظفين مرتبطه بهذا الرقم لذلك عند التعيل سنعمل على تغيير الاسم والموقع فقط.
طبعا تبع الحدث when-button-pressed
زر التعديل:
label:update
الشفرة:

begin
update dept set dname=:txt_dname,loc=:txt_loc where deptno=:txt_deptno;
commit;
message('a record has been updated');
end;



الشرح:
يمكن الاستغنا عن begin , end
وهما كم ذكرت للدلالة على بداية ونهاية الكود
update dept set dname=:txt_dname,loc=:txt_loc where deptno=:txt_deptno;
اي عدل الجدول dept وذلك بجعل dname=:txt_dname اي عدل الحقل اسم القسم ليصبح ما هو مكتوب في الكائن txt_dname ,وكذلك بالنسبة للموقع
where deptno=:txt_deptno
بشرط ان يكون رقم القسم مساااوي للكائن txt_deptno وذلك حتى لا يقوم بتعديل بيانات الجدول كامل.(عدل السجل الذي يتحقق فيه الشرط المذكور فقط).
ثم حفظ التعديل commit;
واخيرا نهاية الكود end;

وهذه شفرة الزر delete حذف سجل موجود
begin
delete from dept where deptno=:txt_deptno;
commit;
message('a record has been deleted');
end;



والزر خروج

begin
exit_form;
end;



#3 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 22 April 2007 - 01:42 AM

وهذا كود انا عملته كاختبار لنفسي
بعد ان نقوم بادخال الاسم كاملا في كائن نصي ننقر على زر فيعمل الكود على تقسيم هذا الاسم فيضع الاسم الاول في text item الاول والاسم الاوسط في كائن نصي ثاني والاسم الاخير ان وجد في كائن نصي ثالث.
كود اهبل بس استفيدوا من طريقة عمل الدوال فيه.

declare 
	n number(2);
	f number(2);
	s number(2);

	fname varchar2(10);
	sname varchar2(10);
	lname varchar2(10);
begin
	n:=0;
	f:=0;
	s:=0;
	for i in 1..length(:txt1) loop
		if substr(:txt1,i,1)=' ' then
			n:=n+1;
			if n=1 then
		   fname:=substr(:txt1,1,i);
		 	 f:=i;
			elsif n=2 then 
			 sname:=substr(:txt1,f,i-f);
			 s:=i;
			end if;
		end if;
	end loop;
	
	if n=0 then
		fname:=substr(:txt1,1,length(:txt1));
	elsif n=1 then
		sname:=substr(:txt1,f,length(:txt1));
	elsif n=2 then
	  lname:=substr(:txt1,s,length(:txt1));
	end if;
	
	
	:txtn:=n+1;
	:txtf:=fname;
	:txts:=sname;
	:txtl:=lname;
end;



حيث txt1 هو الكائن الذي استخدمته لكتابة الاسم كاملا
txtf كائن الاسم الاول
txts كائن الاسم الاوسط او الثاني
txtl كائن الاسم الاخير
txtn كائن يظهر عدد الكلمات/الاسماء في txt1 (اي اذا الاسم ثنائي او ثلاثي )
  • Ghaith_Sin, MORAD ANAAM, ABOHMAED و 1 آخر معجبون بهذا

#4 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,702 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at NATCOM Co. Riyadh KSA

تاريخ المشاركة 22 April 2007 - 02:09 AM

الأخت / cattoo

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

سؤال بالنسبة لتجزئة الاسم
كيف يمكن التعامل مع اسم مثل
عبد الرحمن
وليس
عبدالرحمن
-- اى تم اضافة مسافة بين كلمة عبد وكلمة الرحمن

شكرا لك

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#5 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 22 April 2007 - 01:26 PM

شكرا لك اخي Amgad
بالنسبة لما سألته فبرنامجي يعتمد على الفراغات في تقسيم الاسماء وفي هذه الحالة سيعتبر "عبد" اسم ,و"الرحمن" اسم اخر. وهذا احتمال لم افكر فيه .
لكن شكرا على التنبيه وساحاول معالجة هذا الامر

#6 المهباش

المهباش

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 24 April 2007 - 10:30 AM

صراحة موضوع أكثر من رائع

وأنا صراحة كمبتدئ كنت بحاجة إلى للأكواد
شكرا جزيلا ..

#7 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 24 April 2007 - 11:37 PM

اليوم ساحاول وضع شرح بسيط عن كيفية التعامل مع list item
list item لها ثلاثة انواع:
- poplist
- Tlist
- combo box
يمكننا اختيار اي من هذة الانواع من خواص هذا الكائن ,اي بعد رسم الكائن على الفورم اضغط f4 لتظهر لك نافذة property palette ثم من الخاصية list style اختار النوع المناسب لعملك او دعه كما هو افتراضيا poplist.
اذا اردنا اضافة عنصر الى list نستخدم الامر

add_list_element('ListName',index,label,value);

ListName هو اسم الكائن والذي تم تحديد في الخاصية name من نافذة property palette مثلا: lst_deptname
او اي اسم ويفضل ابتداء الاسم بالمقطع lst لسهولة قراءة البرنامج ومراجعته لاحقا. ويجب وضع الاسم بين علامتي اقتباس مفردة 'ListName' .
index (الفهرس) للدلاله على الموقع/رقم الفهرس الذي تريد اضافة العنصر به.
label العنوان الذي سيظهر للمستخدم .value هي القيمة الفعلية لهذا العنصر في قاعدة البيانات(غير ظاهرة للمستخدم).
مثال:
في حدث when-new-form-instance الذي يمكن الوصول اليه بالضغط على triggers (الذي يقع اسفل اسم moduleوالذي هو افتراضيا module1 ) بالزر الايمن ثم اختيار smart triggers ثم when-new-form-instance
والذي يعني عند بدء تنفيذ البرنامج(مثل form load في الفيجوال بيسك).
نكتب الكود التالي:

declare 
	cursor cur_dept is select deptno,dname
	from dept;
	dno dept.deptno%type;
	dnm dept.dname%type;
	i number;
begin
  set_window_property(forms_mdi_window,window_state,maximize);
	set_window_property('window1',window_state,maximize);
	open cur_dept;
	i:=0;
	loop
		fetch cur_dept into dno,dnm;
		exit when cur_dept%notfound;
		add_list_element('lst_dept',i,dnm,dno);
		i:=i+1;
	end loop;
	close cur_dept;
end;




شرح الكود:
اولا cursor يعمل عملية الاستعلام عن اسماء الاقسام وارقامها في جدول الاقسام
ثم تعريف متغيرين dno وعينت له نفس صفات deptno في جدول الاقسام، والمتغير dnm واعطيت له نفس صفات المتغير dname في جدول الاقسام dept. ومتغير ثالث ستتضح مهمته لاحقا في فهرس list item.
بدء الكود begin . لابد انكم لاحظتم ان نافذة التنفيذ تتكون من نافذتين اصلا . احدهما لها الاسم forms_mdi_window وهس النافذة الاكبر. والاخرى window1 اذا لم تقم بتغييره من خصائص window (النافذة الداخلية).
set_window_property(forms_mdi_window,window_state,maximize);
	set_window_property('window1',window_state,maximize);
في هذا الكود قمنا بتكبير النافذتين maximize ومن الممكن جعلهما او احدهما عادية او مصغرة يتغير maximize الى minimize او normal .
open cur_dept فتح cur_dept والذي يحمل اسماء وارقام الاقسام, ثم اسندنا القيمة 0 الى المتغير i وذلك حتى تبدء الاضافة الى list item من البداية (من اول فهرس).
loop بداية دوران (الدوران من اجل المرور على كافة السجلات في cur_dept.)
fetch cur_dept into dno,dnm; اي قم بجلب محتويات السجل الحالي في cur_dept وضعه في dno,dnm.
exit when cur_dept%notfound; وضع شرط للخروج من الدوران عند نهاية السجلات في cur_dept وبدون هذا السطر يحدث دوران لانهائي. ثم اضافة اسم ورقم القسم والذان تم خزنهما في المتغيرين dno,dnm للسجل الحالي الى list_dept في الفهرس i والذي هو في اول سجل =0 ,ثم نقوم باظافة 1 الى i ليصبح i=1 (حتى يتم اظافة اسم ورقم السجل التالي في الفهرس 1 والا سيتم وضعه فوق الاول )، end loop نهاية بلوك الدوران
،ثم close cur_dept اذا لم تقم بوضع هذا السطر لن يتأثر عمل البرنامج وانما سيتم استهلاك الذاكرة(بقاء السجلات في الذاكرة حتى عند عدم الحتجة اليها).
نهاية الكود end;
  • يوسف جباري و mohamed.mansour معجبون بهذا

#8 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 28 April 2007 - 11:00 PM

تابع


لحذف عنصر من القائمة يجب تحديد رقم الفهرس index لهذا العنصر المراد حذفة
delete_list_element('ListName',index);
مثال:
لحذف العنصر الاول في القائمة ,يكون الكود كالتالي:
delete_list_element('ListName',1);

ولحذف جميع عناصر القائمة نحدد اسم القائمة فقط .
clear_list('ListName');

طبعا في البداية وقبل إنشاء List Item يجب معرفة هل نريد أن تكون القيم الظاهرة فيها :
• ثابتة (إستاتيكية) Static : وبالتالي فهي تمتلك قيم ثابتة لا يمكن تعديلها ؛
• متغيرة (ديناميكية) Dynamic : وبالتالي فهي تمتلك قيم متغيرة تعكس صورة السجلات في قاعدة البيانات وجلب البيانات فيها سيكون بواسطة الإستعلام Query .
يمكن تحديد نوع القائمة من خصائصها .حدد القائمة ثم اضغط f4 لتظهر لك نافذة الخصائص، من خاصية element in list
انقر على more .فاذا كنت تريد ان تكون القائمة ثابتة اكتب ماتريد من العناصر الثابتة في المربع الذي سيظهر عند النقر على
more.
صورة
والا ان كنت تريدها قائمة ديناميكية اعمل على مسح وتفريغ كل ما هو موجود في المربع المتكون من الضغط على more.
صورة

اي ان القائمة lst_dept في مثالنا السابق هي قائمة ديناميكية اذ اننا اسعنا بالاستعلام لملئ القائمة باسماء الاقسام وهي متغيرة بتغير جدول الاقسام في قاعدة البيانات scott/tiger.ولم نقم بتعبئتها بقيم ثابتة.
  • يوسف جباري معجب بهذا

#9 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 10 May 2007 - 02:51 PM

alert يشابة message فهو يقوم بعرض رسالة للمستخدم للتنبيه
فمثلا في زر الحذف يفضل دائما عمل تنبيه للمستخدم فيما اذا اراد حقا الحذف ام لا وذلك للحول ضد ضياع المعلومات.فاذا ضغط المستخدم موافق تم الحذف والا لا يحث شي.
لانشاء alert نفتح شاشة navigator من خلال الضغط على مفتاح f3 , حدد alert ثم اضغط موافق ، فتلاحظ ظهور وتكون alert باسم افتراضي ،
انقر عليه ثم f4 وعدل في خصائصة :
name: alert
title :تنبيه
alert style:stop
button 1 label:موافق
button 2 label :الغاء الامر
default alert button: button 2
غيرنا خاصية name الى alert او اي اسم تتذكره , وخاصية title وهي عنوان الرسالة ففجعلناه "تنبيه"،في خاصية alert style :حدد شكله اجعله stop لتظهر علامة الضرب الحمراء اوغيره كما تحب. حدد الازرار التي تريد ظهورها (موافق و الغاء الامر) ، وحدد الزر الافتراضي ( الزر الذي سيتم اختياره من الضغط على enter ) وهو في مثالنا (الزر الثاني "الغاءالامر") وذلك لحماية البيانات من الضغط بالغلط على enter فلا يحدث مسح للبيانات.

والان في trigger زر المسح عدل الشفرة لتصبح كالتالي:
declare
al_id alert;
n number;
begin
set_alert_property('alert',alert_message_text,'هل تريد بالتاكيد حذف سجل ');
al_id:=find_alert('alert');
n:=show_alert(al_id);
if n=alert_button 1 then
delete from dept where deptno=:txt_deptno;
commit;
else
null;
end if;
end;
set_alert_property تعمل على تحديد خاصية message في الرسالة (الرسالة التي ستظهر للمستخدم ).
find_alert تبحث عن alert وتضعه في al_id ( لاحظ ان اسم alert بين علامتي اقتباس مفردة)
show_alert تعمل على اظهاره (لاحظ ان تم الاشارة اليه بالمتغير الذي وجده ولذلك فهو بدون علامتي الاقتباس) ،حتى يقوم المستخدم باختيار احد الزرين ، ويخزن اختياره في n ,فاذا اختار المستخدم "موافق" وهو alert_button1 تم المسح ، والا alert_button2 لايحث شي null.
  • jedghaleb و ASIR معجبون بهذا

#10 khaledmega

khaledmega

    عضو مميز

  • الأعضــاء
  • 838 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 19 May 2007 - 02:23 PM

السلام عليكم ورحمة الله
مجهود جميل يستحق التقدير ؛ اكملى حتى النهاية ولا تجعلى الملل يتسرب اليك.
الكلام ده يبقى جميل اوى لو مع كل درس فورمة مطبق عليها كل الشرح يبقى كده درس متكامل لا يخضع للتخيل .
شكرا وربنا معاكي
ميجا
  • thorra1980 معجب بهذا

من أهـم مواضــيعي :



نفسك تسطب اوراكل 10g وبالصور وتربط بين الداتابيز والديفولبر ؟


للأستفسار عن أى شيء يخص الأوراكل أبس أو اوراكل ديفولبر راسلنى على

e
ng-mega@hotmail.com

 

Oracle Apps Techno-Functional Consultant


Oracle Developer & Instructor

 

Instructor At Next Academy

 

محاضر معتمد لدي نكست أكاديمي

OCA - OCP

م / خالد الشاذلي


#11 hassan

hassan

    مشترك

  • الأعضــاء
  • 182 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 23 May 2007 - 07:34 AM

السلام عليكم ورحمة الله

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

وها انت تضعينا على معظم المواضيع المهمة التي يحتاجها كل نظام

استمري ... وسنتواصل معك
بارك الله فيك
  • thorra1980 معجب بهذا
أخوكم / حسن

بارك الله فيكم على هذا المنتدى الرائع

#12 almary

almary

    عضو

  • الأعضــاء
  • 2 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 June 2007 - 10:24 PM

جزاك الله خيراً

#13 cattoo

cattoo

    عضو

  • الأعضــاء
  • 37 مشاركة

تاريخ المشاركة 03 June 2007 - 01:43 AM

مثال بسيط لاستخدام Alert واستخدام الدالة Month_between

ملفات مرفقة

  • ملف مرفق  example.zip   18.35كيلو   703 عدد مرات التحميل


#14 omar-alreyati

omar-alreyati

    عضو مميز

  • الأعضــاء
  • 596 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 June 2007 - 10:05 AM

ما شاء الله عليك
ويا ريت لو تستمر هيك والى الامام ان شاء الله
وجزاك الله خيراً

بالله عليكم لا تنسوني من دعاءكم الصالح
لا تنسوا أهل غزة والعراق والمجاهدين من دعاءكم

#15 Rolo

Rolo

    عضو

  • الأعضــاء
  • 18 مشاركة

تاريخ المشاركة 21 June 2007 - 07:15 PM

السلام عليكم ورحمة الله ويركاته يا ريت تستمري يا كاتووووووو في الي بيستفيد من شرحك
وبترك الله فيكي,,,,,,,,,