بتاريخ: 17 فبراير 200422 سنة comment_1543 السلام عليكم ...،،،اشكركم على المرور .. لدي مشكلة في بناء مشروع صغير خاص بي (( نظام مبيعات )) ... ارجوا مساعدتي بهما ،،، ** اريد ان اعمل ترقيم تلقائي للحقل رقم الوحدة unit_no في جدول الوحدات UNITS ،،، بحيث انه كلما اراد المستخدم اضافة وحدة جديدة يتم اعطائها رقم جديد و متسلسل و بشكل تلقائي ((( و لا اريد استخدام الــ SEQUENCE سيكونس ))) ما قمت به هو التالي : انشأت Trigger من النوع Pre-Insert على مستوى الـ Form بشكل التالي : select NVL(MAX(unit_no),0)+1 into :UNIT_NO from UNITS;[sql]و الذي سوف يأخذ اكبر قيمه في الحقل unit_no على اعتبار انها اخر قيمه و يزيد عليها واحد ثم يضع الناتج في الحقل UNIT_NO على الشاشة .....المشكلة : ان الرقم الجديد لا يظهر على الشاشة عند عملية اضافة الحقل الجديد (( بواسطة الامر Create_record; )) ... و كأن الـ Trigger لم ينفذ ...! **** ارجوا فعلاً المساعده حتى استطيع اكمال و انجاز المشروع .... و السلام ،،،بنت اليمن ... تقديم بلاغ
بتاريخ: 17 فبراير 200422 سنة comment_1548 اختي بنت اليمن ...ضعي الكود في WHEN-CREATE-RECORD تقديم بلاغ
بتاريخ: 17 فبراير 200422 سنة comment_1549 ممكن ان تضعى القيمة فى متغير declare Curr_No varchar2(15); New_No number(2); begin select max(unit_no) into Curr_no from UNITS; New_No := Curr_No + 1; :Block_name.txt_unit_no := New_no; insert into units values (New_No,'Unit Name'); end ; مع تغيير أسم البلوك و أسم التيكستو فى جملة الانسرتوضع أسم الوحدة تقديم بلاغ
بتاريخ: 17 فبراير 200422 سنة comment_1550 declare Curr_No varchar2(15); New_No number(2); begin select max(unit_no) into Curr_no from UNITS; New_No := Curr_No + 1; :Block_name.txt_unit_no := New_no; insert into units values (New_No,'Unit Name'); end ; تقديم بلاغ
بتاريخ: 17 فبراير 200422 سنة comment_1552 اختى بنت اليمن التريجر اللى انتى عاملاه مظبوط جدا ومشاركة الزملاء لم تضف الجديد حيث انك باستخدامك الفنكشن nvl تجنبتى ان تكون القيمة اصلا null فى الجدول فيعتبرها صفر ويبدأ العداد ب 1 ثم يزود عليه ليصبح 2 وهكذاوفعلا عند الاضافة تجدى الفاليو اتكتبت فى الحقل اللى عملتى جمله select into عليه مالمشكلة ؟؟ جربى تانى اضافة حقل واعملى save سيضاف الحقل وتظهر قيمة السيريال .المشكلة بجد تظهر عند اضافة اكتر من حقل حيت ان الأساينمنت لن يظهر على الشاشة الا فى حالة الاضافة هل تريدى اظهار السيريال كل مادخلتى على الريكورد واذا انتقلتى ايضا الى ريكود جديد وهكذا ( خلى بالك انتى لسه مضيفتيش حاجة فعلا انتى فى مرحلة داتا انترى منين حيزود والكود بيقول هات اعلى قيمة من الداتا بيز ) هل دى مشكلتك ؟ ليها حل برضه اذا كان هذا اللى عاوزاه ارسلى ردك شكرا ارجو ان اكون افادتك تقديم بلاغ
بتاريخ: 17 فبراير 200422 سنة comment_1556 ملحوظة كود الزملاء الذى يحتوى على جملة انسرت ملهاش داعي لانك اخدت القيمة وعملتلها اساينمنت فى متغير ومن المتغير لحقل الداتا بيز على الفورمة والتريجر pre insert حيفاير عند الانسرت ايه الداعى لجملة انسرت !!!!!! واذا ضيفتى الكود على تريجر when create recoed حيشتغل برضه بس المشكله الريكورد التانى حيبقى بقيمة الاولانى يعنى مش حيتزود !!! لاحظتيها ليه!!!! لانه جاب اعلى قيمة من الدتا بيز ومش من الفورم فمش حيزود تلقائى على الفورم يفضل نقطة صغيرة جربى واذا معرفتيش ارسلهالك تقديم بلاغ
بتاريخ: 17 فبراير 200422 سنة comment_1558 اظن الحل فى هذه الجملة يا أخ Oramaster :Block_name.txt_unit_no := New_no; تقديم بلاغ
بتاريخ: 18 فبراير 200422 سنة comment_1582 كلام الاخ ORAMASTER صحيحوالكود صحيح وكما افاد الاخوة فان القيمة لا تظهر الا عند حفظ السجل لان الكود اصلا موجود في التريجر PRE-INSERT والذي ينفذ عند( قبل عملية ادراج السجل في الداتابيس) حفظ السجلوانا ارى انه في مكانه الصحيح لان هذا التريجر ينفذ عند حفظ كل سجلاي ان المستخدم اذا قام باضافة اكثر من سجل ثم قام بالحفظ فان الكود السابق يعمل بشكل سليم تقديم بلاغ
بتاريخ: 18 فبراير 200422 سنة كاتب الموضوع comment_1599 السلام عليكم ...الاخوة كرام .... اشركم جميعاً على هذه الاستجابة السريعة ... الاخ prince_ocp لقد خطر لي فعلاً عمل ما قلته ... لكن لم يحدث اي تغير ... اشكرك فعلاً على الاستجابة لي ...الاخ John الكود الذي و ضعته لا يبتعد كثير عن الهدف ،،، و لكن جملة select NVL(MAX(unit_no),0)+1 into :UNIT_NO from UNITS; كفيله بعمله .... و لا اعتقد ان الخطأ منها ....و اشكرك على الرد المفصل الاخ Oramaster والاخ developer في الحقيقة كلامكم صح .. صح .. صح و لقد عملته سابقاً بالشكل التالي :داخل زر اضافة سجل جديد و تحت الحدث عند الضغط على الزر عملت الـ Trigger التالي : go_block('UNITS'); create_record; select NVL(MAX(unit_no),0)+1 into :UNIT_NO from UNITS; commit_form; و مشي الحال ... بس في الحقيقة انا اريد حاجة افضل ... ،،، لأن عملية الحفظ قبل اضافة بيانات السجل الاخرى ليست جيده .. خصوصاً اذا لم يدخل المستخدم اي بيانات اخرى،،،عموماً اشكركم جميعاً....و السلام بنت اليمن ،، تقديم بلاغ
بتاريخ: 18 فبراير 200422 سنة comment_1600 السلام عليكم الصراحه تفاعل ممتاز جداً و الى الامامانا لديه طريقه اخرى لعملية الترقيم التلقائي لان الطريقه التي التي تم النقاش حولها تعتمد على اخذ القيمة من الجدول نفسه (جدول البيانات ) وهنا مشكله وهي انه اذا تم ادخال اكثر من سجل سوف يعطينا نفس القيمه اي القيمه الاعلى + 1 مثل ما تفضل الاخ oramaster , واذا اردنا ان نتخلص من هذه المشكله تظهر لنا مشكله اخرى وهي ان نقوم بعملية commit وهذا غير مجدي لانه قد يؤثر على البيانات .لذلك الفكره الجديده تتلخص في ان يكون الترقيم التلقائي من جدول منفصل كلياً عن جدول البيانات بحيث لا نؤثر على البيانات . الخطوات تكون كالتالي1- نقوم بإنشاء جدول الترقيم وليكن table_seq ويحوي الاتيtable_no table_nameseq_no2- نعمل قيم ابتدائية للترقيم في حقل الـseq_no مثلاً يبدا الترقيم من الرقم 13- نعمل function نمرر لها نو ع الجدول مثلاً unit او dept ثم ترجع لنا الرقم الحالي وتقوم بتعديل القيمه في جدول الترقيم باضافه الرقم 14- نعمل مناداه لهذه الـfunction من الترقر when-create-record بهذه الطريقه تتخلص من مشكلتي اضافه اكثر من سجل وكذلك مشكله الحاجه للـ commitاذا لم تكن الطريقه وضحه اشعروني وسف اعمل برنامج به كل التفاصيل الـ table و الـfunction والـ form تقديم بلاغ
بتاريخ: 24 يناير 200521 سنة comment_25117 بسم الله الرحمن الرحيمجزاك الله خيرا أخي خالد ولكني يا ريت لو توضح الطريقة أكثر بمثال وأكن لك من الشاكرينأخوك في الله / لؤي (أبو العبد) تقديم بلاغ
بتاريخ: 7 فبراير 200521 سنة comment_26698 أخي الكريم / خالد ، حفظه اللهالسلام عليكم ورحمة الله وبركاتهأرجو يا أخي الكريم لو توضح بمثال عملي وأكون لك من الشاكرين ومع أنني طلبت هذا الطلب قبل عدة أيام لكن لم أجد إجابة أرجو أن تجيبني أخي الكريم وأنا أعرف أن لكل مشاغله ولكني أتمنى أن تحقق لي طلبي أنت أو أي من الأعضاء أرجو مثال عملي عبارة عن نموذج بسيط يحتوي على حقلين مثلا رقم الموظف وأسم الموظف بحيث يكون يحتوي على خاصية الترقيم التلقائيأخوك / لؤي (أبو العبد) تقديم بلاغ
بتاريخ: 8 فبراير 200521 سنة comment_26825 الأخت بنت اليمن مشكلتك بسيطة جدا بس يمكن أنك لم تختاري التريجر المناسب بحيث أنه لا يعمل حفظ للبيانات إلا في الأخير و لكن أعملي الخطوات التالية :1- أجعلي الtext_box غير مفعل بحيث لا يسمح الأدخال فيه .2-أعملي تريجر من توع pre_record , أعملي فية الكود التالي :angry:لكي يظهر الرقم مباشرة عند الأضافة)(select nvl(max(unit_no),0)+1 into :unit_no from units )3-2-أعملي تريجر من توع pre_insert , أعملي فية الكود التالي :angry:لكي يحفظ البيانات مباشرة بعد الحفظ)(select nvl(max(unit_no),0)+1 into :unit_no from units )و أن شاء الله تنحل المشكلة .جميل -جامعة العلوم و التكنولوجيا - اليمن تقديم بلاغ
بتاريخ: 24 ديسمبر 200718 سنة comment_118989 عفوًا اعزائي على اعادة ورفع الموضوع’’وبدلاً من كتابة موضوع آخر ’’ وجدت هذا الموضوع وأردت الرد عليه’’بالنسبة لي كانت عندي نفس المشكله’’ولكن والحمد لله اشتغلت معي مضبوطفعندما افتح الفورم تظهر لي الرقم التسلسليولكن في حال تم حفظ السجلوالذهاب للسجل الآخريختفي الرقم تلقائيًا’’!فكيف تكون موجوده وبشكل اساسي كلما دخلت للسجل الآخر’’!شاكرلكم اعزائي تقديم بلاغ
بتاريخ: 27 ديسمبر 200718 سنة comment_119243 بسم الله الرحمن الرحيم بارك الله فيكم جميعاً على هذا التفاعلاعتقد ان الانسب في حكاية الترقيم التسلسلي ان تقوم ببناء متسلسلة تربطها بالحقل الذي تريده متسلسل لربط المتسللة السابقة مع العمود (الرقم التسلسلي) استخدام حدث قاعدة البيانات Before insert الموضوع كامل على الرابطhttp://www.araboug.org/ib/index.php?showto...8680&st=105 تقديم بلاغ
بتاريخ: 27 ديسمبر 200718 سنة comment_119268 السلام عليكم ورحمة الله وبركاته أخى الكريم يمكنك إستخدام :SYSTEM.TRIGGER_RECORD :ID:=SYSTEM.TRIGGER_RECORDوذلك داخل التريجر WHEN-CREATE-RECORD تقديم بلاغ
بتاريخ: 2 يناير 200818 سنة comment_119639 لا أدري ما سبب عدم الرغبة في استخدام العداد واللجوء إلى طريقة معرفة أكبر عدد سجل وهذه الطريقة أعتبرها ضعيييييفة جدا في حال وجود بيانات كبيرة في الجدول لما تسببه من تأخر عند عملية الحفظ وارهاق لقاعدة البيانات بدون داعفي حال الاصرار على عدم استخدام العداد يمكن اتباع الطريقة التاليةانشاء جدول تخزن فيه اعداد السجلات وتكون هناك قيم ابتدائية كما ذكره أحد الإخوان وتكون حقول الجدول كالتاليcreate table last_number(table_name varchar2(35),clm_name varchar2(30),last_val number (10) not null);المفتاح الأساس للجدول الحقلين الأولينوتنشئ دالة تقوم بإرجاع القيمة من الجدول المذكور حسب اسم الحقل والجدول وتزيد عليها واحدوعند تمام الحفظ قم بزيادة القيمة في هذا الجدول تقديم بلاغ
بتاريخ: 6 يونيو 201510 سنة comment_262980 اولا الطريقة 1- (max +1 ) مينفعش علشان لو اكتر من user فتحو فى نفس الوقت هيخدو نفس القيمة...... 2- نعمل الترقيم فى جدول منفصل ؟ طب لو عندك 30 هتعمل 30 تانى تشيل فيهم الارقام .. !!!! الحل اعمل (2 Sequence) 1- الاول دة الى هيشوفو user عادى جدآ وفى PK 2- التانى ضيف column فى كل entity بال SEQ التانى SQL> SELECT ' ALTER TABLE ' || TABLE_NAME || ' ADD COLUMN Seq_number_db number ' From user_tables step) spool it تم تعديل 6 يونيو 201510 سنة بواسطة amr.zen تقديم بلاغ
بتاريخ: 8 مايو 20187 سنة comment_295245 ي شباب عندي مشكلة اريد ان اعمل تريقر عندما يدخل قيمه في حقل جدول معين يقوم في حقل جدول اخر بتغيير قيمتة بناءا علي جدول الاول تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.