إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

لدي مشكلة في عدم القدرة على إدخال أول سجل في جدول المشتركين


7 رد (ردود) على هذا الموضوع

#1 ورد

ورد

    مشترك

  • الأعضــاء
  • 52 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 07 April 2008 - 08:23 AM

بسم الله الرحمن الرحيم
أخواني الاعزاء
لدي جدول للمشتركين فيه رقم المشترك هو المفتاح الرئيس حيث يتكون من أربع أجزاء هي:-
1) رقم المحافظة يأخذ الارقام من1 الى 9 (جدول المحافظات)
2) رقم المدينة يلأخذ الارقام من 100 إلى 499 (جدول المدن)
3) رقم الحي السكني يأخذ الارقام من 500 إلى 800 (جدول الاحياء السكنية)
4) رقم المشترك
مثال :- 11005001

لدي مشكلة في عدم القدرة على إدخال أول سجل في جدول المشتركين
وكيف يمكن إعطاء أرقام لباقي المشتركين من أحياء سكنية مختلفة بحيث يبدأ الترقيم من البداية مثال
11005001
11005011
11015001
21005001
وهكذا

أرجو المساعدة
وجزاكم الله خيرا

#2 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 07 April 2008 - 11:53 AM

الأخ الكريم ، يمكنك إنشاء 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;
/



شكراً

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#3 ahmedmoheb2003

ahmedmoheb2003

    عضو

  • الأعضــاء
  • 45 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 07 April 2008 - 03:16 PM

يمكن عمل ذلك عن طريق ان تدخل بياناتك وتعمل كونكات لكل فيلد من المجموعات المقسمه وعند عرضها يمكنك استخدام العكس فانكشن سابستر
Best Regards
Ahmed Moheb Yousif,
ASQA ENGINEER,
TAWUNIYA,
ISD-APP.SUPP .& QLTY. ASSURANCE

T +966-1-2180100 EXT. 8662
https://online.tawun...tal/home.action

#4 ورد

ورد

    مشترك

  • الأعضــاء
  • 52 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 08 April 2008 - 07:58 AM

بسم الله الرحمن الرحيم
أخي الكريم
جزاك الله خيرا وأشكرك على سرعة الرد
ولكن اذا لاحظت فإن الارقام متغيره بمعنى كيف تستطيع أخذ أكبر رقم وأرقام الاحياء السكنية متغيره وتبدأ بترقيم جديد كما هو موضح في المثال

مع خالص تحياتي

وشكرا

#5 ahmedmoheb2003

ahmedmoheb2003

    عضو

  • الأعضــاء
  • 45 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 09 April 2008 - 10:43 AM

اخي العزيز لا اعرف ماذا تعني بالضبط ولكن اري ان تستخدمSelect NVL(Max(column name), the number you want if null) into :the form item from table
;
اتمني توضيح السؤال
Best Regards
Ahmed Moheb Yousif,
ASQA ENGINEER,
TAWUNIYA,
ISD-APP.SUPP .& QLTY. ASSURANCE

T +966-1-2180100 EXT. 8662
https://online.tawun...tal/home.action

#6 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 10 April 2008 - 08:23 PM

الأخ الكريم ، تحية طيبة وبعد ،

أولاً أخي ، أنا آسف جداً علي التأخير ، بس والله غصب عني ، حيث لدي مجموعة من المشاكل التي تواجهني في الفورم ولم أجد لها حل حتي الآن !!!

المهم أخي ، شيء طبيعي أن يكون الحقل متغير القيم ، والصحيح أن يكون غير متكرر Unique ، لأنه مرقم ترقيم تلقائي فهذا شيء طبيعي ( أم أنك تقصد شيء آخر غير واضح !!! ) .

فالكود الذي أدرجتة لك يبحث عن أكبر رقم ويضيف إلية القيمة ( 1 ) ، ولكن في حالة عدم إرتجاع أي قيمة ، هنا يتم إستخدام NVL كي نتحقق من النتيجة المرتجعة ، ففي حالة إرتجاع القيمة Null يبدأ من الرقم ( 11005001 ) .

وبعد ذلك تتم عملية الزيادة كل مرة بالقيمة ( 1 ) .

لكن أخي لو كنت تقصد أن الحقل يأخذ الترقيم الجديد حسب الحي السكني ، في هذه الحالة يتم إدراج شرط بإيجاد أكبر قيمة ترقيمية حسب الحي السكني .




ياريت أخي توضح أكثر



شكراً

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#7 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 April 2008 - 04:31 AM

السلام عليكم.


لدي مشكلة في عدم القدرة على إدخال أول سجل في جدول المشتركين
وكيف يمكن إعطاء أرقام لباقي المشتركين من أحياء سكنية مختلفة بحيث يبدأ الترقيم من البداية مثال
11005001
11005011
11015001
21005001


هذا التريجر يمكنك من إدخال أول مشترك ويعطي له واحد حسب المحافظه والمدينه والحي، وكذلك يمكنك أن تدخل مشتركين آخرين بتسلسل تصاعدي حسب نفس المحافظه والمدينه والحي. وإذا غيرت المحافظه أو المدينه أو الحي أو الكل فإن التسلسل يبدأ من الأول ........ وهكذا

أرجو أن تكون هذه هي المسأله المراده. إذا كانت كذلك فكلام الأخ أحمد محب صحيح وكذلك رد الأخ مصطفى

لعمل ذلك يتم عمل تريجر على الداتا بيز أو يمكن عمل تريجر على الفورم بنفس المبدأ. لنفترض أن تكوين الجدول كالآتي:

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


أتمنى أن يكون هذا هو المراد.

أحمد يحيى


Oracle Apps Senior Technical Consultant


#8 ورد

ورد

    مشترك

  • الأعضــاء
  • 52 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 12 April 2008 - 09:18 AM

السلام عليكم زورحم الله وبعد،
أخي العزيز ،،
جزاك الله خيرا....فعلا هذا هو المطلوب ولقد قمت بتجربته وهو يعمل بشكل صحيح
أشكرك جزيل الشكر