ليلاس بتاريخ: 9 مايو 2005 تقديم بلاغ مشاركة بتاريخ: 9 مايو 2005 (معدل) السلام عليكمممممم عندي فورم ماستر ديتيل للكلية وتخصصاتهابحيث ندخل رقم الكلية بالماستر وتلقائيا ينتج لدينا رقم التخصص حسب المعادلة التاليةرقم التخصص= (رقم الكلية *10)+1هذه المعادلة لإيجاد رقم التخصص للمرة الاولى يعني مثلا الكلية رقم 12 تكون ارقام تخصصاتها 121122123اما اذا كان لدينا تخصصات واردنا اضافة تخصص آخر يكون بإيجاد اكبر رقم تخصص وإضافة عليه القيمة 1يعني لو كانت التخصصات الموجودة هي 121و122و123 ,واردنا ادخال تخصص رابع سوف نأخذ اعلى قيمة وهي (123) ونجمع ليها 1 123+1= 124,,, رقم التخصص الرابعهاهو الكود والموجود في WHEN_NEW_RECORD_INSTANCEفي بلوك الديتيلز declare tmp1 varchar2(5); begin if :sp.spid is null then --- for empty record only select max(to_number(spid)) into tmp1 from sp where sp.colid = :collage.colid; if tmp1 is null then tmp1 := to_char(to_number(:collage.colid)*10 + 1); else tmp1 := to_char(to_number(tmp1) + 1); end if; -- now tmp1 holds new sp id... -- -- -- :sp.spid := tmp1; -- the new record go_item('sp.spname'); end if; end; ولكن عند التنفيذ ..يكرر نفس رقم التخصص في كل السجلات ولا يأخذ الماكس للسجلات!!اين الخطأ الرجاء مساعدتي !اين الخطأ !! تم تعديل 9 مايو 2005 بواسطة ليلاس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
medosal بتاريخ: 9 مايو 2005 تقديم بلاغ مشاركة بتاريخ: 9 مايو 2005 يتم تكرار نفس القيمه و لا ياخذ max لسبب بسيط انه لابد من عمل commit بعد كل سجل تقوم بإدخالهحتى يتم احتسابه ضمن القيم الموجوده فى الجدولمثلا لدينا فى الجدول اكبر قيمه =100وفى الفورم يوجد قيمه 200 فى هذه الحاله اكبر قيمه هى الموجوده بالفعل بالجدول =100لجعلها = 200 لابد من عمل commit; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ابو صالح بتاريخ: 9 مايو 2005 تقديم بلاغ مشاركة بتاريخ: 9 مايو 2005 اعتقد ان اول خطأ قمت به اخي العزيز هو اختيارك عنوان غير مناسب للموضوع ،، ارجو تعديله تحياتي ،،، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
yaso2com بتاريخ: 9 مايو 2005 تقديم بلاغ مشاركة بتاريخ: 9 مايو 2005 بحسب معلوماتي و الله يعلم انه من المفروض ان يكوت الكود في التريجر على مستوى البلوك الذي به الرقم pre insertهذا اولا ثم لقد عدلت في الكود قليلا كما يلي :--------------------declaretmp1 varchar2(5);begin select max(NVL(to_number(spid),1)) into tmp1 from sp where sp.colid = :collage.colid; if tmp1 is null then tmp1 := to_char(to_number(:collage.colid)*10 + 1); else tmp1 := to_char(to_number(tmp1) + 1); end if;:sp.spid := tmp1;end;-----------------------------و عندما تحفظين يتم ادخال الرقم آليا -----------------------------و الله ولي التوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.