21-04-23, 06:22 AM
(20-04-23, 05:32 AM)ابو محمد محمد محمد كتب : شكرا اعرف هذا الحل ولكن هناك حل من صميم تصميم قاعدة البيانات
له علاقة بالعملية Transaction لو احد يعرف ومر به الموضوع
الـ Transaction ليس لها علاقة لا من قريب ولا من بعيد بمنع مستخدم من إجراء تعديل أو الوصول إلى سجل معين.
هذف الـ Transaction هو تحقيق مبداء تكامل البيانات, إما أن تنجح كامل العملية أو تفشل كامل العملية، سواء عملية تحديث أو حذف أو إدخال أو عمليات مختلطة ومتعددة بين هذا وذاك.
أما الكل أو فلا.
يوجد نوع بيانات لحقل وهو Timestamp
هناك آليه تمنع التظارب بين المستخدمين بواسطة التحقق من الحقل من نوع ( Timestamp )
لا يهم اسم الحقل المهم انه موجود ضمن حقول الجدول
مثال :
محمد فتح النافذة وبداء يغير في البيانات على الشاشة ولكن لم يضغط على زر الحفظ بعد، إنشغل أو ذهب إلى مكان.
مصطفى في نفس اللحظة فتح نفس السجل وعدل على البيانات وقام بالحفظ مباشرتاً.
محمد عاد بعد 10 دقائق، ثم ضغط على زر الحفظ، ستظهر له رسالة تخبرة بأن البيانات التي تحاول التعديل عليها قد تغيرت، ويجب عليك تحميلها من جديد إذا كنت ترغب في تعديلها.
نوع الخطاء هو : Concurrency violation
بمعنى ( انتهاك التزامن )
المفترض من المبرمج أن يتحقق عند تطبيق جملة ( التحديث أو جملة الحذف ) فقط ( UPDATE و DELETE ) غيرها لا يهم
الــ ( UPDATE و DELETE ) هم فقط الذين من الممكن أن ينتهكو التزامن.
كيف يتحقق المبرمج : ( بهذة الطريقة عند تنفيذ الجملة )
الـ Original_itm_Timestamp هو متغير يأخذ قيمة الحقل itm_Timestamp الأصلية عند أول عملية جلب لهذا السجل
وعندما تريد تنفيذ عملية حفظ أو حذف طبق الجملة في الأعلى للتأكد من أن السجل لم يقم أحد بتغيير منذ آخر لحضة قمت بجلب السجل
الحقل من نوع Timestamp للعلم
قاعدة البيانات هي من تعدل قيمة هذا الحقل في كل مرة يحدث تغيير في أي حقل من حقول السجل
الـ Timestamp هو عبارة عن تاريخ ووقت ولكن بصيغة Binary وهو مضمون انه لن يتكرر أبداً في نفس الجدول.
إذا كنت تبحث عن آليه لقفل السجل فيجب عليك تطبيق فكرت أخي Taha Okla ولكن بأسلوب مختلف :
لم أجربها من قبل ولكن هذة الفكرة أجدها ممتازة ، وهي :
عند فتح نافذة التعديل على سجل، هذة النافذة ترسل مثلاً كل 30 ثانية أمر تحديث في جدول مختلف بأن هذا السجل تحت التعديل من ( تضع تاريخ ووقت لعملية قفل السجل ) والنافذة يجب أن ترسل كل 30 ثانية ( تاريخ جديد - ينتهي بعد 5 دقائق مثلاً ) أنها مازالت في وض التعديل.
لو فرضاً حدث خلل في البرنامج الشخص الذي يقوم بالتعديل - أو فقد الإتصال وقام بإطفاء الجهاز ، بهذا الشكل لن يبقى السجل في وضع القفل.
لأنك عنما تريد تعديل سجل وتريد قفلة ستتأكد من آخر تاريخ ووقت تم قفل السجل فيه ، إذا كان أكبر من دقيقة واحدة يعني أنه لا توجد هناك نافذة ترسل أمر إبقاء السجل في وضع القفل.
أرجوا أن تكون الفكرة وصلت، والأفكار كثير.
كل عام وأنتم بخير...
