السلام عليكم
عندي جدول فيه ID ، وممكن في بعض الحالا ان يتم الدخول للصفحة وعمل ÷ىسثقف بنفس الوقت ، السؤال هو كيف يمكن عمل Lock ل Table وعند الانتهاء من عملية Insert ينتهي مفعول ال lock ويقوم بالعملية شخص اخر
ولكم جزيل الشكر
السلام عليكم
عندي جدول فيه ID ، وممكن في بعض الحالا ان يتم الدخول للصفحة وعمل ÷ىسثقف بنفس الوقت ، السؤال هو كيف يمكن عمل Lock ل Table وعند الانتهاء من عملية Insert ينتهي مفعول ال lock ويقوم بالعملية شخص اخر
ولكم جزيل الشكر
اذا مشان الـ PK فقط استخدم Identity للحقل و هيك ما بتضل مسؤوليتنا توليد Unique PK
شكرا اخي ولكن ال ID ليست identity ولا اريد ان تكون كذلك لعدة اسباب
طيب ممكن تشرح المشكلة أكثر؟
يعني هل المطلوب عملية INSERT فقط؟
و ما أهمية توليد الـ ID يدوياً لك؟
المطلوب في عملية ال Insert وUpdate
توليد ال ID يدويا ، انا عندي صفحة ارسال ايميلات وكل ايميل اله رقم وممكن ارسل نفس الايميل لاكتر من شخص فمثلا
ContactID = 1 ID = 1
ContactID = 2 ID = 1
يعني ال ID ممكن تتكرر باكتر من Record
وشكرا
اقتباستوليد ال ID يدويا ، انا عندي صفحة ارسال ايميلات وكل ايميل اله رقم وممكن ارسل نفس الايميل لاكتر من شخص فمثلا
على ماأعتقد يوجد عندك مشكلة بالتحليل
اين المشكلة اذا كان ايميل لاكثر من شخص فلا داعي لتوليد الـid يدوياً
اما ان يكون ContactID هو identity
أو اذا كان في حالة لكل شخص اكثر من أيميل و ايميل يمكن ان يكون لاكثر من شخص في هذه الحالة يصبح الـid والـContactID مفتاح مركب ومن المستحيل ان يتكرر ولاتوجد مشكلة
-----------------------------------------------------------------------------------------------------------------------------
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Mohammad Sonaiea
لكن انت لم تضع بالحسبان انه يمكن ان يعمل اثنين على النظام ويقومان بارسال ايميل بنفس الوقت
اقتباسلكن انت لم تضع بالحسبان انه يمكن ان يعمل اثنين على النظام ويقومان بارسال ايميل بنفس الوقت
وليكن ذلك اين المشكلة ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
طيب ممكن ان تضع لنا مخطط الـdatabase
-----------------------------------------------------------------------------------------------------------------------------
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Mohammad Sonaiea
اخي العزيز لنفرض ان ال ID وصل ال رقم 5
وكنت انا وانت نعمل على النظام واردنا ان نبعث ايميل وصدف اننا بعثنا الايميل بنفس الوقت بدون وجود اي فارق فاي عملية nsert سوف تتم التي قمت بها انا ام انت ام انه سيحدث Exception
لهذا اريد استخدام Lock
أخي الكريم
اقتباسبدون وجود اي فارق
هذه مستحيلة لنفرض ان ذلك حدث وبنفس الوقت وبنفس التكة <_<
انا عملت insert على جدول الemail و بجدول الـemail يوجد identity وليكن IDemail والايميل اخذ الرقم1 أي idemail=1
وانا كمستخدم لدي سجل لدى جدول اسمو user وفيه identity وليكن IDuser وكان الـid خاص فيني هو 2
وحتماً يوجد جدول ثالث وليكن email_user وفيه مفتاح مركب عبارة عن حقلين وهما IDemail=1و IDuser=2
اما انت ليكن لديكIDuser =3 وبالجدول الثالث email_user يصبح المفتاح المركب كتالي IDemail=1و IDuser=3
اين المشكلة؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!
تم تعديل هذه المشاركة بواسطة محمد سماقية في 29 يناير 2008 في 17:44
-----------------------------------------------------------------------------------------------------------------------------
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Mohammad Sonaiea
محمد سماقية كتب:أخي الكريمهذه مستحيلة لنفرض ان ذلك حدث وبنفس الوقت وبنفس التكة <_<
انا عملت insert على جدول الemail و بجدول الـemail يوجد identity وليكن IDemail والايميل اخذ الرقم1 أي idemail=1
وانا كمستخدم لدي سجل لدى جدول اسمو user وفيه identity وليكن IDuser وكان الـid خاص فيني هو 2
وحتماً يوجد جدول ثالث وليكن email_user وفيه مفتاح مركب عبارة عن حقلين وهما IDemail=1و IDuser=2
اما انت ليكن لديكIDuser =3 وبالجدول الثالث email_user يصبح المفتاح المركب كتالي IDemail=1و IDuser=3
اين المشكلة؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!
تكتكه ثم اصابه :)
مع انها من المستحيل أن يحص نفس الاثنان على نف رقم الـ id
قم باضافة ال record في الداتا بيسس ستحصل على رقم id ثم قم بجلبه عن طريق identity_scope سوف لن يحصل غيرك على هذا الرقم وقم بارسال الرساله على اساسه
انتبه لموضوع critical area من المستحيل الاضافه في نفس الوقت سوف يكون هناك priority او delay time وـحدهما سوف يحصل على التسجيل قبل الآخر
هذه الأمور محلوله من قبل مصممين النظام اما انت كونك مطبق لبرامج على النظام وف لن تحتاج للتفكير في هذه النقطه وأعلم انه من المستحيل ان ياخ اثنان نفسس الرقم او يسجلون في نفس الوقت
use this code
lock table TABLENAME in EXCLUSIVE MODE;