• 0
mokadem2000

ترقيم تلقائى مسلسل واحد عبر عدة جداول فى قواعد بيانات مختلفة

سؤال

قاعدة البيانات المستخدمة للتوضيح وفى إعداد الأمثلة التالية (Microsoft Access 2003):

DatabaseNumbering.zip

فى هذا الموضوع سيتم شرح وتوضيح طريقة عمل:

1) طرق ترقيم تلقائى مسلسل واحد عبر عدة جداول

2) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى نفس قاعدة البيانات

3) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى قواعد بيانات مختلفة (قد تكون على شبكة)

4) كيفية تطبيق هذا الـ(Template) على قاعدة بيانات أخرى (Microsoft Access)

الهدف: تطبيق ذلك بطريقة سهلة، وبأقل مجهود من المبرمج.

1) طرق ترقيم تلقائى مسلسل واحد عبر عدة جداول

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

1) وهى الطريقة الأكثر انتشارا، وذلك باستخدام الدالة (DMax)، أو إنشاء استعلام أو جملة (SQL) للحصول على أكبر قيمة فى الحقل باستخدام (MAX)

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

2) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى نفس قاعدة البيانات

تم عمل ذلك باستخدام الطريقة (1) وذلك بكتابة كود كـ (Template) حتى يسهل نسخه بسهولة إلى تطبيقات أخرى – راجع (Example 1) فى المرفق - وذلك بالتالى:

أولاً: الـ (modMain Module)، ولا يتم تغير أى شيئ فيه:

1) إنشاء (Class) كوحدة نحتفظ فيها بأسماء الجداول (والحقل) المراد أخذه بالاعتبار فى الترقيم المتسلسل – أسمها (Tables)

2) دالة بالاسم (AttachUniqueAutoNumbering) لإضافة أسماء الجداول والحقول. فى حالة وجود الجدول مضاف من قبل فلا يتم إضافته مرة أخرى، وهى تستخدم الـ (Linked list) فى تنظيم أسماء الجداول والحقول، لمزيد من التوضيح حول استخدام الـ (Linked list): فى http://www.arabteam2000-forum.com/index.php?showtopic=118580

3) دالة بالاسم (GetNextUniqueNumber) للحصول على الترقيم الجديد – من اكبر قيمة فى حقل الجداول - وتأخذ المتغير (Step) والذى من خلاله يتم تحديد الزيادة ، أى فى حالة الرغبة فى ترقيم يزيد بمقدار أعلى من (1) كما فى نموذج (fTable4) يتم تحديد ذلك من خلال القيمة المرسلة إلى الدالة

4) دالة (GetSqlString) لبناء جملة (SQL) المستخدمة فى إرجاع اعلى قيمة

5) دالة (GetField) لإرجاع قيمة (رقم) نتيجة جملة (SQL) المرسلة لها

6) الدالة (GetNextNumber) وهى (Public) وتستدعى الدالة (GetNextUniqueNumber)

7) الدالة (AttachTableField) وهى (Public) وتستدعى الدالة (AttachUniqueAutoNumbering)

ثانياًً: الـ (modTables Module)، ويتم التغير فية بإضافة الجداول والحقول للدالة (StartingTables):

1) يحتوى الدالة (StartingTables) والتى تحتوى على استدعاء الدالة (AttachTableField) بأسم الجدول يليه أسم الحقل بالشكل التالى:

Public Sub StartingTables()
AttachTableField "Table1", "ID"
AttachTableField "Table2", "Num"

End Sub

ثالثاًً: الـنماذج (Forms)، المراد استخدام الترقيم التلقائى فيها، ويتم تعديل معامل الدالة GetNextNumber حسب الاحتياج:

1) يحتوى على الحدثين (Form_Load الذى يستدعى StartingTables) و (Form_BeforeInsert الذى يستدعى يخصص القيمة الجديدة للحقل من خلال استدعاء الدالة GetNextNumber) بالشكل التالى:

Private Sub Form_Load()
StartingTables
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)
ID.Value = GetNextNumber(1) ' مقدار الزيادة = 1
End Sub

3) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى قواعد بيانات مختلفة (قد تكون على شبكة)

تم عمل ذلك باستخدام الطريقة (2) وذلك بكتابة كود كـ (Template) حتى يسهل نسخه بسهولة إلى تطبيقات أخرى – راجع (Example 2) فى المرفق - وذلك بالتالى:

