بتاريخ: 9 مايو 200520 سنة comment_35592 السلام عليكمممممم عندي فورم ماستر ديتيل للكلية وتخصصاتهابحيث ندخل رقم الكلية بالماستر وتلقائيا ينتج لدينا رقم التخصص حسب المعادلة التاليةرقم التخصص= (رقم الكلية *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 مايو 200520 سنة بواسطة ليلاس تقديم بلاغ
بتاريخ: 9 مايو 200520 سنة comment_35599 يتم تكرار نفس القيمه و لا ياخذ max لسبب بسيط انه لابد من عمل commit بعد كل سجل تقوم بإدخالهحتى يتم احتسابه ضمن القيم الموجوده فى الجدولمثلا لدينا فى الجدول اكبر قيمه =100وفى الفورم يوجد قيمه 200 فى هذه الحاله اكبر قيمه هى الموجوده بالفعل بالجدول =100لجعلها = 200 لابد من عمل commit; تقديم بلاغ
بتاريخ: 9 مايو 200520 سنة comment_35628 اعتقد ان اول خطأ قمت به اخي العزيز هو اختيارك عنوان غير مناسب للموضوع ،، ارجو تعديله تحياتي ،،، تقديم بلاغ
بتاريخ: 9 مايو 200520 سنة comment_35636 بحسب معلوماتي و الله يعلم انه من المفروض ان يكوت الكود في التريجر على مستوى البلوك الذي به الرقم 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;-----------------------------و عندما تحفظين يتم ادخال الرقم آليا -----------------------------و الله ولي التوفيق تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.