الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دالة لترقيم الجداول في قاعدة البيانات بشكل أوتوماتيكي

بدأه maajed555 في 19 مايو 2009 · 10 رد · 4,037 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

نظرا لكثرة السؤال عن ترقيم الجدول في قاعدة البيانات ... فقد صنعت مثالا للترقيم الأوتوماتيكي لأي سجل جديد تريد أن تضعه في قاعدة البيانات

في المثال دالة اسمها (NumTabl) تصلح لأي جدول ، بمعنى أنها تصلح لتكون أداة ترقيم لجميع جداول مشروعك بشرط أن تحسن استخدامها

تحياتي لكم جميعا

AutoNumTable.rar

#2

:clapping: :clapping:

تسلم

#3

جزاك الله خيراً أخ ماجد، مثال جميل، ومجهود مميز.

بالتوفيق :)

هذه الجملة خاطئة  :wacko: 


#4

بارك الله فيك وسدد خطاك

فاعلم أنه لا إله إلا الله

#5

جزاك الله خيرا

#6

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

بارك الله فيكم إخواني ... وجزاكم الله خيرا

وشكرا لكم على تفاعلكم

#7

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

ولكن لي سؤال هل إذا تم حذف هذا الأسم ( السجل ) فهل يتم إعادة الترقيم تلقائي لباقي السجلات

عامة جاري تجربة كود سيادتك على قاعدة بيانات بها حذف وإضافة

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

شادي المصري

#8

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

وجزاك الله خيرا اخي شادي

بالنسبة للدالة فهي تأخذ أكبر قيمة في عمود ترقيم السجلات ثم تضيف له (1) وتضيف الناتج كرقم جديد للسجل الجديد الذي تريد أن تضيفه إلى الجدول لديك

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

سأضرب لك مثالا لأبين لك أن عملية إعادة ترقيم السجلات طريقة غير عملية ، بل قد تؤدي إلى كوارث

من المعلوم أن كل دولة جعلت لمواطنيها أرقاما وطنية ، بحيث يحصل كل مواطن على رقم وطني خاص به غير قابل للتكرار

وعن طريق الاسم ورقم الهوية يتميز كل فرد من أفراد الوطن عن الآخرين ، ولكن لنفرض أن الدولة قررت أن تعيد ترقيم الهويات الوطنية ، بحيث يكون كل رقم يموت صاحبه يمنح لغيره أو يعاد الترقيم من جديد ... هل هذا الحل واقعي ومعقول؟

قبل عملية الترقيم الجديدة ... كان أحمد حسن كامل صاحب رقم الهوية 33333333 مثلا ، قد اشترى أرضا وسجل فيها بياناته عن طريق الشهر العقاري أو أي جهة حكومية كانت ، وبعد إعادة الترقيم ظهر أكثر من شخص اسمه "أحمد حسن كامل" وكلهم يدعي أن هذه الأرض ملكه بدليل تطابق اسمه مع الاسم المسجل في أوراق ملكية الأرض ... وحيث أن الأرقام الوطنية قد تغيرت ، فكيف يثبت صاحب الأرض الحقيقي ملكيته للأرض وقد تغير رقمه الوطني إلى رقم آخر؟؟

أرجو أن يكون المثال واضحا لبيان المعنى المقصود

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

إذا كنت تريد إعادة ترقيم السجلات من أجل معرفة عدد السجلات عن طريق معرفة قيمة آخر سجل فيها ، فإن هناك دالة تغنيك عن ذلك وهي Count التي تعود لك بعدد السجلات الموجودة في الجدول بغض النظر عن قيمة آخر سجل فيها

أيضا ... من العادات البرمجية الجيدة أنك عندما تريد أن تحذف سجلا ... فإنك بدلا من حذفه تضيف إليه حقلا من نوع (نعم/لا) وتجعل هذا السجل خاص بالمحذوفات ، بحيث تكون قيمته الاعتيادية (لا) ، وعندما يقوم المستخدم بحذف هذا السجل فإنك لا تحذفه فعليا من قاعدة البيانات ، وإنما تعدل على هذا الحقل وتجعل قيمته (نعم) ... وتجعل تعاملك في البرنامج مع السجلات التي تكون قيمة هذا الحقل فيها = لا ، وبذلك لا تظهر السجلات التي قيمة هذا الحقل فيها = نعم ، فكأنك قمت بحذفها ، مع الإبقاء عليها في قاعدة البيانات للمراجعة ومعرفة مصادر الأخطاء

وأخيرا ... إذا كنت مصرا على إعادة ترقيم الحقل فإنك تستطيع