أولاً: قاعدة البيانات (Master.mdb) وتحتوى على الجدول (Options) والذى يتم فيه حفظ أخر تسلسل ، والزيادة الافتراضية كل مرة:

ثانياً: قاعدة البيانات المراد تطبيق الترقيم عليها (Database2.mdb و Database1.mdb) ولا يحتويا على الجدول (Options):

أولاً: الـ (modMain Module)، ولا يتم تغير أى شيئ فيه:

1) دالة بالاسم (GetNextUniqueNumber) للحصول على الترقيم الجديد – من أخر قيمة تم تخزينها - وتأخذ المتغير (Step) والذى من خلاله يتم تحديد الزيادة ، أى فى حالة الرغبة فى ترقيم يزيد بمقدار أعلى من (1) كما فى نموذج (fTable4)

2) دالة (GetField) لإرجاع قيمة (رقم) نتيجة جملة (SQL) المرسله لها

3) الدالة (SetOption) لحفظ اخر ترقيم تم توليده فى الجدول (Options)

4) الدالة (GetNextNumber) وهى (Public) وتستدعى الدالة (GetNextUniqueNumber)

5) للبدء من ترقيم محدد: وذلك يمكن من خلال الجدول (Options)، فللبدء من ترقيم 400 يتم تخصيص القيمة (399) لـ (LastNumber) فى الجدول (Options)، حيث سيبدأ من بعد هذه القيمة باعتبار أنها أخر قيمة تم استخدامها.

6) للزيادة بقيمة معينة: وذلك يمكن من خلال الجدول (Options)، فللزيادة 3 يتم تخصيص القيمة (3) لـ (Stepping) فى الجدول (Options)، حيث ستتم استخدامها كقيمة افتراضية إذا لم تحدد فى الدالة (GetNextNumber).

ثانياًً: الـ (modTables Module)، ويحتوى الدالة (GetOptionsTable):

1) يحتوى الدالة (GetOptionsTable) ويتم التعديل فيها لضبط المتغير (ExternalDB) بحيث يحتوى المسار الكامل لقاعدة البيانات التى تحتوى على جدول (Options) المشترك – (بالطبع من الممكن إدراج الجدول "Options" كـ "Link Table" واستخدامه، ولكن قد يسبب ذلك مشاكل والغحتياج لإعادة ضبط إذا تم نقل قواعد البيانات إلى فهرس أخر – لذا فضلت استخدام ذلك من خلال دالة) - وهى بالشكل التالى:

Public Function GetOptionsTable() As String
Dim ExternalDB As String

ExternalDB = CurrentProject.Path & "\Master.mdb" ' المسار الكامل لقاعدة البيانات

If Len(ExternalDB) <> 0 Then
ExternalDB = "[" & ExternalDB & "]."
End If
GetOptionsTable = ExternalDB & "Options"
End Function

ثالثاًً: الـنماذج (Forms)، المراد استخدام الترقيم التلقائى فيها، ويتم تعديل معامل الدالة GetNextNumber حسب الاحتياج:

1) يحتوى على الحدث (Form_BeforeInsert الذى يستدعى يخصص القيمة الجديدة للحقل من خلال استدعاء الدالة GetNextNumber) بالشكل التالى:

Private Sub Form_BeforeInsert(Cancel As Integer)
ID.Value = GetNextNumber(3) ' مقدار الزيادة = 3
End Sub

4) كيفية تطبيق هذا الـ(Template) على قاعدة بيانات أخرى (Microsoft Access)

تم عمل ذلك باستخدام الطريقة (2) وذلك بكتابة كود كـ (Template) حتى يسهل نسخه بسهولة إلى تطبيقات أخرى – راجع (Example 2) فى المرفق - وذلك بالتالى:

1) بنسخ (Export and Import) الـ(Modules) التالية إلى قاعدة البيانات لديك (modTables - modMain) والـ(Class Tables)

2) بنسخ الجدول (Options) إلى قاعدة البيانات الجديدة

3) صمم الجدول والنموذج الذى يعمل من خلاله كما فى الأمثلة المرفقة

4) التعديل فى (Module modTables) الدالة (StartingTables) وإدرج أسماء الجداول والحقل المراد عمل ترقيم متسلسل له

5) التعديل فى (Module modTables) الدالة (GetOptionsTable) لتحديد قاعدة البيانات المستخدمة كمرجع فى التسلسل

6) أضف الحدثين (Form_Load - Form_BeforeInsert) فى النماذج المشمولة فى التسلسل التلقائى كما موضع فى الأمثلة

