بتاريخ: 24 ديسمبر 200520 سنة comment_55251 الأخوة / الأعزاء أعضاء المنتدى السلام عليكم ورحمة الله وبركاته لدي مشكلة صغيرة وهي ان بعض شفرات pl/sql لا تعمل بشكل صحيح ولا ادري ما السبب فمثلا عند كتابة شفرة حذف سجل من داخل قاعدة بيانات داخل ترايجل فإن هذه الشفرة لا تعمل بينما اذا كتبتها في sql فإنها تعمل بشكل طبيعي فمثلا الشفرة التالية لا تعمل داخل التريجر:declare begin delete from yyy where y_no = :y_no ;end;بينما لو كتبت داخل الـ SQL الشفرة التالية للتحذف فإنها تعمل على الجدول مباشرة delete form yyy where y_no = 1 فان السجل الذي رقم فيه 1 يتم حذفه مباشرة فما هو الخطا في شفرة التريجر افيدونا جزاكم الله خير الجزاء تقديم بلاغ
بتاريخ: 24 ديسمبر 200520 سنة comment_55263 الاخ الكريميجب استخدام الفنكشن FORMS_DDL عندما تريد عمل حذف او اضافة يوزر او منح صلاحيات فهي تعمل بشكل افضل مع استغرابس لأنها يجب ان تعمل ويمكن انك ناسي ال COMMIT_FORM;على كل حال استخدم الطريقة هذه وخبرنا بالنتيجةFORMS_DDLطريقة 1 declare begin delete from yyy where y_no = TO_NUMBER(:y_no); COMMIT_FORMS; end; طريقة 2 begin FORMS_DDL('delete from yyy where y_no ='|| TO_NUMBER(:y_no) ); COMMIT_FORMS; END; تقديم بلاغ
بتاريخ: 24 ديسمبر 200520 سنة كاتب الموضوع comment_55291 شكرا اخي على الاهتمام ولكني جربت الشفرة يطلع لي خطأهو ان يجب تعريف دالة COMMIT_FORMS; تقديم بلاغ
بتاريخ: 24 ديسمبر 200520 سنة comment_55332 اخي الكريمجربcommit_form;لأن commit_forms خطأ مطبعي تقديم بلاغ
بتاريخ: 25 ديسمبر 200520 سنة كاتب الموضوع comment_55424 شكرا اخي الكريم عند عمل compile لايوجد هناك اي خطأ بس في مشكلة اخرى انه عندما انفذ التريجر تظهر رسالة تخبرني "unable to insert record"فلو توضح لي ما المشلكة ولك جزيل الشكر ولو تعبناك معنا ملاحظة عند ما استخدم زر indrty record في الفورم بلدر تظهر لي رسالة تخبرني بان السجل قد تم ادخالة ولكن عندما اعمل استعراض للبيانات المدخلة الاحظ انه لا يوجد اي بيانات تقديم بلاغ
بتاريخ: 25 ديسمبر 200520 سنة comment_55463 الاخ الكريممعنى هذه الرسالة هو وجود عنصر او حقول من الحقول اما ان يكون اسم الحقل في database الموجودة في الخصائص لايطابق الموجود بقاعدة البيانات او وجود حقل لا ينتمي لقاعدة البياناتلذلك اثناء ظهور الخطا اضغط shift + F1او من help الموجود بالشاشة dsiplay error ليظهر لك سبب الخطأ تقديم بلاغ
بتاريخ: 25 ديسمبر 200520 سنة comment_55478 اتوقع ان يكون احد سببين:الاول:كما قال الخ admin05 من وجود حقل ليس داتا بيز ولكن خاصيته لم تعدل لذلك تاكد من الحقول ان خاصية الغير تابعة لجدول من ان خاصية database item = noالثاني:أتوقع انه يرفض اجراء عملية الحذف لذلك عند تنفيذ الدالة commit_form يقوم بمحاولة ادخال قيمة جديدة وهي نفس القيمة المحاولة حذفها بالتالي يعمل البرايمري كي فيوليتد ولا يتمكن من تنفيذها تقديم بلاغ
بتاريخ: 25 ديسمبر 200520 سنة comment_55481 اتوقع ان يكون احد سببين:الاول:كما قال الأخ admin05 من وجود حقل ليس داتا بيز ولكن خاصيته لم تعدل لذلك تاكد من الحقول الغير تابعة لجدول من ان خاصيةdatabase item = noالثاني:أتوقع انه يرفض اجراء عملية الحذف لذلك عند تنفيذ الدالة commit_form يقوم بمحاولة ادخال قيمة جديدة وهي نفس القيمة المحاول حذفها بالتالي يعمل البرايمري كي فيوليتد ولا يتمكن من تنفيذها تقديم بلاغ
بتاريخ: 26 ديسمبر 200520 سنة كاتب الموضوع comment_55542 شكرا جزيلا اخواني على هذا التفاعل جزاكم الله خير وزادكم بسطة في العلمولكن يا اخواني الملاحظ أنه حين ازيل خاصية الـpremary key عن حقل st_no فان شفرة الحفظ insert to تعمل بشكل طبيعي ( حيث يتم تكرار الحقل مرتين داخل الجدول ) وعندما اعيد خاصية الـ premary key فان شفرة الادراج لا تعمل فما السبب افيدونا جزاكم الله خير تم تعديل 27 ديسمبر 200520 سنة بواسطة ym_yemen تقديم بلاغ
بتاريخ: 29 ديسمبر 200520 سنة comment_55973 الاخ الكريمممكن التحكم بعملية الاضافة محيث يتم التشييك على قاعدة البيانات قبل الاضافةفقط ضع تريجر post-change على st_noليعلمك برسالة ان هذا الرقم موجود ولا تستطيع الاضافة declare temp varchar2(20):=null; begin select 'X' into temp from your_table where your_faild=:st_no; exceptions when no data found then temp:=null; if temp ='X' then message ('This is St_no was found in your database !!'); go_item('st_no); :st_no:=null; end if; end; تم تعديل 29 ديسمبر 200520 سنة بواسطة Admin05 تقديم بلاغ
بتاريخ: 3 يناير 200620 سنة كاتب الموضوع comment_56466 شكرا سوف احاول شكرا على هذا الابداع يا اخ admin 5 تم تعديل 3 يناير 200620 سنة بواسطة ym_yemen تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.