ولكن عليك أن تجعل ذلك بطريقة أكثر احترافا ، وذلك بالنظر إلى عدد السجلات في حقل الترقيم ومقارنتها بأكبر قيمة في نفس الحقل ، فإن كانت متساوية فلا داعي لإعادة الترقيم لأن الأرقام مرتبة ما عليك سوى إضافة + 1 إلى قيمة أكبر سجل ، ليكون الناتج هو رقم السجل الجديد الذي تريد أن تضيفه

أما إذا كانت القيمة غير متساوية ، فهنا يمكنك إعادة الترقيم عن طريق جملة تكرار تبدأ من رقم 1 وتنتهي بعدد السجلات الموجودة فعليا في الجدول

أتمنى لك التوفيق

#9

مشكور يا أخي على إيضاح سيادتك

بس حضرتك دخلتني في مجال الأرقام القومية والتسجيلات وخلافه وده مش هو المقصود يا أخي

ما أقصده أني عند عمل برنامج على سبيل المثال لأجور العاملين

فيجب أن يكون الكشف أمامي مرقم بأرقام تسلسلية وهذا بخلاف رقم العامل id

ولكن ما أقصده ما يكتب مسلسل على عدد العاملين في الكشف الكتابي المنظور للأخرين أو ما يسمى بالمسلسل العددي لعدد العاملين وليس لأرقام العاملين .

وعند فصل عامل على سبيل المثال فإن سجله سيتم إدخال شخص أخر مثل ما تكرمت سيادتك وأشرت

ولكن في الكشف المنظور أمام القارئ هو إعاد المسلسل العددي وبلاش الرقمي حتى لا يختلط الأمر

وهذا ما أقصده

فعلى سبيل المثال في خلايا الأكسل عند حذف صف تجد الأكسل يقوم مباشرة بإعادة الترقيم التلقائي وذلك بالنسبة لصفوفه وإذا ماتم استخدام الأكسل كقاعدة بيانات فإنه يتم استخدام عمود من الأعمده وليكن عمود A للترقيم التلقائي وتستخدم دالة ()raw والتي تقوم بإعادة الترقيم التلقائي بعد حذف صف معين .

وهو ده إللي أنا بسأل عليه

عامة يا أخي تكرم على المشروع وعلى الإيضاح وربنا يوفقك ويزيدك علما

أخيك شادي المصري

تم تعديل هذه المشاركة بواسطة okiskar في 24 مايو 2009 في 22:54

#10

الأخ الفاضل شكرا على هذا المجهود الرائع و لكن ...

هناك ملحوظة مهمة جدا

وهى انك لو اضفت سجل وكان الترقيم التلقائى له 20 ثم قمت بحذف هذا السجل واضافة سجل اخر فيصبح ترقيمه 20 ايضا

والسبب فى ذلك ان دالة الترقيم تضيف 1 على اكبر رقم فى حقل الترقيم فإذا قمت بحذف السجل صاحب اكبر رقم وهو اخر سجل اضفته فإن الترقيم التالى سيكون على السجل السابق له .

عموما اذا لك يكن كلامى واضح اضف سجل جديد وراقب رقمه وليكن 55 ثم قم بحذف هذا السجل واضف سجل اخر جديد من المفترض ان يكون رقمه 56 ولكن ستلاحظ ان رقمه اصبح 55 ايضا

تم تعديل هذه المشاركة بواسطة عبدالفتاح حسن في 25 مايو 2009 في 22:42

كن كالنخيل عن الأحقاد مرتفعا .. يرمى بصخر فيرمى أطيب الثمر

#11

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

الأخ شادي المصري

أعتذر منك إن كان المثال غير مفهوم لديك ، ولكنه في نظري يمثل المعنى المقصود

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

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

وعلى كل حال ... فقد أجريت تعديلا في المشروع المرفق ، عدلت فيه على قاعدة البيانات بإضافة تقريرين لإنتاج رقم مسلسل ، تجد ذلك في تقرير اسمه Qnum ، حيث يكون الترقيم في أحد الحقول مسلسلا ولا يتأثر بعمليات الحذف والإضافة ... وكذلك تستطيع عمل ذلك عن طريق الكود البرمجي عند جلب البيانات من الجدول لعرضها في أي أداة عرض ، بحيث تجعل الكود يضيف لكل سجل رقما مسلسلا يبدأ من الرقم 1 وينتهي بنهاية عدد السجلات المعروضة

الأخ عبد الفتاح حسن

ما المشكلة في الاستفادة من الرقم المحذوف طالما أنه رقم مستبعد ولا يؤثر في التقارير والعلاقات داخل قاعدة البيانات!! ... فإن قلت : بل له تأثير في ذلك ... فأقول : فلماذا تحذف رقما له تأثير في قاعدة البيانات؟!

AutoNumTable1.rar

مواضيع مشابهة