اذهب الي المحتوي
أوفيسنا

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


الحلبي
إذهب إلى أفضل إجابة Solved by Foksh,

الردود الموصى بها

السلام عليكم

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

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

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

اريد الفكرة فقط وانا اطبق 

جزاكم الله خير

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

رابط هذا التعليق
شارك

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

من وجهة نظري قد يكون هناك أكثر من فكرة ! ولكن رأيت أفضلها ما يلي :-

  •  دالة تقوم بالبحث عن آخر رقم فاتورة ( مثل Dmax أو أكواد الـ VBA ) تعمل فقط بإنشاء رقم الفاتورة عند الضغط على زر الحفظ فقط !! وليس عند تحميل النموذج أو أي حدث آخر .

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

 

✔  وللتجربة جرب انشاء فاتورة على جهازين مختلفين على الشبكة لديك ، وبنفس اللحظة 🕕 قم بالنقر على الزرين حفظ أو دفع للفاتورة ( بنفس الوقت ) ولاحظ ارقام الفاتورة بين السجلين 

 

رابط هذا التعليق
شارك

طيب فى حلين 

اولا الحل البسيط عمل دالة للحفظ 
وتتم مباشرة بعد توليد رقم الفاتورة 

 

Private Sub DoSave()
    On Error GoTo ErrorHandler
    
    ' Check if there are unsaved changes
    If Me.Dirty Then
        ' Save the current record
        DoCmd.RunCommand acCmdSaveRecord
    End If
    
    ' Exit the sub normally
    Exit Sub

ErrorHandler:
    ' Handle the error and display a message with the error number and description
    MsgBox "Error occurred while saving the record: " & Err.Number & " - " & Err.Description, vbCritical, "Error"
    
    ' Resume to the end of the sub after handling the error
    Resume ExitHandler

ExitHandler:
    ' End of the sub
    Exit Sub
End Sub


الحل الثانى مشاركة لاستاذى الجليل و معلمى القدير و و الدى الحبيب الستاذ @jjafferr 

اليك الموضوع كاملا
 

 

رابط هذا التعليق
شارك

3 ساعات مضت, Foksh said:

ولاحظ ارقام الفاتورة بين السجلين 

استاذى ومعلمى /فؤش

بارك الله فيك الكود مشى تمام وفعلا كل الجهازين يأخد رقم مغاير للجهاز الاول

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

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

ولا ادرى ما السبب ووضعت كود الحفظ بعد اراج رقم الفاتورة ومازل باقى البيانات وقف اى تحديث لها

 

2 ساعات مضت, ابو جودي said:

وتتم مباشرة بعد توليد رقم الفاتورة 

معلمى واستاذى الفاضل / ابو جودى

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

رابط هذا التعليق
شارك

14 دقائق مضت, الحلبي said:

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

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

لان وظيفة الدالة حفظ السجل الحالى

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

 

رابط هذا التعليق
شارك

2 ساعات مضت, ابو جودي said:

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

 

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

وحتى لو ارفقت مثال هيكون ناقص كثير عن الاصلى

رابط هذا التعليق
شارك

  • أفضل إجابة
20 ساعات مضت, الحلبي said:

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

 

لا اعلم ما هي تسلسل الأحداث في مشروعك ، ولكن هذه الطريقة التي اعتمدها من زمااان ولم أواجه بها أي مشكلة ؛ كما وجدت أنها تغنيني عن أكواد أو دوال كثيرة قد لا يكون لها ضرورة 

رابط هذا التعليق
شارك

صعب ان نجد حل شافي نهائي لعدة أسباب :

1- الارتباط بالجدول كنموذج منضم .. هذا يحدث تزاحم

وتتم معالجته بجعل النموذج حر غير منضم والحاق البيانات عبر مجموعة السجلات

2- عملية الذهاب للجدول لإرجاع أكبر رقم موجود في الحقل ثم اضافة (1) اليه .. هذه العملية منطقيا بحاجة الى وقت ( حتى لو كان 1 من 100 من الثانية فهو وقت )

وتتم معالجته حسب رأيي بأحد طريقين :

الاول : اعتماد الترقيم التلقائي للجدول كرقم للفاتورة

الثاني : دمج الترقيم التلقائي الى حقل نصي موجود والذي يمثل رقم الفاتورة .. ( وهنا لسنا بحاجة لتوليد ارقام )

 

 

 

رابط هذا التعليق
شارك

8 ساعات مضت, Foksh said:

لا اعلم ما هي تسلسل الأحداث في مشروعك ، ولكن هذه الطريقة التي اعتمدها من زمااان ولم أواجه بها أي مشكلة ؛ كما وجدت أنها تغنيني عن أكواد أو دوال كثيرة قد لا يكون لها ضرورة 

استاذى الفاضل / فؤش 

ابشرك لقد نجحت معى طريقتك بنسبة 100% وفعلا بتعديل بسيط جدا على كود توليد ارقام الفواتير تمت العملية ولم تنهج باقى البيانات بل بالعكس كلا تدخل البيانات فيه دون اى تهنيج او توقف ـ وكلام معلمنا الجليل ابو خليل فى المداخلة الاخيرة له صحيح 100% ولكن انا رعيت هذه الملاحظة فى عمل الكود 

فكرة الاستاذ الفاضل فؤش صحيحة وجميلة فعلا وفى منتهى الذكاء 

واحب اضيف لكل اخوانى فى الدخول فيما بعد ان يتنبه الى انى قمت بتغيير زمن التسجيل فى  options  ثم  client settings ثم open databases by using record وجعلت refresh interval (sec) قمت بالتقليل من 60 الى 5 ثوان فقط  فكانت النتيجة مرضية جدا جدا جدا ولم يهنج لان المعلومات تنتقل خلاص 5 ثوانى فقط ـ يعنى المتستخدم الاول على مايكتب اسم الصنف يكون رقم الفاتورة قد كتب وعند المستخدم الثانى يكتب اسم الصنف ياخد رقم فاتورة بعده ـ حاجة فى منتهى الجمال 

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

ولا يحرمنا من اجابات ونصائح استاذن الجليل / @ابوخليل واستاذنا العبقرى المهندس / @ابو جودي واستاذنا الفاضل / فؤش

جزاكم الله خير على ما تقدموه وتفعلوه معنا لاجل المصلحة

 

تم تعديل بواسطه الحلبي
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information