الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

طـريـقـة عـمـل Auto Increment في أوراكـل .. !

Featured Replies

بتاريخ:

الـســـلااااااااااام عليكم ورحمه الله تعالى وبركاته





الـيـوم جـايـب لكم طريقـة نفـذتها بـنـفـسي ..
مـن تـفـكـيـري .. وبــدون مـسـاعـدات خـارجـيـة ..


::: كـيـفـيـة صـنـع Auto Increment :::

في الـبـدايـة ..
لازم نعرف أن لايـوجـد مـستـحـيـل في عالم الـبـرمـجـة ..
مـدام الـفـكـرة مـوجـودة .. فإن الإمـكـانـيـة لتحويلها لـ واقع ممكـنـة !!

وقبل أن تصـنـع Auto Increment .. لازم نـقـسـم المـوضـوع إلى قسمـيـن
أولا .. إذا كان الـ Attribute المراد تحويله ذو خاصية رقمية (Data Type = Number)
ثانياً .. إذا كان الـ Attribute المراد تحويله ذو خاصية حرفية (Data Type = varchar)

في الحالتيـن ممـكـن ..
وخـلـونـا نـشـوف لمـثـالين إلي أنا صـنـعـتـهمـ في أحـد مـشـاريـعـي ..


::: مــثــال لـ(Data Type = Number) ::::

في الـبـدايـة .. نتخـيـل أن عـندنا جـدول للموظفين
والـprimary key للجدول هو ذو خاصية رقمية (Data Type = varchar)
في هذه الحالة .. أنا عملت data block في الـform

27921210aw1.jpg
في خـانـة emp_no .. تركت الـخـانـة ذو خاصية (Display Item)
لأنني لا أريـد أن يغير المستخـدم من الرقم الـقادم في الFrom
وبعـدها .. عملت Trigger ذوخاصية (When-new-form-instance)

داخل الـTrigger .. كـتـبـت النـص التالي
Declare
Increment_By	number := 1;
Begin
Select empno+Increment_By INTO :empno
from emp
where empno = (Select Max(empno) from emp);
End;



بـعـدما تـعمـل Run Form ..
سـتـلاحظ أن خانة emp_no قدحصلت على رقم جديد غير قابل للتغير
وبـهـذا تـنـتـهـي الـحـكـايـة





::: مـثـال لـ(Data Type = varchar)

في الـبـدايـة .. نتخـيـل أن عـندنا جـدول زبـائـن أو عملاء (Customers)
والـprimary key للجدول هو ذو خاصية حرفية (Data Type = varchar)
في هذه الحالة .. أنا عملت data block في الـform

بإعتبار أن الـID المميز للعملاء .. يكون بهذه الطريقة " Cust_1 "
والعميل الثاني يكون بهذا الاسمـ " Cust_2 " .. وهــكــذا
فإننا سـنـكـتب الـكـود التالي في (Trigger: When-new-form-instance)

Declare
Increment_By	number := 1;
Begin
Select Concat('Cust_',Substr(Customer_ID,6)+Increment_By) INTO :New_Customer.CUSTOMER_ID
from Customer
where CUSTOMER_ID = (Select Max(Customer_ID) from CUSTOMER);
End;



وبـعـدها نـعـمـل Run Form
ونـشـوف الاسم في خـانـة Customer_ID

لي عــودة في الرد الـقـادم لـشـرح الأكـواد
أنــتــظـرونــي ...

بتاريخ:
  • كاتب الموضوع


في الـكـود الأول

Declare
Increment_By	number := 1;
Begin
Select empno+Increment_By INTO :empno
from emp
where empno = (Select Max(empno) from emp);
End;



في الـبدايـة عرفت متغير بإسم (Incremented_By) .. وطيته قيمة =1
بعدها نفذت Select Statment بحيث ترجع لي أعلى رقم موجود في خانةemp_no
بعدها أضيف عليه واحـد .. وأضعه في (:empno) والذي هو (read Only) أو (Display Item)





في المثال الـثـاني ..

Declare
Increment_By	number := 1;
Begin
Select Concat('Cust_',Substr(Customer_ID,6)+Increment_By) INTO :New_Customer.CUSTOMER_ID
from Customer
where CUSTOMER_ID = (Select Max(Customer_ID) from CUSTOMER);
End;



