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

عندى مشكلة فى Save Form

Featured Replies

بتاريخ:

مساء الخير
أرجو المساعده العاجلة جدا

أنا عندى form و مش عارف اعمل save

الفورم من table يسمى support_ticket

الزرار اللى مستخدمه هو موافق
الكود when_button_pressed


declare
v_alert number;
begin --	:SUPPORT_TICKET.TICKET_NO:=:SYSTEM.CURSOR_RECORD;
v_alert := show_alert('alert1');
if v_alert = alert_button1 then
	message('ÔßÑ Úáì ÊÚÇæäßã ãÚäÇ');
-- go_block('view');
--refresh;
end if;
	select (NVL (Max (ticket_no),0))+1
into :ticket_no from support_ticket;
exception when others then
:ticket_no :=1;
	 
	 commit_form;
	 
	exit_form(no_validate);

end;




فى المرفقات الكود + الفورم

الفورم عبارة عن ticket_no field it is a display item علشان لما اليوزر يدوس موافق يطلع له التيكت نمبر
رقم العداد ده الرقم من 8 هو هيدخله
الشكوى هو هيدخلها
المشكلة ان هذا الكلام لا يدخل فى الداتا بيز
و لا save فى ال supported ticket

problem.rar

post-89317-1243078535_thumb.jpg

بتاريخ:

اخي الكريم

شو رسالة الخطأ اللي بتظهرلك

تأكد من ان اسم الفيلد لكل واحد منها بمطابقتها في الجدول الخاص بها

بتاريخ:

السلام عليكم

اخى العزيز

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

1- اما ان فى item هو مش مربوط بقاعدة البيانهات .. database = no او العكس هو مربوط و مطلوب فى الحفظ بس انت مش عاطيله قيمه.. فراجع القيم المرسله للجدول من الشاشه

2- ان فى خطأ قبل عمليه commit بحيث انه بيوقف الكود و جرب كدة الحل بانك تحط سطر الماسج بعد ال commit لو ظهرت يبقا كودك سليم

و انا للعلم برجح اول مشكله

و الله اعلم .

و بامر الله حشوف و ربنا يسهل

بتاريخ:

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

بتاريخ:

السلام عليكم
هو انت عايز لما تضغط على ok وادخلت قيم يعمل save ولا لما بتضغط save من ال menu مبيحفظش حدد لان لو من ال menu الاساسيه يبقى لازم فيه رساله
هتظهر فياريت تكتبها
ولو انت عايز تعمل حفظ من الزرار بتاعك متهيألى انك حاطط commit في مكان غلظ لانه مش هيروح للجمله دى غير ما يحصل exception

بتاريخ:
ولو انت عايز تعمل حفظ من الزرار بتاعك متهيألى انك حاطط commit في مكان غلظ لانه مش هيروح للجمله دى غير ما يحصل exception


شيل ال exception هيشتغل معاك
بتاريخ:
  • كاتب الموضوع

اولا شكرا على الرد
ثانيا انا عايز لما اعمل save يزود رقم واحد و يعطى لل user الرقم التذكرة لكن لما ال user لا يعمل save لا ياخذ رقم تذكرة


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

بتاريخ:

السلام عليكم

شوف كدة طيب

declare
v_alert number;
begin --	:SUPPORT_TICKET.TICKET_NO:=:SYSTEM.CURSOR_RECORD;
v_alert := show_alert('alert1');
--
if v_alert = alert_button1 then
	select (NVL (Max (ticket_no),0))+1
	into :ticket_no from support_ticket;
	--
	commit_form;
	--
	message('ÔßÑ Úáì ÊÚÇæäßã ãÚäÇ');
end if;

exception when others then
:ticket_no :=1;
exit_form(no_validate);

end;



و قلى

بتاريخ:

السلام عليكم
اخي جرب هيك:

declare
v_alert number;
begin -- :SUPPORT_TICKET.TICKET_NO:=:SYSTEM.CURSOR_RECORD;
v_alert := show_alert('alert1');
if v_alert = alert_button1 then
message('ÔßÑ Úáì ÊÚÇæäßã ãÚäÇ');
-- go_block('view');
--refresh;
end if;
select NVL (Max (ticket_no,0))+1
into :ticket_no from support_ticket;
exception when others then
:ticket_no :=1;

