الانتقال إلى المحتوى
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

بتاريخ:

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



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

حيث استفدت كثيراً وأعطاني الثقة في نفسي وقد اتفقت مع إحدى الشركات لعمل نظام خاص

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

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

أخوكم/ فؤاد عبده

  • الردود 53
  • المشاهدات 21.5k
  • البداية
  • اخر رد

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

Most Popular Posts

  • الدرس الأول : عمل إضافة تلقائية وحفظ تلقائي لنفرض أن لدي شاشة تكويد المناطق وتحتوي على 2 culomn الأول رقم المنطقة والثاني اسم المنطقة وعند الخروج من الصف الحالي وبعد تعبئة البيانات اريد من البرنام

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

  • السلام عليكم ورحمة الله وبركاته وكل عام وانتم بخير الدرس السادس عشر : طريقة عمل LIST ديناميكية راح يكون شغلنا على الجدولين EMP & DEPT من اسكيما SCOTT/TIGER من الفورم بلدر ننزل حقل رقم الق

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

بتاريخ:
  • كاتب الموضوع

الدرس الأول : عمل إضافة تلقائية وحفظ تلقائي

لنفرض أن لدي شاشة تكويد المناطق وتحتوي على 2 culomn الأول رقم المنطقة والثاني اسم المنطقة

وعند الخروج من الصف الحالي وبعد تعبئة البيانات اريد من البرنامج أن يعطيني ترقيم وحفظ تلقائي

1- الترقيم التلقائي

عند الحدث PRE-INSERT للبلوك نكتب الكود التالي :

declare 
   x number;
begin
   select  nvl(max(loc_id),0)+1 into x from locations ;
   :loc_id:=x;
   end;



2- الحفظ التلقائي

عند الحدث KEY-NEXT-ITEM لآخر عامود في البلوك (الذي من خلاله ينتقل المؤشر الى صف جديد)نكتب الكود التالي :

commit;
next_record;

الدرس الأول عمل إضافة تلقائية وحفظ تلقائي.rar

بتاريخ:

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

الأخ / فؤاد

شكرا لك على هذه المبادرة الطيبة لنشر المعرفة وإفادة الأخوة الأعضاء

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

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

السلام عليكم
واصل واخوي فؤاد وكلنا معاك والله يوفقك ويوفق جميع الاعضاء واكييد الكل رح يستفيدوا

بتاريخ:
  • كاتب الموضوع

السلام عليكم
الدرس الثاني : إضافة فترة (أشهر) الى تاريخ معين في الفورم

نفرض أن لدي برنامج للمشاريع ويحتوي على مدة المشروع (PROJ_MODAH),و تاريخ إبتداء المشروع (PROJ_START)و تاريخ إنتهاء المشروع (PROJ_FINISH)
والمطلوب إني عندما أدخل مدة المشروع وتاريخ إبتداء المشروع يعطيني البرنامج تاريخ إنتهاء المشروع مباشرة
والطريقة كالتالي :-
عند الحدث WHEN-NEW-ITEM-INSTANCE لتاريخ إبتداء المشروع (PROJ_START) نكتب الكود التالي

declare
m date;
begin
m:=Add_months(:AQD.AQD_DATE_TASLEEM,:aqd.AQD_MODDH);
:aqd_date_enthaa:=m;
end;



الدرس الثاني إضافة فترة أشهر الى تاريخ معين في الفورم.rar

بتاريخ:
  • كاتب الموضوع

الدرس الثالث : طريقة الربط بين جدولين

نحتاج في كثير من الأحيان الربط بين جدولين ولكن ليس بشكل Master & Details وإنما بشكل ربط طبيعي من أجل إستخلاص معلومات معينة .
مثال على بيانات الموظفين في اسكيما scott/tiger :
يحتوي جدول Emp على حقل dept_no وهو مفتاح أجنبي Foreign Key تابع لجدول الأقسام Dept الذي يحتوي على حقل dept_no
وهو مفتاح أساسي Primary Key وعن طريق عملية الربط هذه نريد جلب أسماء الأقسام من كتلة البيانات Dept إلى كتلة البيانات Emp
في Form Builder بحيث أنني عندما أدخل رقم القسم يظهر أسم القسم مباشرة في Display Item
ولعمل ذلك نحتاج إلى :-
1- إنشاء عنصر Display Item في كتلة Emp نقوم بتعديل الخصائص التالية
Databsae Item : No
إسم القسم : prompt
2- ربط هذا العنصر (اسم القسم) بحقل اسم القسم (Dname)من جدول الأقسام Dept وذلك من خلال الحدث Post_Change للحقل
dept_no في كتلة Emp ثم نكتب الكود التالي :-

