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

مشكلة في استخدام نفس الحقل في قاعدة البيانات لاكثر من مستخدم

بدأه zeus85 في 8 سبتمبر 2014 · 12 رد · 1,007 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

شباب انا اقوم بتصميم برنامج لادارة تعاملات احدى الشركات والحمد لله وصلت مرحلة جيدة فيه ولكن للاسف ظهرت لي هذه المشكلة وبصراحة لا اعرف كيف احلها على الرغم من عدة محاولاتي 

 

المشكلة هي كالاتي :

 

لدي في قاعدة البيانات جدول اسمه [Daily transactions]  يتم تسجيل جميع معلومات التعاملات اليومية للشركة مع زبائن الشركة والشركات الاخرى و يحوي هذا الجدول على عمود [Transaction ID] والذي يمثل الرقم التسلسلي للتعامل .

 

طبعا كمستخدم للبرنامج عندما ينتقل الى صفحة التعاملات اليومية لملئ المعلومات سيقوم البرنامج بعمل Query لايجاد اخر رقم تسلسلي ويزيد عليه بمقدار واحد كرقم تسلسلي جديد وهذا شي سهل ويظهر هذا الرقم عنده في الصفحة كرقم تسلسلي لهذا التعامل .

 

لوفرضنا انه اخر رقم تسلسلي في قاعدة البيانات كان 50 وبانه اكثر من مستخدم (عدد المستخدمين 3 ) طلبوا صفحة التعاملات اليومية لملئ البيانات في نفس اللحظة او في اوقات متقاربة جدا وبالتالي جميع المستخدمين سيظهر لديهم نفس الرقم التسلسلي الجديد وهو 51 لانه نفس ال Query يعمل لدى الجميع والمفروض انه يكون 51 , 52 , 53 كل حسب اسبقيته في طلب صفحة التعاملات اليومية فكيف اقوم بمثل هذه العملية ؟؟

#2

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

 

 

اخي العزيز لا اعلم ما السبب لعدم استخدامك للـ AutoIncrement في حقل Transaction ID وبهذه الطريقه سيتم الادخال بتسلسل حسب ترتيب ادخال البيانات من قبل المستخدمين الثلاث. 

 

وفي حال ان الـ AutoIncrement يسبب لك اي مشاكل. ساقترح عليك اقتراح هو ليس بمثابه حل وانما تحايل ليس اكثر, ويمكن ان تجد متخصصين يمكنهم ايجاد حلول برمجيه افضل. 

 

 

الاقتراح : 

 

في صفحة التعاملات اليوميه التي يقوم بها الموظفين بملئ البيانات من خلالها يمكنك عمل جملة ادخال في Page_Load بقيم فارغه مبدئيا لكل موظف. بمعنى ان كل موظف يدخل هذه الصفحة ستقوم بدورها ادخال الـ Record على جدول الـ Transactions بقيم فارغه للاعمدة ولكن بقيمة الرقم التسلسلي الحالي في عمود Transaction ID. وعند ملئ البيانات كامله ستقوم بعمل Update لهذا الـ Record وفي حالة النقر على رز الغاء ( ان وجد ) ستقوم بعمل Delete لهذا الـ Record. 

 

مع العلم ان في حالة الـ Delete ستخسر رقم تسلسلي بمعنى. 

لنفرض ان الرقم هو 50 ( الرقم التسلسلي الحالي ), عند دخول الموظف الاول لهذه الصفحة ستقوم بادخل الـ Record واعطاءه الرقم 51 

وعند دخول الموظف الثاني وكان الاول لم يقم بانهاء عمليه ملئ البيانات ستقوم الصفحة باعطاءه الرقم 52 . 

ولكن لنفرض ان الموظف الاول قام بالغاء ملئ البيانات وانتقل الى صفحة اخرى بهذه الحالة ستقوم بحذف الـ Record الذي يحتوي على الرقم 51 والموظف الثاني لا يزال يملك الرقم 52. فكيف يمكنك حل ذلك ؟ 

 

 

******************** 

 