(Example 3) يحتوى على دمج للطريقتين، حيث قاعدة البيانات (MultiNumbering.mdb) تحتوى الجدول (Options) ، وقاعدة البيانات (SubMultiNumbering.mdb) تعتمد على الجدول الموجود فى القاعدة الأولى، كذلك تم إضافة الخيار "NumMethod" فى الجدول (Options) لسهولة التبديل بين استخدم الطريقتين (0= الطريقة الأولى 1= الطريقة الثانية).

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

http://www.arabteam2000-forum.com/index.ph...howtopic=118448

Tip: يمكن عمل صورة (BMP) بنفس أسم قاعدة البيانات (كما فى مثال 3)، لعضها بدلاً من صورة (Access Startup)

ملحوظة: لمزيد من الشرح والتوضيح حول استخدام الـ (Linked list):

http://www.arabteam2000-forum.com/index.php?showtopic=118580

مثال: http://www.arabteam2000-forum.com/index.php?showtopic=118582

وشكراً

تم تعديل بواسطه Eng. Usama El-Mokadem
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

19 إجابة على هذا السؤال .

  • 0

اخي الفاضل العبقري المهندس / اسامه

بارك الله فيك على هذا الطرح الرائع والمثال الجميل لقد بهرتني الفكره فهي جديده نوعا ما وتستحق الشكر والاشادة بذلك

هناك ملاحظة في مثال في جميع الامثله ولنأخذ مثلا هذه القاعدة MultiNumber.mdb الخاص بـ Max Value نلاحظ التالي

من خلال النموذج عن فتح FORM1 وتعبئة بيانات به مثلا حتى نصل للرقم 8

ثم نفتح FORM2 ونقوم بتعبئة بيانات به حتى نصل للرقم 16

ثم نفتح FORM3 ونقوم بتعبئة بيانات حتى نصل للرقم 25

ثم نفتح FORM4 ونقوم بتعبئة بيانات ( هنا المشكلة ) بمجرد تعبئة اول سجل نجده اخذ الرقم 27 والسجل الذي بعده اخذ الرقم 29 والسجل الذي بعده اخذ الرقم 31

( اين ذهبت الارقام 26 و 28 و 30 ) :) :) بصفتك مهندس اكيد مخبي الارقام عندك في الجهاز :) :)

نترك هذا النموذج وننتقل الى النموذج رقم 5

عند تعبئة البيانات نجد انها بدأت من اخر رقم كان في النموذج رقم 4

وكذلك النموذج رقم 6 لا يوجد به مشكله اذا المشكله هي في النموذج رقم 4

ختاما لك مني كل الشكر والتقدير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الأخت الفاضلة ... أستاذتنا الكبيرة / زهرة

شكراً جزيلاً ... وبارك الله فيك ، الحقيقة عاجز عن الشكر :)

معذراً بخصوص Form4 ... فقد أشرت لها بشكل سريع فى الموضوع فى الفقرة التالية: (وكان يجب على توضيح ذلك بتفصيلات أكثر...)

1) دالة بالاسم (GetNextUniqueNumber) للحصول على الترقيم الجديد – من أخر قيمة تم تخزينها - وتأخذ المتغير (Step) والذى من خلاله يتم تحديد الزيادة ، أى فى حالة الرغبة فى ترقيم يزيد بمقدار أعلى من (1) كما فى نموذج (fTable4)

