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

دروس متواضعه حول Forms


محمد علي الحيلان

Recommended Posts

اخواني في هذا المنتدى الرائع تهانينا بالشكل الجديد للمنتدى
واشكر القائمين على هذا المنتدى الله يحفظهم من كل مكروه000
السلام عليكم ورحمة الله وبركاتة:- وبعد
اولا- احب ان اشارك بهذه الدروس المتواضعه
ثانيا- هذه الطريقة تعلمتها من استاذي الله يحفظه ( من الاردن الشقيق)
بدون ذكر اسمه فهو غني عن التعريف0
ثالثا- ارجو من احبتي عدم الانتدفاع والتفعال مع الموضوع حتى ينتهي
ويكفيني ان اشاهد عدد القراء فقط0
رابعا – انا عبد لله فقير قد اخطي قطعا فارجو تحملي وتصحيح اخطائي
خامسا - هذه الطريقة انشأت بها برامج عملاقه تعمل منذو سنوات والحمد لله
اخيرا – ارجو ان لاتنسونا من صالح الدعاء

يتبع الدرس ( الاول ) انشاء الله

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

الدرس الاول
بسم الله نبداء
1- انشي مشروع جديد MODULE
2- انشي ثلاثة CANVAS
أ‌- الاولى اسمها main
ب‌- الثانية اسمها BUTTON
ت‌- الثالثة اسمها CANVAS3
عدل في خصائي ال main
canvas typ = content
width = 600
Height = 400
عدل في خصائي ال BUTTON
canvas typ = stacked
Viewport X Position = 0
Viewport Y Position = 330
Viewport Width = 600
Viewport Height = 40
width = 600
Height = 40
عدل في خصائي ال CANVAS3
canvas typ = stacked
Viewport X Position = 1
Viewport Y Position = 0
Viewport Width = 600
Viewport Height = 40
width = 600
Height = 40
--
غير لون خلفية ال BUTTON وال CANVAS3 بلون واحد يختلف عن ال Main
عدل في خاصية ال WINDOW1
Style = Dialog WINDOW
Move Allowed = no
Resize Allowed = no
Maximize Allowed = no
Minimize Allowed = no
width = 600
Height = 400

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

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

الدرس الثاني
بسم الله نبداء:-
الجداول المستخدمة في هذا الدرس جدول DEPT - Master وجدول EMP – Details ---- من المستخدم SCOTT
اولا- ننشي Block يدوي ونسمية Block2
اضف في هذا البلوك Text item ولنسمية SYS_DATE
عدل في خصائي هذا ال text item
Data type = Date
Maximum Length = 11
Initial Value = $$date$$
Format Mask = DD-MON-YYYY
Database Item = no
CANVAS = CANVAS3
في WHEN-NEW-ITEM-INSTANCE Triggers اكتب التالي
Go_block('Button');
(( لاتستعجل ))
عرض ال CANVAS3 امامك قم بانشاء كائن نوع نص اكتب به( بسم الله الرحمن الرحيم)
انشي نص اخر اكتب به ( مجموعة مستخدمي اوراكل العربية )

==
ثانيا – ننشي Block يدوي ونسمية BUTTON
اضف في هذا البلوك عدد (عشرة) من نوع Bush Button
نسمي الاول -- SCROLL_UP وفي خاصية Lable ( السجل الاخير)
وفي خاصية BUTTON = CANVAS
نسمي الثاني -- UP وفي خاصية Lable ( السجل التالي)
وفي خاصية BUTTON = CANVAS
نسمي الثالث -- DOWN وفي خاصية Lable ( السجل السابق)
وفي خاصية BUTTON = CANVAS
نسمي الرابع -- SCROLL_DOWNوفي خاصية Lable ( السجل الاول)
وفي خاصية BUTTON = CANVAS
نسمي الخامس -- QUERYوفي خاصية Lable ( بـحـث )
وفي خاصية BUTTON = CANVAS
نسمي السادس -- NEWوفي خاصية Lable ( جديد )
وفي خاصية BUTTON = CANVAS
نسمي السابع -- EDITوفي خاصية Lable ( تعديل )
وفي خاصية BUTTON = CANVAS
نسمي الثامن -- SAVEوفي خاصية Lable ( حفظ )
وفي خاصية BUTTON = CANVAS
نسمي التاسع -- CANCELوفي خاصية Lable ( الغاء )
وفي خاصية BUTTON = CANVAS
نسمي العاشر -- EXITوفي خاصية Lable ( خروج )
وفي خاصية BUTTON = CANVAS