وفي حالة استخدام Global Variable لحل مثل هذه المشكله .. ستنتهي بك لنفس مشكله الـ Delete في الاقتراح السابق .. بمعنى انه في حالة الغاء عملية ادخال بيانات التعاملات اليوميه ستخسر قيمة رقم تسلسلي للموظف الذي قام بعملية الالغاء. 

 

 

*******************

 

او يمكنك في حالة اكمال عملية ملئ البيانات والنقر على زر حفظ قم بفحص اخر رقم تسلسلي وفي حالة تطابق او كان اصغر من الرقم التسلسلي الموجود حاليا في صفحة الموظف, اظهر له رساله تنبيه ان هذه الرقم تم حجزه من قبل موظف اخر هل تريد الالغاء او انشاء رقم جديد. 

 

 

**** ملاحظه 

ارى من وجهة نظري ان الحل الامثل هو استخدام AutoIncrement للحقل Transaction ID. 

 

 

 

 

اتمنى ان اكون قد افدت. 

2

<<<<<<<< NOTHING BEAT HUMAN BRAIN >>>>>>>>>>>>


https://itunes.apple.com/us/app/ding-dang/id564583614?mt=8

#3

شكرا اخ مروان على مرورك واقتراحك 

اما بخصوص ال Auto Increment  فانا لا استطيع استخدامه لانه الموظف يجب ان يطلع على الرقم التسلسلي للتعامل وثانيا لان رقم التسلسل  سيتم ادراجه اصلا في جدول ثاني لذلك فظهور الرقم التسلسلي مهم جدا في الصفحة

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

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

#4

يمكن فهمت عليك, نت بحاجة لآلية قفل للرقم التسلسلي مثل عمليات التزامن وغيرها وبنفس الوقت تريد عرض الرقم قبل استخدامه

 

الحل بوضع متحول من نوع Application على مستوى التطبيق يقوم بزيادة العداد بمقدار 1 عند كل عملية طلب للصفحة الخاصة بالاستمارة ويعرضها ويمكنك استخدامها بأي وقت كما يمكنك الانقاص بمقدار 1 لو لم يملء الاستمارة

 

طبعا هذا الحل مبدأي وبسيط يمكنك تعقيده والاطلاع على آليات التزامن

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#5

اخ تمام ما فهمت عليك بصراحة ...... ما هو قصدك بالمتحول من نوع Appliation  ؟؟

#6

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

 

اخ  zeus85 عرض الرقم التسلسلي للموظف مهم جدا ؟ ام ان الرقم التسلسلي مهم لديك فقط لتخزينه في اكثر من جدول ؟ 

<<<<<<<< NOTHING BEAT HUMAN BRAIN >>>>>>>>>>>>


https://itunes.apple.com/us/app/ding-dang/id564583614?mt=8

#7

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

#8

هل أنت تقوم ببناء تطبيق ويب أم ويندوز؟

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#9

اخ تمام تطبيق ويب وحتى ان كان تطبيق ويندوز فالمشكلة نفس المشكلة !!

#10

بالنسبة لإجابة الاخ 

Marwan Alakhras

هي الاجابة الانسب

#11

صديقي في الفيجوال استديو بلغة السي شارب أو لفي بي هنالك كلاس اسمه Application عرف متحول من هذا الصف عندها قيمة المتحول ستبقى واحدة على مستوى كل المستخدمين الآخرين يعني لو قيمة المتحول 1 لدي ستكون لديك نفس القيمة وهكذا يمكنك قفل عملية القراءة والكتابة لهذا المتحول

 

أنا فكرتي تقوم على اساس المزامنة بأبسط أشكالها

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#12

الحل هو استخدام  جملة  lock  statement

 رابط الشرح

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

تم تعديل هذه المشاركة بواسطة NaSeR33 في 18 سبتمبر 2014 في 04:02

#13

او انك  تجلب زيادة 1+ من عداد الرزوار بالصفحة  يعني تدخل كل زيادة للفصحه هي مقدار زيادة للرقم التسلسلي

كذا  عدد الزيارات + الزياة الحالية لاي مستخدم

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…