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

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

مغلق
بدأه عاشقة دلفى في 7 فبراير 2008 · 10 رد · 3,114 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الى اعضاء هذا المنتدى الرائع اطلب منكم مساعدتى في مشكلتى هذه

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

ولكم فائق احتلاامى و تقديرى

#2

السلام عليكم

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

لكن ربما اضفت حقل منطقي BOOL يحمل القيمة true ان كان الحقل في قيد الاستعمال ويرجع false بعد الانتهاء وهكدا قبل الدخول الى السجل ان كان true

رسالة تنبيه بانه قيد الاستعمال

والله اعلم

#3

السلام عليكم

ارجوا منك يأخ زكيرى توضيح ما قلت بمثال

#4

السلام عليكم

لاتوجد طريقة غير التي ذكرها لك الأخ زكيري وإن كان هذا الحل قاصرا بعض الشئ

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

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

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

ولماذا هذا الحل قاصرا .. ؟

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

طيب وماهو الحل الأفضل ؟؟...................... والله علمي علمك :resentful:

والله أعلم

#5

السلام عليكم

من سؤالك أفهم أنك تريد قفل Record معين ومنع مستخدم أخر التعامل معه في نفس الوقت هذا يتم برمجياً وتختلف الفكرة من مبرمج إلى أخر وقد تكون فكرتي لحل هذه المسئلة غير مرضية ولكنها فعالة ولكن لا ضير من المحاولة .

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

ثانية تضع لهذا الحقل قيمة أفتراضية ولتكن معروفة لديك مثلاً رقم صفر

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

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

أما إذا كانت القيمة 1 فهذا يعني أن السجل مستخدم من قبل مستخدم أخر وتظهر رسالة تفيد ذلك.

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

B)

من جد وجد ومن زرع حصد

#6

سهله جدا و لا تحتاج او تعتمد على طريقه المبرمج او اضافه حقل في الداتا بيس من اجل اغلاق السجل اثنا التعديل ....

ال ADODataSet يوفر LockType ...استخدم ltPessimistic بحيث تقدر تمنع التعديل في السجل اثناء فتحه او تعديله من قبل شخص اخر في نفس الوقت .

بعض الحكي يحق له يجرح الصمت..والبعض الآخر ما يبرر ظهوري

#7

السلام عليكم

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

#8

السلام عليكم

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

lock type

لكى اعرف ماذا اريد منها بالتحديد

#9

السلام عليكم ...

اخ زكيري كيف تشك في ذلك :rolleyes: ...بالطبع ال dataset في مستوى اعلى من قاعده البيانات و التعديل في قاعده البيانات على مستوى الداتا ست . . يجب عليك الرجوع و قراءة ال CursorType و انواعها و ايضا ال CursorLocation .

الاخت عاشقه الدلفي هذا مثال توضيحي

var
myDataSet:TADODataSet;
begin
myDataSet := TADODataSet.Create (self);
myDataSet.Connection := myADOConnection;
myDataSet.CursorType := ctDynamic;
myDataSet.LockType := ltPessimistic;

و لفهم و معرفه الميزد عن الخاصيه اقري هذا المقال

http://delphi.about.com/od/database/l/aa061201b.htm

تحياتي .

بعض الحكي يحق له يجرح الصمت..والبعض الآخر ما يبرر ظهوري

#10

بارك الله فيك على التوضيح :clapping:

لكن لم تدخل الفكرة الى راسي لان قارنتها القاعدة مع sqlsrver لكن قلت اشك فقط وكلنا نطلب العلم

شكرا مرة اخرى على الرابطة التي استعمالها انا ايضا في دروس الدلفي نت .

#11

سبحان الله نظل نتعلم حتى نموت

خاصية مثل هذه (سهلة جدا كما تقول) أمام أعيننا لسنوات (وأيضا زملائي في الشركة القديمة) وكنا في أمس الحاجة اليها في بعض الأوقات (في عام 2000 دلفي 6 تقريبا وكنت مبتدأ) ولم انتبه لها او أعلم فائدتها الا اليوم :lol: .... وبعدما تقريبا توقفت عن البرمجة إلا فيما ندر.

فشكرا لك على الرابط الجميل أخي خالد.

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

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

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

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

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

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