==
اعرض هذا CANVAS امامك بواسطة المفتاح F2 قم بتنسيق هذه الاوامر حتى تاخذ الشكل الجمالي المناسب من ناحية البعد عن بعضها والمحاذاه و الخ ----
لاتقم بتنفيذ المشروع
==
يتبع الدرس الثالث انشاء الله

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

الدرس الثالث
بسم الله نبداء
اين وصلنا نعم ؟؟
1- اضغط بزر الفارة الايمن على سطح الكنفز ال Main بعد عرضها امامك بواسط المفتاح F2 اختار Data block Wizard
اكمل خطوات انشاء بلوك DEPT اختار جميع الحقول وليكن نوع البلوك Form
3- مرة اخرى اضغط بزر الفارة الايمن على سطح الكنفز ال Main اختار Data block Wizard
اكمل خطوات انشاء بلوك EMP اختار جميع الحقول وليكن نوع البلوك Tabular عدد السجلات خمسة
4- لاتنسى انشاء العلاقة Relations بين الجدولين
5- هام جدا ؟؟؟؟ قم بأنشاء Text Item في البلوك الاول DEPT وليكن اسمها
DUMMY_ITEM ويجب ان تكون الاولى في الترتيب وخصائصها كالاتي:-
Data Type =char
Maximum length = 10
Database item = no غير مربوطه بالداتا بيس
CANVAS = Main
اكتب بجوارها عنوان وليكن مثلا (الرقم ) او(DEPTNO )
لماذا – لاننا مستقبلا سوف ننسخ قيمة ال DEPTNO اليها ونتعامل معها على انها DEPTNO بواسطة code وهنا يكمن بداية الاحتراف لاننا سوف نتخلص من رسالة الحفظ بمجرد تنفيذ الخطوات السابقة0
6- هام جدا ؟؟؟؟ قم بأنشاء Display item في البلوك الاول DEPT وليكن اسمها
REC_STAT ويجب ان تكون الثانية في الترتيب وخصائصها كالاتي:-
Data Type =char
Maximum length = 7
Database item = no غير مربوطه بالداتا بيسس
CANVAS = Main
Visible = no مخفية عن الانظار غير مرئية – لاتحتاج الى كتابة عنوان لها0
7- قم باخفاء ال Text item والتي اسمها DEPTNO في البلوك DEPT
أي -- Visible = no غير مرئية -- فقط
لاتستعجل -- لاتقم بتنفذ المشروع ولاتعمل Compile حفظ المشروع فقط


يتبع الدرس الرابع انشاء الله

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

السلام عليكم ورحمة الله وبركاته
الف شكر اخي الكريم على هذا المجهود الرائع
وان شاء الله تعم الفائدة للجميع من هذه الدروس
وشكراً

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

اخى الفاضل جزاك الله عنا خير وجعلة فى ميزان حسناتك
واتمنى من الله ان تعم اللفائدة على الجميع


لا إلـــــــــــــــه إلا اللـــــــــــــــــــــــــــــــــــه مــــــــحـــــــــــــمــــــد رســــــــــــول اللــــــــــــــــــــــه

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

شكرا للاخوة الذين شاركو وايضا للجميع اسأل الله عن يجعل مانقوم به جميعا نهضة للاسلام والمسلمين0و ان يجعله في موزين حسناتنا0
اما بالنسبة للاخي الذي يسال ضع Triggers تحت Text Item ال SYS_DATE
لماذا ( عندما يقوم النظام يذهب التركيز الى Block Button ايضا لو ضغط المستخدم على مفتاح الادخال يجلب اخر سجل )
الدرس الرابع
بسم الله نبداء
اضغط مفتاح F3 الى شاشة Object Navigator
1- انشي عدد اثنين ALERTS
2- الاولى اسمها ERR_ALERT خصائصها كالاتي:-
أ‌- =Title مجموعة مستخدمي اوراكل العربية
ب‌- Alert Style =Caution
ت‌- Button 1 Label = OK
ث‌- Button 2 Label = اتركه فارغ
ج‌- Default Alert Button = Button1
3- والثانية اسمها CAN_ALERT
o = Title مجموعة مستخدمي اوراكل العربية
• Alert Style =Stopٍ
• Button 1 Label = OK
• Button 2 Label = NO
• Button 3 Label = اتركه فارغ
• Default Alert Button = Button1
انتهت الامور البسيطة والمعروفه لدى الجميع
الان نأتي الى الصميم كما يقال Triggers على مستوى ال MODULE
1- Triggers PRE-FORM اكتب الكود التالي :-
الشرح

