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

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

بدأه realdie10 في 23 أغسطس 2008 · 3 رد · 776 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

1-- اخواني انا لدي مشكلة وهي عندي برنامج محاسبي مصمم بفيجوال بسيك6 وقاعدة البيانات sql server 2005 وموضوع في شبكة ويوجد مستخدمين

المشلكة لما يقوم مستخدم (أ) بعمل اضافة سند قبض مثلا (يوجد كود ينفذ عند النقر على زر اضافة وهو cnn1.BeginTrans حبيت اذكره يمكن تكون منه المشكلة) و يقوم بكتابة بيانات السند أثناء ذلك لو قام مستخدم اخر بعرض تقرير كشف حساب مثلا يحصل بطىء في بعض الاحيان وفي احيان اخرى لا يفتح التقرير إلا بعد قيام المستخدم (أ) بحفظ السند أو إلغاءه

هل يوجد اعدادات في الاتصال مع العلم ان عامل dataenvironment يحتوي على كل الجداول يعني عندي اتصال connection1 فقط هل توجد اعدادات خاصة يفضل ان اعملها

2 ----رقم السند في حال مستخدم (أ)قام بإدخال سند قبض وقام مستخدم (ب) كذلك بإدخال سند قبض في هذه الحالة (أ) مثلا سيكون له رقم سند 5 والاخر 6 لكن اذا تراجع احدهما عن العملية أو قام ( ب) بالحفظ قبل (أ) فيجب إعادة التأكد من الرقم التسلسلي لسند لذا عملت دالة تعطي رقم السند التسلسلي وفي شفرة البرنامج قبل عملية الحفظ يقوم بتنفيذ استعلام عن طريق تلك الدالة لارجاع الرقم ولكن هل هذه الطريقة صحيحة،وهل توجد طريقة اخرى افضل عن طريقtriggers بحيث تلقائيا يعطي أكبر رقم سند موجود في الجدول وكيف اقوم بأرجاع الرقم الى البرنامج لغرض الطباعة في سند

لذا ارجوا منكم المساعدة واعطائي افضل اسلوب والحل الصحيح

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

وما من كاتب إلا سيفنى *** ويبقى الدهر ماكتبت يــداه

فلا تكتب بكفك غير شيء *** يسرك في القيامة ان تراه

لا تنسى تشجيعي بالنقر على

add.png اذا كانت مشاركتي مفيدة
#2

السلام عليكم

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

cnn1.BeginTrans

rs.update

cnn1.CommitTrans

وايضا لا تظهر رسالة الخطأ وهو مفتوح مثل

msgbox err.description

cnn1.rollback

وانما استخدم اولا cnn1.rollback وبعد ذلك رسالة الخطأ

ايضا عند فتح Rs أستخدم adlockoptimestic

فاذا اتبعت هذه الامور فان وقت قفل الجدول يصبح قليلا جدا وقد لايتجاوز اجزاء من الثانية .

بالنسبة للسؤال الثاني

المفروض ان يتم اصدار رقم السند عند التخزين مباشرةً وليس قبل ذلك وان لايظهر رقم السند الا بعد التخزين

#3

شكرا يا اخي على المعلومات القيمة وإن شاء الله راح استخدمها

بس بالنسبة لسؤال الثاني لوكان رقم السند يصدر بعد الحفظ تخيل ان اكثر من مستخدم قاموا بعملية الحفظ في نفس الوقت بأي طريقة المفروض يعطى الرقم

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

2 او مباشرة استعلام select max(no) من الجدول

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

وعفوا اذا اثقلت عليكم

وما من كاتب إلا سيفنى *** ويبقى الدهر ماكتبت يــداه

فلا تكتب بكفك غير شيء *** يسرك في القيامة ان تراه

لا تنسى تشجيعي بالنقر على

add.png اذا كانت مشاركتي مفيدة
#4

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

select max(...) +1 from xx

وللعلم هذا الموضوع بشكل عام من المواضيع المتقدمة وهذه الاقتراحات هي رؤوس أقلام للعمل بالتالي عليك مراجعة المقالات والكتب التي تخص هذا الموضوع

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

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

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

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

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