TAREK ALHAMAD بتاريخ: 28 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 28 مارس 2004 السلام عليكم أحبائى أعضاء المنتدى يحدث أحيانا خطاء فى عمل sequence مثلا أن نفقد أرقام منه فى حالة فقدان لارقام معينة مثلا عندى sequence مرتبط بحقل رقم الموظف فى جدول الموظفينوهذا الحقل ياخذ قيمتة من هذا ال sequence عن طريق تريجربعد الاطلاع على جدول الموظفين وجدت الارقام التالية لم تسجل(5,8,11 ) , والباقى مسجل بداية من (1 حتى 60 )فى هذة الحالة الارقام المفقودة قليلة جدا ولكن لو كانت الارقام المفقودة كثيرةولنفترض اننا أيضا لدينا أكثر من sequence فى هذة الحالة سيكون من الصعب أيجادكل الارقام المفقودة فى كل sequence سيتطلب ذلك مجهود وأحتمالت الخطاء أيضافهل يوجد طريقة لعلاج هذا الخطاء مثل function أو Procedure ?وشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TAREK ALHAMAD بتاريخ: 29 مارس 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 29 مارس 2004 يا شباب يعنى مفيش حد تجاوب مفيش أى تفاعل ليه كده اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد بتاريخ: 30 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 30 مارس 2004 السلام عليكم لقد واجهت هذه المشلكة في برنامج سابق ، ووجد أن هناك طريقتين لحلها ، ولكن الكود غير موجود معي ولا يحضرني الآن ، ولكن ممكن أعطيك الفكرة وتحاول توجدها.أول حل أنك تعمل عملية مقارنة بين كل رقمين متجاورين ، بحيث تسأل (هل الرقم التالي = الرقم الحالي + 1) إذا " نعم " تجاوز الرقم وخذ الرقم التالي واللذ يليه .. وهكذا حتى تجد جواب " لا " لسؤالك ، عندها تضع الرقم المفقود للسجل المراد إضافته.أما الطريقة الثانية فهي أن تجعل إمكانية للمستخدم أن يكتب الرقم الذي يرغب فيه ويمكن بهذه الطريقة أنه يكتشف الرقم المفقود ويضيفه .. ببس مساوئها أن المستخدم ممكن يسجل أرقام متفاوتة وبرتقيمه الخاص ، وقد تكون بشكل عشوائي.أرجو أن تكون الصورة واضحة .. ولكم الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
John بتاريخ: 30 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 30 مارس 2004 (معدل) ممكن علشان تحل المشكلة من أولها انك ماتستخدمش الـ sequence ممكن تستخدم دالى MAX اى ترى ماهى اكبر قيمة و تضيف واحد اليها Declare VarMax number ; Begin Select empno into varmax from emp :empno := VarMax + 1 end; انا أستخدمتها بس عملت معايا شوية مشاكل برضة جربها و قولى تم تعديل 30 مارس 2004 بواسطة John اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahm3000 بتاريخ: 30 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 30 مارس 2004 تعقيب على كلام الأخ jone أفضل في الفورم تكتبdeclare x number;beginselect nvl (max(empno),1)+1 into x from emp;end;عشان إذا كان فاضي nullيكتب واحد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TAREK ALHAMAD بتاريخ: 31 مارس 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 مارس 2004 السلام عليكم أخوانى الاعزاء والله تواصل رائع وجميل من الاخوة الاعضاءشكرا لكم أخوانى محمد . ahm3000 . JOHNاما بخصوص أفضل طريقة فى نظرى لاستخدام SEQUENCES فى الفورم فهى كالتالىنفترض الاتى 1- عملنا BLOCK للجدول S_ORD2- عندك SEQUENCE مسمى S_ORD_IDالان حقل الرقم (ID) الموجود فى الجدول S_ORD نريده ان ياخذ قيمة من ال SEQUENCE المسمى (S_ORD_ID) نروح على الفورم بتعتنا وبعدين نروح على البلوك بتعنا ونعمل الاتىTRIGGER ----> PRE-INSERTونكتب الاتى داخلهSELECT S_ORD_ID.NEXTVAL INTO :S_ORD.ID FROM DUAL ;الشرح ------وظيفة هذا التريجر هىقبل القيام باى عملية لادخال البيانات فى جدول الطلبيات يقوم التريجر باضافة رقم الطلبيةمن ال SEQUENCE بدون تدخل منا وبالتالى فلن يتم أضافة اى طلبية من غير ان تكون لها رقم وبالتالى لا يحدث ان نفقد أرقام من ال SEQUENCEأعذرونى على الاطاله ولكنى قصدت ان يستفيد الاخوة الاعضاء الجدد على أوراكل من الموضوع محل النقاش وحتى تكون كل خطوات العمل واضحة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TAREK ALHAMAD بتاريخ: 31 مارس 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 مارس 2004 السلا م عليكممرفق ملف به الفورم و ال SEQUENCE + TABLEللاعضاء الذى ليس لديهم جدول S_ORD و SEQUENCE S_ORD_ID SEQUENCE.zip اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
braveheart بتاريخ: 31 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 31 مارس 2004 بارك الله فيك على هذه الإجابة الشافية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Oramaster بتاريخ: 1 أبريل 2004 تقديم بلاغ مشاركة بتاريخ: 1 أبريل 2004 اى سلكت او دخول على الnext val لل sequence اكيد بتعمل زيادة لقيمته واضح انك كنت عاملها فى الأول على when new record عشان كده كنت بتفقد بعض الأرقام وتحصل الجاب اللى كنت بتحكى عليها لكن عند وضعها فى الpre insert اتحلت المشكلة او عن طريق كود على نفس التريجر ب select max بس فى جاب حتحصل برضه لما تحذف بعض السجلات من الجدول ومش حيبقى ابدا مترقم سيريال اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TAREK ALHAMAD بتاريخ: 1 أبريل 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 أبريل 2004 الاخت Oramaster كلامك صحيح وهو ده اللى انا عملت من البدايةوسؤالى هو عن كيفية عمل (procedure او function )لاستخراج الجاب ان وجد فى اى sequence وليس طريقة عمل ال sequenceولكنى أحببت ان أوضح طريقة عمل ال sequence على الفورم للاخوة الاعضاءحتى لا يقع أحد فى هذا الخطاءفارجو الافادة أذا كان عندك حل لمعالجة sequence gap اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.