commit_form;

exit_form(no_validate);

end;



أخي وجرب وضع الكود على ترجر PRE-INSERT وبزر اخر اعمل COMMIT
بالتوفيق....

تم تعديل بواسطة PALI.ORACLE

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

أشكرك على الرد
أنا لم أستخدمت طريقة ahmed_samir
و أضفت end if;
برده كان بيطلع رقم التيكت صح لكن مبيعملش save فى الداتا بيز

و طريقة pALI.oracle
هيطلع رقم التيكت لليوزر ممكن هو لا يعمل save ويستخدم الرقم للدخول على بيانات شخص اخر

انا عايز الرقم يظهر بعد ال save

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

انا حملت لكم صورة من الجدول

على فكرة ال user id is a primary key not nul but in another table called user_info

no error message appear

post-89317-1243113609_thumb.jpg

بتاريخ:

حاول تعمل زي هذه الفورم
وأبلغنا هل ده هدفك أم لا

create table ticket
(tecket_no   number,
meter_no  number,
type_problem  varchar2(333));

ttt.rar

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

أنا استخدمت طريقة أحمد سمير

بس كان لازم اضع ال user_id يطلع و يدخل

بس مش عارف ليه لازم
مع انه مش معمول notnull

سوال تانى كيف أعمل
exit_form
بمعنى لو وضعتها قبل end if;
لا يظهر رقم ال ticket
لو وضعتها بعد end if; برده لا يظهر

لكن بدون ال exit لا تعمل مشاكل


و أشكر كل من أهتم بمساعدتى

بتاريخ:
أشكرك على الرد
أنا لم أستخدمت طريقة ahmed_samir
و أضفت end if;
برده كان بيطلع رقم التيكت صح لكن مبيعملش save فى الداتا بيز

و طريقة pALI.oracle
هيطلع رقم التيكت لليوزر ممكن هو لا يعمل save ويستخدم الرقم للدخول على بيانات شخص اخر

انا عايز الرقم يظهر بعد ال save


اخي لم افهم تعقيبك على حلي...ممكن توضح اكتر ؟؟؟
بتاريخ:

اخي بغض النظر عن الخطأ في الكود .... انا مش عارف المشكلة اتحلت ولا لأ ؟؟؟

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

هفترض معاك ان اليوسر داس crl+s تفتكر البرنامج هيعمل حفظ
او لو داس على علامة الديسك فوق في شريط الادوات علامة حفظ يعني ... تفتكر برضه هيحفظ ؟؟

نفس القصة في موضوع زرار الخروج ... لو داس f4 يخرج ؟؟؟ مع ان ده المفروض اللي يحصل

اسمحللي ... اعدل شوية في طريقة الكود ... لحد ما اعرف هل المشكلة الاساسية اصلا اتحلت ولا لأ ؟؟؟

حضرتك المفروض تعمل تريجر key_commit ، وتريجر pre_insert ، وتريجر key_exit

1- تريجر pre_insert
----------------------

declare
v_alert number;
begin -- :SUPPORT_TICKET.TICKET_NO:=:SYSTEM.CURSOR_RECORD;
v_alert := show_alert('alert1');
if v_alert = alert_button1 then
message('ÔßÑ Úáì ÊÚÇæäßã ãÚäÇ');
else
raise form_trigger_failure;
end if;

select NVL (Max (ticket_no,0))+1
into :ticket_no from support_ticketك
end;

2- key_commit
-----------------
commit_form(no_validate);
if form_success then
message('تم الحفظ بنجاح ');message('تم الحفظ بنجاح ')
clear_message ;

3- تريجر زرار الحفظ
----------------
do_key('commit_form');

============================================================================
تريجر key_exit
----------------

المفروض تعمل alert ليكن اسمه ask_ext

declare
v_alert number;
begin
v_alert := show_alert('ask_ext');
if v_alert = alert_button1 then
exit_form(no_validate);
else
raise form_trigger_failure;
end if;


2- زرار الخروج
---------------
do_key('exit_form');

ده رأي المتواضع .... ولو المشكلة الاساسية لسه ما تحلتش ياريت تقوللي عشان اركز في المشكلة ، عشان مش عارف إذا كان الاعضاء حلوها ولا لأ ؟؟؟

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