-- اسم الجدول الماستر
:global.table_name:='DEPT';
-- اسم الحقل المفتاح الاساسي في الجدول الماستر
:global.prmkey_col:='DEPT.DEPTNO';
-- عرض الكنفز الاساسية
show_view('main');
-- متغير نضع به البحث
:global.query_val :='';
-- متغير النظام نضع به الاوامر
:global.option :='';
-- متغير نستعملة لابطال مؤقت لبعض الاوامر
:GLOBAL.BRN_CD := '01';
-- بروسيدر لتفعيل الجدول الاساسي Procedure
disable_ DEPT;
-- بروسيدر لتفعيل الاوامر Procedure
default_button;
------------------
set_item_property('DEPT.dummy_item',enabled,property_true);
set_item_property('DEPT.dummy_item',navigable,property_true);
2- Triggers WHEN-NEW-FORM-INSTANCE اكتب الكود التالي :-
SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW,WINDOW_STATE,MAXIMIZE);
set_window_property('window1',window_state,maximize);
set_window_property('window1',y_pos ,-20);

من الافضل نسخ الكود على المفكرة حتى يتضح اكثر ويكون منسق
لاتقم بتنفذ المشروع

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

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

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

الدرس الخامس
بسم الله نبداء
شكرا عبد الحميد اين نحن الان ؟؟؟
نحن لازلنا في Triggers على مستوى ال MODULE ولكن قبل ان نكمل ننشي الاجراء التالي :- ( لماذا- حتى لو نسي احد الاخوة وعمل Compile لايظهر خطاء)
Procedure من Program Units
PROCEDURE display_message (in_text IN VARCHAR2) IS
BEGIN
set_alert_property('err_alert',alert_message_text, in_text);
:global.alert_code := show_alert('err_alert');
END;
==
في Triggers ON-MESSAGE طبعا على مستوى MODULE ادرج الكود التالي:-
if message_code = 40350 then
if (:global.fetch_option = 'NEXT') then
'); اخر سجل') display_message
:global.edge := 'T';
elsif (:global.fetch_option = 'PREVIOUS') then
');اول سجل') display_message
:global.edge := 'T';
Else
');السجل المطلوب غير موجود' , set_alert_property('err_alert',alert_message_text)
: global.alert_code := show_alert('err_alert');
end if ;
elsif message_code = 40400 then
if : global.option = 'New' then
;(’تم حفظ السجل’) , ,alert_message_text 'err_alert') set_alert_property
elsif: global.option = ' EDIT' then
;(’تم حفظ التعديل’) , ,alert_message_text 'err_alert') set_alert_property
elsif: global.option = ' DELETE' then
;(’تم حذف السجل’) , ,alert_message_text 'err_alert') set_alert_property
end if ;
: global.alert_code := show_alert(' err_alert');
elsif message_code = 40352 then
');اخر سجل في القائمـــة' , set_alert_property('err_alert',alert_message_text)
: global.alert_code := show_alert('err_alert');
elsif message_code = 50006 then
(' err_alert', alert_message_text,'Enter Numeric values'); set_alert_property
: global.alert_code := show_alert('err_alert');
end if ;
في Triggers ON-ERROR طبعا على مستوى MODULE ادرج الكود التالي:-
if error_code = 40401 then
');لم تقم بتعديل اي بيانات' , set_alert_property('err_alert',alert_message_text)
: global.alert_code := show_alert('err_alert');
elsif error_code = 41830 then
');لاتوجد بيانات للعرض ' , set_alert_property('err_alert',alert_message_text)
: global.alert_code := show_alert('err_alert');
end if ;
==
طبعا الكود احبتي يشرح نفسه -----
يتبع الدرس السادس انشاء الله

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

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

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

