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

استفسار عن كيفية التحكم فى تزامن البيانات

مغلق
بدأه wondery1980 في 5 يونيو 2006 · 20 رد · 1,475 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اول مشاركة اي او على الاغلب اول سؤال اطرحه في المنتدى و الذي يتعلق بVB.NET 2005 و SQL SERVER 2005 و هو كالتالي:

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

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

المعلومات التي تحصلت عليها من صديق هو كتابة كود باستخدام الخاصية RAN لاختيار وقت ضئيل من الزمن قد يكون واحد من الالف في الثانية وعليه يكون الفاصل الزمني بين كل مستخدم و اخر حتى لا تتزامن العمليات (الادخال,التعديل...الخ) في نفس الوقت.

ارجوا من السادة المبرمجين شاكرين الرد على سؤالي .......

مع تحيات Wondery

#3

استخدام timestamp افضل حل

وهو انه عند قراءتك لقيمة سجل معين تقرا تاريخ اخر تعديل عليها

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

ام لو اختلف فلك الخيار اما التعديل او تنبيه المستخدم

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

وهذا في اي سلعة كانت يحصل

ولكن اسئل انا الخبراء في هذا المجال كيف يمكن اخفاء الحق هذا او تنبيه المستخدم ان هذا الحقل قابل تم استدعاءه من قبل عميل اخر وقد يتم التعديل عليه

لكي ينتبه ان هناك بائع اخر يعرض نفس السلعة

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#4

و

اقتباس
لكن اسئل انا الخبراء في هذا المجال كيف يمكن اخفاء الحق هذا او تنبيه المستخدم ان هذا الحقل قابل تم استدعاءه من قبل عميل اخر وقد يتم التعديل عليه

لكي ينتبه ان هناك بائع اخر يعرض نفس السلعة

بامكانك تطبيق اسلوب Pessimistic Locking

وبامكانك تطبيق هذا الاسلوب بالطريقة التى تريدها

مثلا

تضيف حقلين على اضافيين

IsLocked bit,

LockedBy Nvarchar (50) null

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

والحقل الثانى نضع به اسم المستخدم الذى يتعامل مع هذا الصف

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

LockedBy=null

ارجو ان تكون قد اتضحت الفكرة

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#5

انا افتكر هذه المفاتيح في ado ولكن لا اعرف كيف تستخدم في .net

هل ممكن مثال نصي

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#6

ماذا تقصد بالمفاتيح؟؟!!

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

يعني الاقفال

locks

اللي انت تتكلم عنها

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#8

الاخ SOLO.NET لا يتكلم عن مفتاح بل يتكلم عن انشاء حقل باسم IsLocked وحسب قيمة هذا الحقل يعرف اذا ما كان هناك مستخدم يستخدم هذه الحقول ام لا

يعني على سبيل المثال اذا كانت قيمة الحقل 1 بتكون الحقول مستخدمة من قبل شخص اخر واذا كانت 0 تكون غير مستخدمة

تم تعديل هذه المشاركة بواسطة NO BODY CAN BEAT ME في 5 يونيو 2006 في 21:54

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

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

ranneh.com

#9
اقتباس
الاخ SOLO.NET لا يتكلم عن مفتاح بل يتكلم عن انشاء حقل باسم IsLocked وحسب قيمة هذا الحقل يعرف اذا ما كان هناك مستخدم يستخدم هذه الحقول ام لا

يعني على سبيل المثال اذا كانت قيمة الحقل 1 بتكون الحقول مستخدمة من قبل شخص اخر واذا كانت 0 تكون غير مستخدمة

تماما هذا ما قصدته بارك الله فى اخ وليد للتوضيح

ADO.NET لاتدعم Pessimistic Locking ولذا عليك تطبيق الفكرة باى خوارزم تجده مناسب

هذا الاسلوب ايضا تجده مدعم من قبل قواعد بيانات مثل SQL SERVER يمكنك تطبيقه فيها

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#10

اشكر الاخوة المشرفين و الاعضاء على الرد السريع على سؤالي ,احاول اختبار اجابة الاخ مشرف ال VB.NET لانها نوعا ما تخرج عن الاجابة الDefault .

#11

بس يا شباب انا كاني سمعت عن حاجة اسمها Pooling - بس ما ني متأكد انه لها علاقة بالموضوع والا لا

#12

تقصد اني استخدم طريقة الاغلاق برمجيا

طيب يا اخي الكريم افرض انا استخدم transaction

ولو مااستخدمت transaction

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

اعتقد الطريقة هذه مغامرة !!

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#13
اقتباس
فرض ان البرنامج صار فيه مشكلة او تم اغلاقه فجأة فهذا يعني انه لن يمكن القرأة من هذا السجل بتاتا