أشكر حضرتك أستاذ عبدو

معلش انا مبتدى اوركل

هو ال key_commit
key_exit

هل دول سيوضعوا trigger on form
or where?

أشكركم جزيلا تم حل المشكلة الاساسية بواسطتك جميعا الف شكر

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


شكرا جزيلا لكل من اهتم بمساعدتى

بتاريخ:


اخي العزبز انا ممكن تجرب
تعمل علي حدث ON COMMIT
اكتب
(KEY('COMMIT_FORM
علي مستوي الفورم
وجرب
بتاريخ:

السلام عليكم
اخي الحبيب...

اعمل هيك:

اكتب هذا الكود داخل ترجر PRE-INSERT على مستوى البلوك...

begin;
select NVL (Max (ticket_no,0))+1
into :ticket_no from support_ticket;
exception when others then
:ticket_no :=1;
end;



وداخل زر الخفظ أكتب التالي:

DECLARE
v_alert NUMBER;
BEGIN
v_alert := show_alert('alert1');
if v_alert = alert_button1 then
message('ÔßÑ Úáì ÊÚÇæäßã ãÚäÇ');
COMMIT;
END IF;
END;



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

EXIT_FORM(NO_VALIDATE,NO_COMMIT);


بالتوفيق

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

يا اخي لا شكر على واجب ... كلنا اخوات ان شاء الله ، وانا اكيد لاقيت في يوم من الايام اللي يساعدني برضه
المهم ... الاجابة نعم تحط KEY_COMMIT,KEY_EXIT على مستوى الفورم
وانا من رأي ان مفيش اي داعي للـ EXCPTION لان حضرتك في الكود هتعمل RAISE FORM_TRIGGER_FAILURE;

خد بالك التريجرات على مستوى الفورم بيبقى فيها SCOPE يعني الفورم بيشوف التريجر من جوه لبره إلا لو انت لعبت في الخصائص
بمعنى انك لو علمت تريجر تاني على اي بلوك وكان KEY_COMMIT مثلا ، كده بقى عندنا في الفورم 2 KEY_COMMIT ، واحد على مستوى البلوك وواحد على مستوى الفورم ، وانت جيت في زرار وقولت DO_KEY('COMMIT_FORM '); ، يبقى هينفذ مين اللي على مستوى الفورم ولا البلوك ، هينفذ اللي على مستوى البلوك إلا بأه لو انت غير في الخصائص ده موضوع تاني
انا بس كنت بقول الكلام ده عشان انت سألتني احط التريجر فين
بس كده ... ويارب تكون الفكرة وضحت

بتاريخ:

بسم الله والحمد لله والصلاة والسلام على رسول الله
[line][/line]اخي الفاضل إليك ملاحظاتي التي اود ان تنفعك بإذن الله
1- ان كلمة Commit_form موضوعة في مكان خطأ وهو الاكسبشن يعني انت طالب منه يحفظ في حالة وجود خطأ .. وبما أن الكود اللي كاتبه قبل جزء الاكسبشن مش ممكن يرجع بخطأ ، فلن يقوم الكود بالحفظ. !!!.
2- لا داعي لوضع الاكسبشن هنا لإنك عالجت احتمال ان ترجع القيمة بـ NULL باستخدام NVL .
3- يجب عليك ان تضع جملة حساب اكبر قيمة واضافة 1 عليها في تريجر pre-insert كما قال لك أحد الزملاء. ولا داعي لباقي الكود.
4- تأكد من انك حولت الخاصية REQUIRED لهذا الحقل الى NO حتى يقبل النظام بألا تدخلها انت قبل الانتقال الى السجل الاخر او عند الحفظ بل يقوم هو بادخالها بالتريجير اللي اتفقنا عليه وهو PRE-INSERT
5- يمكنك ايضا ويفضل ان تحمي الحقل هذا من التحديث حتى لا يدخل المستخدم بطريقة خطأ قيمة في الحقل ثم الذي يحدث ان النظام سوف يستبدل هذه القيمة بالقيمة التي ستحتسب اوتوماتيك من التريجر PRE-INSERT

وفقنا الله الى ما يحبه ويرضاه
اخوك أبو عمر

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

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

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

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

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

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.