أنت لازم تنتبه أن القيمة إل بترجع لك هي حروف (varchar) .. يعني مب رقم عادي
وبما أنني أعرف صيغة الـID إلي راح يرجع لي (Cust_#) .. صار لازم أفصل الرقم عن الأحرف !!
لذلك أستخدمت خاصية ()substr .. وطلبت منه يعطيني الباقي .. أبتداءً من الحرف الـسادس (6) من اليسار

إلي راح يرجع أكيد بيكون رقم (سواء 1 أو 2 أو غيره) .. عندها ممكن أضيف إليه القيمة المتغيره (Incremented_By)
لو أوقفت الكود عند هذه النقطة .. إلي راح يرجع للـForm هو رقم فقط .. لكني أستخدمت خاصية ()Concat .. وأضفت (Cust_) قبل الرقم

وهــذا كـل ما في الأمــر ...




نـقـطـة أخيـرة قبل أن أنهـي المـوضـوع ..
نحنا نستخدم Trigger في هذه الحالة صح
والـTrigger هـو (when-new-form-instance)
باقي تعرفوا أننا نستخدمه في العام مباشرة ..
أي تحت اسم الـModul .. كما في الـصـورة الـتـالـيـة
24580506wb6.jpg

ودمــتــمـ سـالـمـيــن

تم تعديل بواسطة بو عبدالعزيز

بتاريخ:

الأخ / بو عبدالعزيز

مجهود متميز ... لعرض وشرح الفكرة
ولكن يوجد سؤال

فى حالة وجود شبكة داخل المؤسسة ... وفى حاله وجود اكثر من مستخدم للبرنامج او لهذه الشاشة تحديدا ... يتم التعامل مع نفس شاشة الادخال فى نفس التوقيت ...
فى هذه الحالة وعند اظهار رقم الموظف ... سيظهر نفس الرقم المسلسل الجديد فى اكثر من شاشة

يوجد حل اخر !! ما هو ؟

شكرا لك

بتاريخ:

السلام عليكم
كيف حالكم اخواني احب اقولكم انه مجهود رائع ولكن ينقصه خطوه
زي ما الاخ امجد قال في حاله الملتي يوزر هتبقي مشكله
اقوكو حل كويس وانا مجربه وشغال من زمان انت تعمل جدول في قاعده البيانات لكل شاشه و تخزن اخر
رقم بمجرد ما المستخدم يطلبه حتي لو معملش حفظ ولما تيجي تاخد رقم جديد تقرا الرقم اللي في المخزن
وتزود عليه 1 ولو خرج بدون ما يحفظ ترجع الرقم اللي في المخزن لأخر رقم في الجدول
عيب الطريقه دي الوحيد انه ممكن يعدي ارقام في حاله عدم الحفظ
ربنا بوفقكوا

بتاريخ:
  • كاتب الموضوع

مــراااااااحــب أخـوانـي ( أمجـد + أشرف )
فـعـلاً .. المشكلة ممكن تظهر في الشكة الداخلية ..
والحل كما ذكر الأخ (أشرف) .. ممكن تأخذ الرقم قبل الحفظ في الـDatabase

طبعاً الحل إلي أنا وضعته وشرحته كان فقط لجهاز واحــد ..
ولن في الشبكات الداخلية .. ففي أحتمال كبير أن تحدث مشكلة تكرار الرقم
للك .. وقبل التحويل للـDatabase .. أخبر البرنامج بأن يتأكد من أن الرقم غير محجوز
وإن تم حجزه .. يضيف رقم واحد .. ويـرجع يتأكــد !!

بـالتـوفـيـج للـجمـيـع ؟؟؟

بتاريخ:

الاخ / اشرف
الاخ / بو عبدالعزيز

الحل المقترح هو :

اضافة امر انشاء الرقم max مع تريجير pre_insert على مستوى البلوك .... ولا داعي من التأكد أو السؤال من ان الرقم سبق ادخالة ام لا ....

اى قبل اضافة السجل مباشرة ... يتم معرفة اكبر رقم ويضاف ضمن بيانات السجل ... ويمكن ايضا اظهارة على الشاشة


شكرا لكما

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.