اعتقد الطريقة هذه مغامرة !!

سؤال منطقى ولا يوجد اى مغامرة طالما انك من تقوم بتنفيذ هذه الطريقة باسلوبك

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

انشئ اجراء مخزن يقوم بهذه العملية ويتم تنفيذه بصورة اليه بواسطة SQL SERVER AGENT

او يتم اعطاء احدهم صلاحية تحرير القفل على الصفوف كمدير النظام مثلا

حلول اخرى يمكنك ابتكارها بنفسك :)

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#14

الحلول دائم موجودة اكيد

ولكن مقابل برمجة اكثر

والله موفق

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#15

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

اقتباس
بامكانك تطبيق اسلوب Pessimistic Locking

وبامكانك تطبيق هذا الاسلوب بالطريقة التى تريدها

مثلا

تضيف حقلين على اضافيين

IsLocked bit,

LockedBy Nvarchar (50) null

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

والحقل الثانى نضع به اسم المستخدم الذى يتعامل مع هذا الصف

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

LockedBy=null

ارجو ان تكون قد اتضحت الفكرة

الاخ SOLO.NET

هذا الاسلوب رائع جدا ولكن هل لك ان تحل مشكلتي هذه

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

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

اتمني ان اكون اوصلت الفكرة وان اكون في نفس اطار الموضوع المطروح

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

تم تعديل هذه المشاركة بواسطة عبدالجليل العقوري في 8 يونيو 2006 في 00:22

"نحن لا نستسلم... ننتصر أو نموت.... وهذه ليست النهاية... بل سيكون عليكم أن تحاربوا الجيل القادم والاجيال التي تليه... اما أنا... فإن عمري سيكون أطول من عمر شانقي."

عمر المختار

اللهم انعم على بلادي بالأمن والأمان

#16

اخى عبدالجليل

فى مقال سابق ذكرت ان

اقتباس
اسلوب Pessimistic Concurrency Control. بموجب هذا الاسلوب لا يكون الصف متاحا لباقى المستخدمين بعد استخراجه من قاعدة البيانات الى ان يتم تحديثه فيها بواسطة نفس المستخدم
.

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

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#17

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

يا شباب .... الموضوع أبسط بكثير من كل هذا التعب :blink:

استخدم ال SQL Server Transactions و أظن أنك ستجد ان شاء الله أن جميع المشاكل تم حلها

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

#18
اقتباس
يا شباب .... الموضوع أبسط بكثير من كل هذا التعب :blink:

استخدم ال SQL Server Transactions و أظن أنك ستجد ان شاء الله أن جميع المشاكل تم حلها

ياخى الــTransactions يستخدم لتطبيق ما يسمى بالعملية الواحدة مثلا للدائن والمدين كنقل حساب من حساب

ما نتحدث عنه موضوع اخر

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#19

الاخ SOLO.NET

اقتباس
اسلوب Pessimistic Concurrency Control. بموجب هذا الاسلوب لا يكون الصف متاحا لباقى المستخدمين بعد استخراجه من قاعدة البيانات الى ان يتم تحديثه فيها بواسطة نفس المستخدم

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

هل تظهر رساله توضيح للمستخدم الاخر ان السجل الذي يريد الصرف منه غير متاح اى انه مشغول من مستخدم اخر في مثل حالتي هذه

#20

الاخ SOLO.NET

اقتباس
اسلوب Pessimistic Concurrency Control. بموجب هذا الاسلوب لا يكون الصف متاحا لباقى المستخدمين بعد استخراجه من قاعدة البيانات الى ان يتم تحديثه فيها بواسطة نفس المستخدم

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

هل تظهر رساله توضيح للمستخدم الاخر ان السجل الذي يريد الصرف منه غير متاح اى انه مشغول من مستخدم اخر في مثل حالتي هذه

"نحن لا نستسلم... ننتصر أو نموت.... وهذه ليست النهاية... بل سيكون عليكم أن تحاربوا الجيل القادم والاجيال التي تليه... اما أنا... فإن عمري سيكون أطول من عمر شانقي."

عمر المختار

اللهم انعم على بلادي بالأمن والأمان

#21
اقتباس
هل تظهر رساله توضيح للمستخدم الاخر ان السجل الذي يريد الصرف منه غير متاح اى انه مشغول من مستخدم اخر في مثل حالتي هذه

افعل ما يحلو لك،، اظهار رسالة او الغاء تنشيط ازرار التحديث+الادوات كل هذه الامور تعود اليك برمجيا طبقها باسلوبك :)

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

هذا الموضوع مغلق.

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

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

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

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

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