begin
select dname into _name from dept
where dept.deptno=:emp.deptno;
exception
when no_data_found then
message('الرقم المدخل غير صحيح');
end;

الدرس الثالث طريقة الربط بين جدولين.rar

بتاريخ:
  • كاتب الموضوع

الدرس الرابع : الترقيم التلقائي للجدول Detail

لنفرض أن لدي جدول رئيسي للدول ويتكون من حقل رقم الدولة (تسلسل يبدأ من 1) وحقل اسم الدولة
ولدي جدول المدن (ثانوي )مرتبط بجدول الدول والفكرة أني أريد عمل ترقيم تسلسلي للمدن يبدأ من 1 على حسب الدولة - مثال :

1 اليمن : 1 صنعاء 2 تعز 3 مأرب
2 السعودية : 1 المدينة المنورة 2 مكة المكرمة 3 الرياض

وهكذا , يعني أن التسلسل يبدأ من 1 للمدن مع كل دولة . والطريقة كالآتي :-

أولاً : ننشئ جدول الدول Location ويتكون من حقلين :
1- Loc_id pk
Loc_name -2
ثم ندخل البيانات على الجدول .
ثانياً : ننشئ جدول المدن city ويتكون من 3 حقول :
1- Loc_id fk (مرتبط مع حقل Loc_id في جدول الدول Location)
2- city_id
3- city_name

وعلاقة الربط بين الجدولين CITY.CITY_ID = LOCATION.LOC_ID
ومن FORM BUILDER وعند الحدث PRE-INSERT للبلوك city نكتب الكود التالي

declare
x number;
begin
select nvl(max(city_id),0)+1 INTO x from city 
where 
city.loc_id = :locations.loc_id;
:city_id:=x;
end;



ومن الحدث KEY-NEXT-ITEM للحقل city_name نكتب الكود التالي
commit;
next_record;

Detailالدرس الرابع الترقيم التلقائي للجدول.rar

بتاريخ:
  • كاتب الموضوع

الدرس الخامس : التحويل من التاريخ الميلادي إلى الهجري

لنفرض أن لدي تاريخ تعيين الموظفين (ميلادي) , وأريد أن يعطيني البرنامج مايقابله بالتاريخ الهجري .
مثال :
نطبق هذا الدرس على جدول EMP في حساب SCOTT/TIGER :
1- نضيف COLUMN ونسميه DATE_HIJ
2- نفتح FORMS BUILDER ونختار الحدث POST_CHANGE للحقل HIREDATE ثم نكتب الكود التالي :

SELECT    TO_CHAR(:HIREDATE ,'DD-MM-YYYY','NLS_CALENDAR=''ARABIC HIJRAH')   
INTO :DATE_HIJ
FROM DUAL;



الدرس الخامس التحويل من التاريخ الميلادي إلى الهجري.rar

بتاريخ:

الله يكرمك ويجزيك خير
واصل يااخى

بتاريخ:
  • كاتب الموضوع

الله يكرمك ويجزيك خير
واصل يااخى

السلام عليكم
والشكر موصول لك أخي العزيز
كويس إنه في ناس متابعة , ونواصل المسيرة بإذن الله
وانا مش عاوز غير الدعاء
بتاريخ:

السلام عليكم اولا احب ان اشكرك كثيرا على هذا المجهود وعلى هذه البداية المبشرة لطريقة الشرح التى سوف يستفيد منها الكثير انا منهم خاصة انى لسه بادئة فى شغل جديد وكنت احتاج الى اكواد بتعمل ذلك الف شكر ولكن لدى طلب من حضرتك ياريت تنفذه وهو وضع الفورم الى حضرتك بتشرح على اساسها وذلك لكى تصل المعلومة كاملة ولك الشكر

بتاريخ:
  • كاتب الموضوع

السلام عليكم اولا احب ان اشكرك كثيرا على هذا المجهود وعلى هذه البداية المبشرة لطريقة الشرح التى سوف يستفيد منها الكثير انا منهم خاصة انى لسه بادئة فى شغل جديد وكنت احتاج الى اكواد بتعمل ذلك الف شكر ولكن لدى طلب من حضرتك ياريت تنفذه وهو وضع الفورم الى حضرتك بتشرح على اساسها وذلك لكى تصل المعلومة كاملة ولك الشكر


السلام عليكم

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

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

الدرس السادس : طريقة استخدام دوال التجميع

سوف نتعلم في هذا الدرس كيف نقوم بعمل تجميع لرواتب الموظفين واظهار صافي المرتبات وذلك على جدول EMP و اسكيما SCOTT/TIGER
أولاً : ندرج Display Item لإيجاد مجموع المرتبات ونسميه sum_sal على البلوك EMP على أن يكون البلوك من نوع Tabular
ومن خصائص Display Item نقوم بتعديل الخصائص كما هو موضح بالصورة أدناه sum_sal .