الدرس السادس
بسم الله نبداء
اشكر الجميع و الاخوة الذين شاركو ا اسال الله ان يسدد خطانا 0
اين نحن - سبحان الله- نعم تذكر ت ننزل قليا في المشروع نعم المشروع قرب على النهاية عدد ستة اجراءات ووظيفة واحدة فقط وبعض الاكواد البسيطة تحت ازرار الاوامر وينتهي البرنامج – ولكن الصبر – ان الله مع الصابرين00
الى Block DEPT
في Triggers POST-QUERY طبعا على مستوى Block DEPT ادرج الكود التالي:-

copy(name_in(ltrim(rtrim(:global.prmkey_col,''''),'''')),'DEPT.dummy_item');
:DEPT.dummy_item := :DEPT.DEPTNO;

في Triggers KEY-NEXT-ITEM ل TextItem والتي اسمها DUMMY_ITEM ادرج الكود التالي:-

declare
ct boolean;

begin
if :DEPT.dummy_item is null then
set_alert_property('err_alert',alert_message_text,:global.prmky_col||' íÌÈ Çä áÇÊßæä ÎÇáíÉ');
:global.alert_code := show_alert('err_alert');
raise form_trigger_failure;
elsif :global.option = 'NEW' then
ct:=check_dup_val(:global.option);
if ct = FALSE then
set_alert_property('err_alert',alert_message_text,:global.prmky_col||' ÎØÇÁ Ûí ãÊæÞÚ');
:global.alert_code := show_alert('err_alert');
raise form_trigger_failure;
ELSE
next_item;
end if;
elsif :global.option = 'QUERY' then
go_block('DEPT');
:global.query_val := :DEPT.dummy_item;
set_block_property('DEPT',default_where ,RTRIM(LTRIM(''''||:global.prmkey_col||'''',''''),'''')||' = '||''''|| :global.query_val||'''' ||'OR ' ||''''||:global.query_val||''''||' ='||''''||' '||'''');
execute_query(no_validate);
if :system.block_status = 'QUERY' then
default_button;
go_item('BUTTON.new');
else
go_item('DEPT.dummy_item');
end if;
end if;
exception
when no_data_found then
null;
end;

احبتي هذا كود البحث -- انسخة على المفكرة لاتعمل Compile للمشروع حتى ينتهي
توجد رسالتين بالعربي في هذا الكود:-
الاولى نصها ( يجب ان لاتكون خالية )
الثانية نصها ( خطاء غير متوقع )
--
ملاحظة --- تعمدت وضع هذا الكود في هذا الدرس حتى تسير الخطوات بالترتيب من اعلى الى الاسفل والمفروض ان يكون في الاخر0

يتبع الدرس السابع انشاء الله

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

يتبع الدرس السابع انشاء الله

الدرس السابع
بسم الله نبداء
نتهينا من Block Dept الحمد لله
الان نذهب الى Block Button يوجد في البلوك عدد عشرة Iteme من نوع Bush Button تحت كل واحد وفي Triggers WHEN-BUTTON-PRESSED
اكتب الكود الخاص به ويكون الترتيب كلاتي :- الاسم وتحتة الكود ويفصل بينهما –
SCROLL_UP
go_block('DEPT');
fetch_record('LAST');
--
UP
go_block('DEPT');
:global.edge := '';
fetch_record('NEXT');
IF (:global.edge = 'T') THEN
fetch_record('LAST');
END IF;
--
DOWN
go_block('DEPT');
:global.edge := '';
fetch_record('PREVIOUS');
IF (:global.edge = 'T') THEN
fetch_record('FIRST');
END IF;
--
SCROLL_DOWN
go_block('DEPT');
fetch_record('FIRST');
--
QUERY
:global.option := 'QUERY';
:global.fetch_option := '';
set_item_property('button.cancel',enabled,property_true);
set_item_property('button.save',enabled,property_false);
enable_DEPT;
set_item_property('DEPT.dummy_item',enabled,property_true);
set_item_property('DEPT.dummy_item',navigable,property_true);
set_item_property('DEPT.dummy_item',updateable,property_true);
go_block('DEPT');
disable_button;
disable_navigable;
enable_DEPT;
clear_block(no_validate);
go_item('DEPT.dummy_item');
--
NEW
:global.option := 'NEW';
set_item_property('save',enabled,property_true);
set_item_property('save',navigable,property_true);
set_item_property('save',mouse_navigate,property_true);
set_item_property('cancel',enabled,property_true);
set_item_property('cancel',navigable,property_true);
enable_DEPT;
go_block('DEPT');
clear_block(no_validate);
go_item('DEPT.dummy_item');
:dummy_item :='#####';
next_item;
disable_navigable;
disable_button;
SET_ITEM_PROPERTY('dummy_item',enabled,property_false);
--
نكمل في الدرس القادم بحول الله لاتقم بتنفيذ المشروع،،،،

يتبع الدر الثامن انشاء الله

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

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

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

الدرس الثامن
بسم الله نبداء
شكرا لجميع الاخوة والمعذرة لقد انشغلت في تركيب الادارة Webutil واشتغلت نوعا ما مع وجود اخطاء 00واعدكم بعدم تكرار ذلك0
هذا الدرس تكملة للدرس السابق
الاخوة الذين يعملون على Developer10g اضف الاتي تحت
:dummy_item :='#####';
اضف :-
Dept. DEPTNO := 0;
--
EDIT
declare
ct boolean;
begin
:global.option := 'EDIT';
go_block('block2');
disable_button;
disable_navigable;
set_item_property('save',enabled,property_true);
set_item_property('save',navigable,property_true);
set_item_property('save',mouse_navigate,property_true);
set_item_property('cancel',enabled,property_true);
set_item_property('cancel',navigable,property_true);
ct:=check_dup_val(:global.option);
if ct = FALSE then
نص الرسالة ( خطاء الغي العملية ) set_alert_property('err_alert',alert_message_text,'ÎØÇÁ ÇáÛ ÇáÚãáíÉ');
:global.alert_code := show_alert('err_alert');
go_block('DEPT');
default_button;
go_item('BUTTON.edit');
else
enable_DEPT;
set_item_property('DEPT.dummy_item',enabled,property_false);
set_item_property('DEPT.dummy_item',navigable,property_false);
go_block('DEPT');
:global.query_val := :DEPT.dummy_item;
end if;
end;
--

SAVE
declare
return_stat boolean;
begin
if :global.option in ('NEW','EDIT') then
check_valid(return_stat);
if :global.option = 'NEW' and return_stat THEN
BEGIN
select max(DEPT.DEPTNO )+1 into :DEPT.dummy_item from DEPT;
:DEPT.DEPTNO := :DEPT.dummy_item;

null;
EXCEPTION
WHEN no_data_found THEN
نص الرسالة( لاتوحد بيانات )
display_message(' áÇÊæÍÏ ÓÌáÇÊ');
end;
END IF;
IF return_stat = TRUE then
go_block('DEPT');
commit_form;
IF :global.option = 'NEW' THEN
نص الرسالة ( الرقم هو + قيمة dummy_item ) display_message(' ÇáÑÞã åæ '||:DEPT.dummy_item);
END IF;
default_button ;
GO_ITEM('BUTTON.new');
disable_DEPT;
SET_ITEM_PROPERTY('DEPT.dummy_item',enabled,property_true);
SET_ITEM_PROPERTY('DEPT.dummy_item',navigable,property_true);
:global.flag := 'FALSE';
:global.query_val := :DEPT.dummy_item;
:DEPT.rec_stat := 'VALID';
execute_query(no_validate);
ELSE
raise form_trigger_failure;
END IF;
END IF;
:global.option := 'SAVE';
END;
--
CANCEL
declare
choice number;
begin

set_alert_property('can_alert',alert_message_text,'åá ÊÑíÏ ÇáÇáÛÇÁ ');
نص الرسالة (هل ترغب الالغاء )
choice := show_alert('can_alert');
if choice = ALERT_BUTTON1 then
CLEAR_BLOCK(NO_VALIDATE);
:global.option := 'CANCEL';
disable_DEPT;
default_button;
set_item_property('DEPT.dummy_item',enabled,property_true);
set_item_property('DEPT.dummy_item',navigable,property_true);
go_block('DEPT');
set_block_property('DEPT',default_where , RTRIM(LTRIM(''''||:global.prmkey_col||'''',''''),'''')||' = '||''''|| :global.query_val||'''' ||'OR ' ||''''||:global.query_val||''''||' ='||''''||' '||'''');
execute_query(no_validate);
set_item_property('BUTTON.cancel',enabled,property_false);
go_item('BUTTON.EDIT');
else
if :global.option = 'NEW' then
go_item('DEPT.dummy_item');
elsif :global.option = 'EDIT' then
go_block('DEPT');
elsif :global.option = 'QUERY' then
go_item('DEPT.dummy_item');
end if;
end if;
end;
--
EXIT
exit_form;
نكمل في الدرس القادم انشاء الله لاتقم بتنفيذ المشروع
يتبع الدرس التاسع ان شاء الله

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

الدرس التاسع
بسم الله نبداء
الان احبتي بقي فقط الاجراءات والوظيفة فقط ونتهي المشروع
قم بانشاء ال PROCEDURE كالتالي :-
PROCEDURE check_valid(return_stat out boolean) IS
ct boolean;
BEGIN
return_stat:=true;
if return_stat = true then
if :DEPT.dummy_item is null then
set_alert_property('err_alert',alert_message_text,' íÌÈ Çä áÇÊßæä ÎÇáíÉ');
:global.alert_code := show_alert('err_alert');
go_item('DEPT.dummy_item');
return_stat := false;
elsif 'check condition'='' then
set_alert_property('err_alert',alert_message_text,'ÎØÇÁ ÛíÑ ãÊæÞÚ');
:global.alert_code := show_alert('err_alert');
go_item('DEPT.DNAME');
return_stat := false;
end if;
end if;
end;
--
قم بانشاء ال PROCEDURE التالي :-
PROCEDURE default_button IS
BEGIN

set_item_property('scroll_up',enabled,property_true);
set_item_property('up',enabled,property_true);
set_item_property('down',enabled,property_true);
set_item_property('scroll_down',enabled,property_true);
set_item_property('query',enabled,property_true);
set_item_property('print',enabled,property_true);
if (:global.brn_cd = '01') then
set_item_property('new',enabled,property_true);
set_item_property('edit',enabled,property_true);
set_item_property('delete',enabled,property_true);
set_item_property('save',enabled,property_false);
else
set_item_property('new',enabled,property_false);
set_item_property('edit',enabled,property_false);
set_item_property('delete',enabled,property_false);
set_item_property('save',enabled,property_false);
end if;
set_item_property('cancel',enabled,property_false);
set_item_property('exit',enabled,property_true);
END;
--
قم بانشاء ال PROCEDURE التالي :-
PROCEDURE disable_button IS
BEGIN
set_item_property('new',enabled,property_false);
set_item_property('edit',enabled,property_false);
set_item_property('delete',enabled,property_false);
set_item_property('exit',enabled,property_false);
END;
انتهى الدرس وسوف نكمل في الدرس القادم انشاء الله ( حتى لاتطول الكتابة)
يتبع الدرس العاشر

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

الدرس العاشر
بسم الله نبداء
قم بانشاء ال PROCEDURE كالتالي :- مع مراعات التعليق الموجود داخل الكود ولك الخيار 0
PROCEDURE enable_DEPT IS
BEGIN
SET_block_PROPERTY('DEPT',update_allowed,property_true);
SET_block_PROPERTY('DEPT',update_allowed,property_true);
SET_block_PROPERTY('EMP',insert_allowed,property_true);
SET_block_PROPERTY('EMP',insert_allowed,property_true);
OR –
-- to enable all text item that have been disaple you must write all text item that apper in main canvas without dummy item

--$$
set_item_property('',enabled,property_true);
set_item_property('',navigable,property_true);
set_item_property('',updateable,property_true);


END;
--
قم بانشاء ال PROCEDURE كالتالي :- مع مراعات التعليق الموجود داخل الكود ولك الخيار 0
PROCEDURE disable_DEPT IS
BEGIN
SET_block_PROPERTY('DEPT',update_allowed,property_false);
SET_block_PROPERTY('DEPT',insert_allowed,property_false);
SET_block_PROPERTY('EMP',update_allowed,property_false);
SET_block_PROPERTY('EMP',insert_allowed,property_false);

OR –

-- for pervent the user to write in text item you must write all text item that apper in main canvas without dummy item
--$$
set_item_property('',enabled,property_false);
END;

يتبع الدرس الحادي عشر بحول الله وقوتة،،،،،،

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

الدرس الحادي عشر والاخير 000
اين وصلنا ايه الاحبة بقي عدد اثنين اجراء والوظيفة فقط0
قم بانشاء ال PROCEDURE كالتالي:-
PROCEDURE disable_navigable IS
BEGIN
set_item_property('scroll_up',enabled,property_false);
set_item_property('up',enabled,property_false);
set_item_property('down',enabled,property_false);
set_item_property('scroll_down',enabled,property_false);
set_item_property('query',enabled,property_false);
set_item_property('print',enabled,property_false);
END;
قم بانشاء ال PROCEDURE كالتالي:-
PROCEDURE fetch_record(fetch_option in VARCHAR2) IS
old_itm_cd VARCHAR2(15) := :DEPT.dummy_item;
where_str varchar2(500) := '';
Q varchar2(2) := '''';
BEGIN
:global.fetch_option:= fetch_option;
if fetch_option = 'FIRST' then
where_str := rtrim(ltrim(:global.prmkey_col,Q),Q)||' ='||' (select min('||rtrim(ltrim(:global.prmkey_col,Q),Q)||')from '|| rtrim(ltrim(:global.table_name,Q),Q)||')';
elsif fetch_option = 'PREVIOUS' then
where_str := rtrim(ltrim(:global.prmkey_col,Q),Q)||'= (select max( '|| rtrim(ltrim(:global.prmkey_col,Q),Q)||' ) from ' ||rtrim(ltrim(:global.table_name,Q),Q)||' where ' ||rtrim(ltrim(:global.prmkey_col,Q),Q)||' < ' || Q || old_itm_cd || Q || ' )';
elsif fetch_option = 'NEXT' then
where_str := rtrim(ltrim(:global.prmkey_col,Q),Q)||'= (select min( '|| rtrim(ltrim(:global.prmkey_col,Q),Q)||' ) from ' ||rtrim(ltrim(:global.table_name,Q),Q)||' where ' || rtrim(ltrim(:global.prmkey_col,Q),Q)||' > ' || Q || old_itm_cd || Q || ' )';
elsif fetch_option = 'LAST' then
where_str := rtrim(ltrim(:global.prmkey_col,Q),Q)||' ='||' (select max('||rtrim(ltrim(:global.prmkey_col,Q),Q)||' )from '|| rtrim(ltrim(:global.table_name,Q),Q)||')';
end if;

set_block_property ( 'DEPT',
default_where,
where_str);
clear_block(no_validate);
execute_query(no_validate);

if (:DEPT.dummy_item = old_itm_cd) THEN
if fetch_option in ('FIRST', 'PREVIOUS') then
نص الرسالة ( اول سجل )
display_message('Ãæá ÓÜÜÌÜÜá');
else
نص الرسالة ( آخر سجل )
display_message('ÂÎÜÜÑ ÓÜÜÌÜÜÜá');
end if;
end if;
END;
ملاحظة ( هذا كود عرض السجلات – الاول – التالي – السابق – الاخير )
قم بانشاء ال function كالتالي:- مع قراءة التعليق الذي داخل الكود000
function check_dup_val(opt in VARCHAR2) return boolean is
del VARCHAR2(1);
x boolean;
BEGIN
-- please write table name ,primary key column and delete column in real palce
--$$ select del_status into del from where = :DEPT.dummy_item;

if sql%found and nvl(del,' ') = ' ' then
if opt = 'NEW' then
x := FALSE;
else
x := TRUE;
end if;
elsif sql%found and del = 'Y' then
x := FALSE;
end if;
return x;
RETURN NULL;
exception
when no_data_found then
if opt = 'NEW' then
x := TRUE;
else
x := FALSE;
end if;
return x;
END;
الحمد لله وبهذا انتهت الدروس المتواضعة اسال الله ان يجعل العمل خالص لوجهه تعالى
وان ينفع به الاسلام والمسلمين والسلام عليكم ورحمة الله وبركاتة ،،،،،،

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

اخي / POOR
السلام عليكم ورحمة الله وبركاتة :-
بالنسبة لاستفسارك حول شرح الكود فأعتقد لو شرحت كل جملة في الكود فان المسأله تطول - والا انت ايش رأيك - وايش راي اعضاء المنتدى0
ولكن انت اتبع الاتي
اتبع الخطوات كامله بالدقة وانسخ الاكواد ثم نفذ المشروع وستجد امامك مشروع متكامل
اقراء الكود واذا صدفت جملة غير مفهومة اواجراء غير مفهموم -- فانا مستعد بشرحه بالتفصيل
لتعم الفائدة0 كما اود الاحاطة انني حاولت ارفاق ال FORM.FMB ولكن لم افلح حيث ليست لدية الاصلاحية كما هو معروف0
بالتوفيق ،،،

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

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

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

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

×   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.

جاري التحميل
×
×
  • أضف...

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

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