والحقيقة قد تعمدت ترقيم يزيد عن الواحد فى أحد النماذج (FORM4)، وذلك لتوضيح سهولة أتمام ذلك، فبمراجعة نموذج (4) فى حدث (Form_BeforeInsert) سنجد أستدعاء الدالة (GetNextNumber(2 ، والمقصود أن هذا النموذج يزيد بمقدار (2)، وبالطبع يمكن تخصيص أى رقم للزيادة (3 - 10 - 150 ... الخ):

Private Sub Form_BeforeInsert(Cancel As Integer)
Code.Value = GetNextNumber(2)
End Sub

وكانت محاولتى فى كتابة البرنامج تتركز على أن يكون الكود فى النموذج والتعديلات المطلوبه لتطبيق ذلك فى قواعد بيانات أكسس أخرى أقل ما يمكن ولتنفيذ أغلب الإحتياجات (فقط عدة أسطر فى النموذج' وسطر يتم به أضافة أسم الجدول فى المديول modTables)، وذلك طبعاً للتسهيل تطبيقه

شكراً جزيلاً

تم تعديل بواسطه Eng. Usama El-Mokadem
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

نعم اخي الكريم لقد قرأت جميع الكود المكتوب وكنت اعرف اين كانت المشكله ولكن احببت ان توضح ذلك للأعضاء بصفه خاصه حتى لا يعتقدون ان في الموضوع خطأ ما .

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بصراحة ابداع ومشكور والشكر موصول للاخت زهرة وبارك الله لنا فيكم وزاد من علمكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جزيلا

ووفقكم الله لما يحبه ويرضاه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكورين ع الموضوع المميز

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

بارك الله فيك اخي الكريم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلام جميل والله وبارك الله فيك يا أخي الغالي اسامة علي مجهودك الوافر

لكن انظر عندما حاولت تحميل المرفق من المنتدي

773451-1198.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلام جميل والله وبارك الله فيك يا أخي الغالي اسامة علي مجهودك الوافر

لكن عندما حاولت تحميل المرفق حصل زي ما قال اخونا محمد باشا فؤاد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
قاعدة البيانات المستخدمة للتوضيح وفى إعداد الأمثلة التالية (Microsoft Access 2003):

DatabaseNumbering.zip

أخي العزيز المهندس أسامة

تحية عطرة وبعد ،،،،،،،،،،،

أشكرك على مجهوداتك الطيبة وروائعك النيرة وبارك الله فيك وجعلك الله خير نصير لكل انسان يحب الله ورسوله

ملاحظة : لا يمكن تحميل الملف للاسف

الرجاء تنزيله من جديد

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تفضلوا اخواني الكرام

الملف الخاص بالمهندس اسامه المقدم

DatabaseNumbering.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
تفضلوا اخواني الكرام

الملف الخاص بالمهندس اسامه المقدم

DatabaseNumbering.zip

أختي الغالية أم عهود ....... حفظها الله

تحية طيبة وبعد ،،،،،،،،

أشكرك جزيلاً على سرعة ردك وأيضاً أشكرك على معلوماتك القيمة والرائعة وجهودك التي بإستمرار لا تحرمينا منها وبارك الله فيك وجعله الله في ميزان حسناتك.

مع أطيب تحياتي لك بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم رائع بارك الله فى الصحبة الطيبة ونشكر جميع الأخوة والأخوات المشاركين فى المنتدى

تم تعديل بواسطه مبروك
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قاعدة البيانات المستخدمة للتوضيح وفى إعداد الأمثلة التالية (Microsoft Access 2003):

DatabaseNumbering.zip

فى هذا الموضوع سيتم شرح وتوضيح طريقة عمل:

1) طرق ترقيم تلقائى مسلسل واحد عبر عدة جداول

2) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى نفس قاعدة البيانات

3) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى قواعد بيانات مختلفة (قد تكون على شبكة)

4) كيفية تطبيق هذا الـ(Template) على قاعدة بيانات أخرى (Microsoft Access)

الهدف: تطبيق ذلك بطريقة سهلة، وبأقل مجهود من المبرمج.

1) طرق ترقيم تلقائى مسلسل واحد عبر عدة جداول

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

1) وهى الطريقة الأكثر انتشارا، وذلك باستخدام الدالة (DMax)، أو إنشاء استعلام أو جملة (SQL) للحصول على أكبر قيمة فى الحقل باستخدام (MAX)

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

2) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى نفس قاعدة البيانات

تم عمل ذلك باستخدام الطريقة (1) وذلك بكتابة كود كـ (Template) حتى يسهل نسخه بسهولة إلى تطبيقات أخرى – راجع (Example 1) فى المرفق - وذلك بالتالى:

أولاً: الـ (modMain Module)، ولا يتم تغير أى شيئ فيه:

1) إنشاء (Class) كوحدة نحتفظ فيها بأسماء الجداول (والحقل) المراد أخذه بالاعتبار فى الترقيم المتسلسل – أسمها (Tables)

2) دالة بالاسم (AttachUniqueAutoNumbering) لإضافة أسماء الجداول والحقول. فى حالة وجود الجدول مضاف من قبل فلا يتم إضافته مرة أخرى، وهى تستخدم الـ (Linked list) فى تنظيم أسماء الجداول والحقول، لمزيد من التوضيح حول استخدام الـ (Linked list): فى http://www.arabteam2000-forum.com/index.php?showtopic=118580

3) دالة بالاسم (GetNextUniqueNumber) للحصول على الترقيم الجديد – من اكبر قيمة فى حقل الجداول - وتأخذ المتغير (Step) والذى من خلاله يتم تحديد الزيادة ، أى فى حالة الرغبة فى ترقيم يزيد بمقدار أعلى من (1) كما فى نموذج (fTable4) يتم تحديد ذلك من خلال القيمة المرسلة إلى الدالة