ثانياً: ندرج Display Item ونسميه formula لإيجاد صافي مرتبات الموظفين وذلك من خلال جمع المرتب sal مع العمولة comm
ومن خصائص Display Item نقوم بتعديل الخصائص كما هو موضح بالصورة أدناه formula .

ملحوظة هامة :
من خصائص البلوك EMP نضع QUERY ALL RECORDS = YES

post-96835-0-35927600-1304588960_thumb.jpg

post-96835-0-93067000-1304588975_thumb.jpg

الدرس السادس طريقة استخدام دوال التجميع.rar

بتاريخ:
  • كاتب الموضوع

السلام عليكم
الدرس السابع : طريقة استخدام LOV

تم تطبيق هذا المثال على الجدول DEPT اسكيما SCOTT/TIGER

من شاشة object navigatior ندوس على LOVs ثم إضافة ثم تفتح شاشة نأخذ الخيار الأول Use The Lov Wizard ثم ok

ومن الشاشة الثانية نأخذ الخيار الأول New Record Group based on a query

ومن الشاشة الثالثة نضغط على Build SQL Query وبعد ذلك نختار الجدول والعمود ثم ok ثم Next

ومن الشاشة الرابعة ننقل العمود من Record Group Columns الى LOV Columns

ومن الشاشة الخامسة ومن Return value ندرج اسم Column المراد إظهاره في LOV

وبعد ذلك Next حتى نهاية wizard

وآخر خطوة نذهب الى خصائص الحقل ومن الخاصية List Of Value ندرج الإسم.

التطبيق في المرفقات

LOVالدرس السابع طريقة استخدام.rar

بتاريخ:

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

بتاريخ:
  • كاتب الموضوع

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


شكراً على المرور وبالتوفيق للجميع
بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله وبركاته
الدرس الثامن : ادراج صورة للفورم وحفظها في قاعدة البيانات

نضيف جدول للموظفين ندرج فيه 3 أعمدة

CREATE TABLE EMP_PIC ( 
EMP_NO NUMBER PRIMARY KEY,
EMP_NAME VARCHAR2(200),
EMP_PIC BLOB ) 



ومن الفورم نضيف Button لإدراج صورة وعند الحدث When-Button-Pressed نضع الكود التالي

declare
MYFILENAME varchar2(255);
begin
MYFILENAME := get_file_name(file_filter=> 'jpeg files (*.jbg)|*.*|');
read_image_file(MYFILENAME,'JPG','emp_pic');  -- emp_picتمثل الحقل الخاص بالصورة
end;

الدرس الثامن طريقة إدراج صورة من الفورم.rar

بتاريخ:
  • كاتب الموضوع

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

الدرس التاسع : شاشة الدخول

سوف نتعلم في هذا كيفية عمل شاشة دخول مكونة من اسم المستخدم وكلمة المرور .

أولاً : ننشئ جدول باسم pass ونضع فيه الأعمدة التالية :-

USER_NAME VARCHAR2
PASSWORD NUMBER

وفي الفورم نضيف TEXT_ITEM باسم U_NAME و TEXT_ITEM باسم PASS

ونضيف BUTTON للدخول وعند الحدث WHEN_BUTTON_PRESSED نكتب الكود التالي :

IF :PASS IS NOT  NULL THEN     -----------IF_1

DECLARE
PASS_W VARCHAR2(8);
U_NAME VARCHAR2(20);
U_ID NUMBER;

BEGIN
BEGIN 
SELECT PASSWORD INTO PASS_W FROM PASS
WHERE
USER_NAME =:U_NAME ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
PASS_W:='';
END;

IF :PASS=PASS_W THEN         ---------IF_2

	 
هنا نحدد مسار الفورمCALL_FORM('D:\MAIN.FMX' ,hide,do_replace);-- 
EXIT_FORM(NO_VALIDATE,NO_COMMIT);
               ---------IF_3
END IF;                           ---------IF_2
END;

ELSE                              ------------IF_1
MESSAGE('ENTER PASSWORD');
	MESSAGE('ENTER PASSWORD');
	GO_ITEM('PASS');
    	CLEAR_ITEM;
	RAISE FORM_TRIGGER_FAILURE;
	END IF  ;         

شاشة دخول.rar

بتاريخ:
  • كاتب الموضوع

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

الدرس العاشر : طريقة تعبئة list_item من خلال text_item

في هذا الدرس قمت بإنشاء جدول للمدن city ويحتوي على عمودين

city_id number
city_name varchar2

وفي الجدول الثاني أنشأت جدول آخر city_info ويحتوي على الأعمدة التالية :

city_nam varchar2
area varchar2
count_pepo

وبعد ذلك ننشئ الشاشة الأولى city وندخل فيها أسماء المدن

ومن ثم ننشئ الشاشة الثانية city_info وفي هذه الشاشة يبدأ الشغل :

أولاً نقوم بعمل Record Group بإسم ST_RR (تذكروا هذا الإسم جيداً لأننا سوف نستخدمه في الكود) من الجدول city كالتالي

SELECT  '','-1'FROM DUAL 
UNION
SELECT city_name, TO_CHAR(city_id) FROM city



ونقوم بتحويل city_nam من text_item الى list_item

ومن الحدث WHEN-NEW-FORM-INSTANCE للفورم city_info نكتب الكود التالي :

declare b  pls_integer;
begin
b:= populate_group ('ST_RR');
populate_list ('city_info.city_nam','ST_RR');
synchronize;
end;



ولتطبيق المثال ندخل أسماء المدن في الشاشة الأولى city ومن الشاشة الثانية وعند النقر على city_nam نجد أن أسماء المدن قد ظهرت .

list الدرس العاشر تعبئة.rar

بتاريخ:
  • كاتب الموضوع

السلام عليكم

الدرس الحادي عشر : طريقة عمل التفقيط

سنطبق هذا الدرس على جدول emp اسكيما scott/tiger

بعد استدعاء بلوك EMP على الفورم ندرج display item ونجعله summary للحقل sal ونسميه sum_sal

و ندرج display item آخر للتفقيط ونسميه pp ويكون نوع data type = char و Maximum Length = 300

وفي المثال المرفق توجد دالة جاهزة للتفقيط بإسم FU_TAFKEET نقوم بنسخها في Programm Unit ومش حنعدل فيها حاجة

ومن الحدث When-mouse-move للبلوك EMP نكتب الكود التالي :

:pp := FU_TAFKEET(nvl(:SUM_SAL,0));



وعند تحريك الماوس داخل البلوك تظهر النتيجة .

التفقيط.rar

بتاريخ:
  • كاتب الموضوع

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

الدرس الثاني عشر : عرض التاريخ واليوم والوقت على الشاشة

أولاً ندرج Non_DB يعني Data Block فارغة

نقوم بإدراج Display Item للتاريخ الميلادي ونسميه D1 من نوع char

نقوم بإدراج Display Item للتاريخ الهجري ونسميه D2 من نوع char

نقوم بإدراج Display Item لليوم ونسميه days من نوع char

نقوم بإدراج Display Item للوقت ونسميه T1 من نوع char

ومن الحدث WHEN-TIMER-EXPIRED للفورم نكتب الكود التالي :

select to_char(sysdate,'hh:mi:ss') into :T1 from dual;
declare 
TIME VARCHAR2(200);
BEGIN TIME:=:SYSTEM.CURRENT_DATETIME;
end; 



ومن الحدث WHEN-NEW-FORM-INSTANCE للفورم نكتب الكود التالي :

declare
V_TIMER TIMER;
DD VARCHAR2(255);
AR_DATE	VARCHAR2(255);
begin 
V_TIMER:=CREATE_TIMER('Timee',120,REPEAT);
select to_char(sysdate , 'dd-mm-yyyy') into :d1 from dual;
SELECT TO_CHAR(TO_DATE(SYSDATE,'DD-MM-YYYY'), 'DAY','NLS_DATE_LANGUAGE =ARABIC')INTO DD FROM DUAL ;
:DAYS  :=DD;
SELECT    TO_CHAR(SYSDATE ,'DD-MM-YYYY','NLS_CALENDAR=''ARABIC HIJRAH')   
INTO AR_DATE
FROM DUAL;
:D2:=AR_DATE;
EXCEPTION
WHEN OTHERS THEN 
MESSAGE(DBMS_ERROR_TEXT);
END;



وتقبلوا تحياتي ,,,

عرض الوقت والتاريخ على الشاشة.rar

بتاريخ:

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

الأخ / فؤاد

استمر

بارك الله فى وقتك وجهدك

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

تم تثبيت الموضوع ... لما فيه من رسالة نشر العلم والمعرفة ... ورسالة " العرفان بالجميل"

بتاريخ:
  • كاتب الموضوع

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

الأخ / فؤاد

استمر

بارك الله فى وقتك وجهدك

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

تم تثبيت الموضوع ... لما فيه من رسالة نشر العلم والمعرفة ... ورسالة " العرفان بالجميل"


أشكرك أخ أمجد على المتابعة والحرص على منفعة إخواننا في المنتدى

ومن دواعي سروري أن يتم تثبيت الموضوع , وإن شاء الله ربنا يقدرني على بذل المزيد .

تقبل تحياتي ,,

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

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

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

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

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

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.