ورد بتاريخ: 7 أبريل 2008 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2008 بسم الله الرحمن الرحيمأخواني الاعزاءلدي جدول للمشتركين فيه رقم المشترك هو المفتاح الرئيس حيث يتكون من أربع أجزاء هي:-1) رقم المحافظة يأخذ الارقام من1 الى 9 (جدول المحافظات)2) رقم المدينة يلأخذ الارقام من 100 إلى 499 (جدول المدن)3) رقم الحي السكني يأخذ الارقام من 500 إلى 800 (جدول الاحياء السكنية)4) رقم المشترك مثال :- 11005001لدي مشكلة في عدم القدرة على إدخال أول سجل في جدول المشتركين وكيف يمكن إعطاء أرقام لباقي المشتركين من أحياء سكنية مختلفة بحيث يبدأ الترقيم من البداية مثال11005001110050111101500121005001وهكذاأرجو المساعدة وجزاكم الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 7 أبريل 2008 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2008 الأخ الكريم ، يمكنك إنشاء Before Trigger علي مستوي سطر للجدول في حالة إدراج سجل جديد بحيث أن يبدأ الترقيم من الرقم الذي تختارة ، ومن ثم عند إدراج سجل جديد تجلب أكبر رقم تم تضيف علية رقم واحد أو إثنين أو ثلاثة أو .... حسب الخطوة Step ، أنظر الي المثال التالي :لدي جدول يدعي Emp ، هذا الجدول به حقل يحتوي يدعي Emp_ID ، هذا الحقل يحتوي علي ترقيم تلقائي بدأً من الرقم 11005001 : Create Or Replace Trigger TRG_Before_Emp Before Insert Or Update Or Delete On Emp For Each Row Declare Begin If(Inserting)Then Select NVL(Max(Emp_ID),11005001) Into :New.Emp_ID From Emp; End If; End; / شكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedmoheb2003 بتاريخ: 7 أبريل 2008 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2008 يمكن عمل ذلك عن طريق ان تدخل بياناتك وتعمل كونكات لكل فيلد من المجموعات المقسمه وعند عرضها يمكنك استخدام العكس فانكشن سابستر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ورد بتاريخ: 8 أبريل 2008 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 8 أبريل 2008 بسم الله الرحمن الرحيمأخي الكريمجزاك الله خيرا وأشكرك على سرعة الردولكن اذا لاحظت فإن الارقام متغيره بمعنى كيف تستطيع أخذ أكبر رقم وأرقام الاحياء السكنية متغيره وتبدأ بترقيم جديد كما هو موضح في المثالمع خالص تحياتي وشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedmoheb2003 بتاريخ: 9 أبريل 2008 تقديم بلاغ مشاركة بتاريخ: 9 أبريل 2008 اخي العزيز لا اعرف ماذا تعني بالضبط ولكن اري ان تستخدمSelect NVL(Max(column name), the number you want if null) into :the form item from table ;اتمني توضيح السؤال اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 10 أبريل 2008 تقديم بلاغ مشاركة بتاريخ: 10 أبريل 2008 الأخ الكريم ، تحية طيبة وبعد ،أولاً أخي ، أنا آسف جداً علي التأخير ، بس والله غصب عني ، حيث لدي مجموعة من المشاكل التي تواجهني في الفورم ولم أجد لها حل حتي الآن !!!المهم أخي ، شيء طبيعي أن يكون الحقل متغير القيم ، والصحيح أن يكون غير متكرر Unique ، لأنه مرقم ترقيم تلقائي فهذا شيء طبيعي ( أم أنك تقصد شيء آخر غير واضح !!! ) .فالكود الذي أدرجتة لك يبحث عن أكبر رقم ويضيف إلية القيمة ( 1 ) ، ولكن في حالة عدم إرتجاع أي قيمة ، هنا يتم إستخدام NVL كي نتحقق من النتيجة المرتجعة ، ففي حالة إرتجاع القيمة Null يبدأ من الرقم ( 11005001 ) .وبعد ذلك تتم عملية الزيادة كل مرة بالقيمة ( 1 ) .لكن أخي لو كنت تقصد أن الحقل يأخذ الترقيم الجديد حسب الحي السكني ، في هذه الحالة يتم إدراج شرط بإيجاد أكبر قيمة ترقيمية حسب الحي السكني .ياريت أخي توضح أكثرشكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
weloooo بتاريخ: 11 أبريل 2008 تقديم بلاغ مشاركة بتاريخ: 11 أبريل 2008 السلام عليكم. لدي مشكلة في عدم القدرة على إدخال أول سجل في جدول المشتركينوكيف يمكن إعطاء أرقام لباقي المشتركين من أحياء سكنية مختلفة بحيث يبدأ الترقيم من البداية مثال11005001110050111101500121005001 هذا التريجر يمكنك من إدخال أول مشترك ويعطي له واحد حسب المحافظه والمدينه والحي، وكذلك يمكنك أن تدخل مشتركين آخرين بتسلسل تصاعدي حسب نفس المحافظه والمدينه والحي. وإذا غيرت المحافظه أو المدينه أو الحي أو الكل فإن التسلسل يبدأ من الأول ........ وهكذا أرجو أن تكون هذه هي المسأله المراده. إذا كانت كذلك فكلام الأخ أحمد محب صحيح وكذلك رد الأخ مصطفىلعمل ذلك يتم عمل تريجر على الداتا بيز أو يمكن عمل تريجر على الفورم بنفس المبدأ. لنفترض أن تكوين الجدول كالآتي:create table subscribers(subscriber_id number(25) constraint con_sub_s_id primary key, governate_id number(1) constraint con_sub_g_id check (governate_id between 1 and 9), city_id number(3) constraint con_sub_c_id check (city_id between 100 and 499), block_id number(3) constraint con_sub_b_id check (block_id between 500 and 800)) تستطيع تحقيق ذلك عن طريق تريجر على قاعدة البيانات أو عمل نفس المبدأ على الفورم. والتريجر هو: create or replace trigger trig_sub_sub_id before insert on subscribers for each row declare sub_id number(10); begin select nvl(max(floor(substr(subscriber_id,8))),0)+1 into sub_id from subscribers where governate_id=:new.governate_id and city_id =:new.city_id and block_id=:new.block_id; :new.subscriber_id:=:new.governate_id||:new.city_id||:new.block_id||sub_id; end; بعد ذلك يمكنك إختبار التريجر وذلك بإدخال قيم المحافظه والمدينه والحى بدون إدخال رقم المشترك، هكذا: insert into subscribers(governate_id,city_id,block_id) values (1,100,500); ثم تقوم بإدخال نفس هذه القيم مره أخرى على إعتبار أنك تريد إدخال مشترك جديد على نفس محافظة ومدينة وحى المشترك الأول.ولنفترض أنك تريد إدخال مشترك جديد مع تغيير المحافظه أو المدينه أو الكل. مثال: insert into subscribers(governate_id,city_id,block_id) values (6,352,601); ثم تقوم بإدخال نفس هذه القيم مره أخرى على إعتبار أنك تريد إدخال مشترك جديد على نفس محافظة ومدينة وحى المشترك السابق......... وهكذاعند عمل جملة select سوف تظهر لك القيم بهذه الطريقه: SUBSCRIBER_ID GOVERNATE_ID CITY_ID BLOCK_ID ------------- ------------ ---------- ---------- 11005001 1 100 500 11005002 1 100 500 11005003 1 100 500 11005004 1 100 500 11005005 1 100 500 11005006 1 100 500 11005007 1 100 500 11005008 1 100 500 11005009 1 100 500 110050010 1 100 500 110050011 1 100 500 SUBSCRIBER_ID GOVERNATE_ID CITY_ID BLOCK_ID ------------- ------------ ---------- ---------- 110050012 1 100 500 110050013 1 100 500 110050014 1 100 500 11005551 1 100 555 11005552 1 100 555 110050015 1 100 500 110050016 1 100 500 110050017 1 100 500 11005553 1 100 555 11005554 1 100 555 11005555 1 100 555 SUBSCRIBER_ID GOVERNATE_ID CITY_ID BLOCK_ID ------------- ------------ ---------- ---------- 11005556 1 100 555 11005557 1 100 555 22006001 2 200 600 22006002 2 200 600 11005558 1 100 555 11005559 1 100 555 110055510 1 100 555 أتمنى أن يكون هذا هو المراد. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ورد بتاريخ: 12 أبريل 2008 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 أبريل 2008 السلام عليكم زورحم الله وبعد،أخي العزيز ،،جزاك الله خيرا....فعلا هذا هو المطلوب ولقد قمت بتجربته وهو يعمل بشكل صحيحأشكرك جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.