4) دالة (GetSqlString) لبناء جملة (SQL) المستخدمة فى إرجاع اعلى قيمة

5) دالة (GetField) لإرجاع قيمة (رقم) نتيجة جملة (SQL) المرسلة لها

6) الدالة (GetNextNumber) وهى (Public) وتستدعى الدالة (GetNextUniqueNumber)

7) الدالة (AttachTableField) وهى (Public) وتستدعى الدالة (AttachUniqueAutoNumbering)

ثانياًً: الـ (modTables Module)، ويتم التغير فية بإضافة الجداول والحقول للدالة (StartingTables):

1) يحتوى الدالة (StartingTables) والتى تحتوى على استدعاء الدالة (AttachTableField) بأسم الجدول يليه أسم الحقل بالشكل التالى:

Public Sub StartingTables()
AttachTableField "Table1", "ID"
AttachTableField "Table2", "Num"

End Sub

ثالثاًً: الـنماذج (Forms)، المراد استخدام الترقيم التلقائى فيها، ويتم تعديل معامل الدالة GetNextNumber حسب الاحتياج:

1) يحتوى على الحدثين (Form_Load الذى يستدعى StartingTables) و (Form_BeforeInsert الذى يستدعى يخصص القيمة الجديدة للحقل من خلال استدعاء الدالة GetNextNumber) بالشكل التالى:

Private Sub Form_Load()
StartingTables
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)
ID.Value = GetNextNumber(1) ' مقدار الزيادة = 1
End Sub

3) تطبيق ترقيم تلقائى مسلسل واحد عبر عدة جداول فى قواعد بيانات مختلفة (قد تكون على شبكة)

تم عمل ذلك باستخدام الطريقة (2) وذلك بكتابة كود كـ (Template) حتى يسهل نسخه بسهولة إلى تطبيقات أخرى – راجع (Example 2) فى المرفق - وذلك بالتالى:

أولاً: قاعدة البيانات (Master.mdb) وتحتوى على الجدول (Options) والذى يتم فيه حفظ أخر تسلسل ، والزيادة الافتراضية كل مرة:

ثانياً: قاعدة البيانات المراد تطبيق الترقيم عليها (Database2.mdb و Database1.mdb) ولا يحتويا على الجدول (Options):

أولاً: الـ (modMain Module)، ولا يتم تغير أى شيئ فيه:

1) دالة بالاسم (GetNextUniqueNumber) للحصول على الترقيم الجديد – من أخر قيمة تم تخزينها - وتأخذ المتغير (Step) والذى من خلاله يتم تحديد الزيادة ، أى فى حالة الرغبة فى ترقيم يزيد بمقدار أعلى من (1) كما فى نموذج (fTable4)

2) دالة (GetField) لإرجاع قيمة (رقم) نتيجة جملة (SQL) المرسله لها

3) الدالة (SetOption) لحفظ اخر ترقيم تم توليده فى الجدول (Options)

4) الدالة (GetNextNumber) وهى (Public) وتستدعى الدالة (GetNextUniqueNumber)

5) للبدء من ترقيم محدد: وذلك يمكن من خلال الجدول (Options)، فللبدء من ترقيم 400 يتم تخصيص القيمة (399) لـ (LastNumber) فى الجدول (Options)، حيث سيبدأ من بعد هذه القيمة باعتبار أنها أخر قيمة تم استخدامها.

6) للزيادة بقيمة معينة: وذلك يمكن من خلال الجدول (Options)، فللزيادة 3 يتم تخصيص القيمة (3) لـ (Stepping) فى الجدول (Options)، حيث ستتم استخدامها كقيمة افتراضية إذا لم تحدد فى الدالة (GetNextNumber).

ثانياًً: الـ (modTables Module)، ويحتوى الدالة (GetOptionsTable):

1) يحتوى الدالة (GetOptionsTable) ويتم التعديل فيها لضبط المتغير (ExternalDB) بحيث يحتوى المسار الكامل لقاعدة البيانات التى تحتوى على جدول (Options) المشترك – (بالطبع من الممكن إدراج الجدول "Options" كـ "Link Table" واستخدامه، ولكن قد يسبب ذلك مشاكل والغحتياج لإعادة ضبط إذا تم نقل قواعد البيانات إلى فهرس أخر – لذا فضلت استخدام ذلك من خلال دالة) - وهى بالشكل التالى:

Public Function GetOptionsTable() As String
Dim ExternalDB As String

ExternalDB = CurrentProject.Path & "\Master.mdb" ' المسار الكامل لقاعدة البيانات

If Len(ExternalDB) <> 0 Then
ExternalDB = "[" & ExternalDB & "]."
End If
GetOptionsTable = ExternalDB & "Options"
End Function

ثالثاًً: الـنماذج (Forms)، المراد استخدام الترقيم التلقائى فيها، ويتم تعديل معامل الدالة GetNextNumber حسب الاحتياج:

1) يحتوى على الحدث (Form_BeforeInsert الذى يستدعى يخصص القيمة الجديدة للحقل من خلال استدعاء الدالة GetNextNumber) بالشكل التالى:

Private Sub Form_BeforeInsert(Cancel As Integer)
ID.Value = GetNextNumber(3) ' مقدار الزيادة = 3
End Sub

4) كيفية تطبيق هذا الـ(Template) على قاعدة بيانات أخرى (Microsoft Access)

تم عمل ذلك باستخدام الطريقة (2) وذلك بكتابة كود كـ (Template) حتى يسهل نسخه بسهولة إلى تطبيقات أخرى – راجع (Example 2) فى المرفق - وذلك بالتالى:

1) بنسخ (Export and Import) الـ(Modules) التالية إلى قاعدة البيانات لديك (modTables - modMain) والـ(Class Tables)

2) بنسخ الجدول (Options) إلى قاعدة البيانات الجديدة

3) صمم الجدول والنموذج الذى يعمل من خلاله كما فى الأمثلة المرفقة

4) التعديل فى (Module modTables) الدالة (StartingTables) وإدرج أسماء الجداول والحقل المراد عمل ترقيم متسلسل له

5) التعديل فى (Module modTables) الدالة (GetOptionsTable) لتحديد قاعدة البيانات المستخدمة كمرجع فى التسلسل

6) أضف الحدثين (Form_Load - Form_BeforeInsert) فى النماذج المشمولة فى التسلسل التلقائى كما موضع فى الأمثلة

(Example 3) يحتوى على دمج للطريقتين، حيث قاعدة البيانات (MultiNumbering.mdb) تحتوى الجدول (Options) ، وقاعدة البيانات (SubMultiNumbering.mdb) تعتمد على الجدول الموجود فى القاعدة الأولى، كذلك تم إضافة الخيار "NumMethod" فى الجدول (Options) لسهولة التبديل بين استخدم الطريقتين (0= الطريقة الأولى 1= الطريقة الثانية).

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

http://www.arabteam2000-forum.com/index.ph...howtopic=118448

Tip: يمكن عمل صورة (BMP) بنفس أسم قاعدة البيانات (كما فى مثال 3)، لعضها بدلاً من صورة (Access Startup)

ملحوظة: لمزيد من الشرح والتوضيح حول استخدام الـ (Linked list):

http://www.arabteam2000-forum.com/index.php?showtopic=118580

مثال: http://www.arabteam2000-forum.com/index.php?showtopic=118582

وشكراً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عمل اكثر من رائع

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

استاذي الفاضل ابو اسامة

السلام عليكم

ممكن التكرم بالمشاركة في هذا الموضوع خاص بالترقيم التلقائي.

عندي حقل نصي ياخذ ترقيم تلقائي بالشكل الاتي 2010-00001

وعند اضافة سجل جديد ياخذ الشكل الاتي 2010-00002 وهاكذ

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

لقد قمت بتقسيم قاعدة البيانات الى جداول والى ( استعلامات ونماذج وتقارير...الخ) لتهيئتها للعمل على الشبكة

ولكن اثناء التسجيل وعندما ياخذ المستخدم الرقم الاتي 2010-00001

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

كيف السبيل الى حجز الرقم مباشرة بمجرد الادخال في النموذج بحيث المستخدم الاخر في الشبكة ياخذ رقم جديد

ارجو الافادة العاجلة

ولك خالص شكري

الموضوع قد طرح سابقا على هذا الرابط مع المرفق

http://www.arabteam2000-forum.com/index.php?showtopic=225626

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

استفدت من هذا العمل

جزى الله الاخوة خيرا

ولكن الترقيم يعمل بين 47 جدول فقط

واحتاج الزيادة

فهل أجد من يسعفني بذلك

وبارك الله في الجميع

تم تعديل بواسطه طالب النصيحة
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .