منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : خطأ في الكود عندما يعمل إثنين في الشبكة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

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



وعليكم السلام ورحمة الله وبركاته
لو تترجم رسالة الخطأ ...بارك الله فيك.
وجدت هده الصور في google  أضن أنها نفس الرسالة



لا يمكن فتح قاعدة البيانات قد لا تكون قاعدة بيانات يتعرف عليها التطبيق الخاص بك أو الملف تالف. "



تم وضع قاعدة البيانات بواسطة المستخدم << Admin >> on << اسم الجهاز >> في حالة تمنعه من الفتح أو الإغلاق
ممكن رابط الشرح التالي من ميكروسوفت يساعدك
https://support.office.com/en-us/article...da245a0446
جرب أن تخرج الاتصال Cn.Open واغلاقالاتصال Cn.Close خارج حلقة فور .... لأنة من غير المنطق ان يتم فتح الاتصال واغلاقة في كل لفة لحلقة فور ، ولو كان هناك 1000 سجل في قاعدة البيانات معناه سيتم فتح وغلق الاتصال 1000 مرة لذلك يقع الخطأ مع المستخدم الآخر
والله أعلم
معك حق أخي سامي
لطالما تسائلت هل غلق القاعدة و إعادة فتحها عدة مرات هل يسبب مشاكل
____________________________________________________________________________
قمت بإخراج الغلق و الفتح خارج حلقة الفور
و قمت بتجربت الكود 5 مرات و الحمد لله إختفى الخطأ الأول

هل بإخراجي لكود الغلق و الفتح خارج الفور   سأحصل على نفس النتائج أخي , لا يوجد فرق ؟
____________________________________________________________________________

عند تجاوز مكان الخطأ القديم 
يضهر لي الخطأ التاني هنا   عند جميع المستخدمين
هل هذا بسبب إستخدامي للإتصال الغير المباشر ؟؟
هل يجب التخلي عن DataTable



شكرا كثيرا أخي سامي
(04-08-19, 03:49 AM)sniperjawadino كتب : [ -> ]هل بإخراجي لكود الغلق و الفتح خارج الفور   سأحصل على نفس النتائج أخي , لا يوجد فرق ؟

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

سأتبع نصيحتك و سأستخدم الوضع المتصل OleDbCommand لعلي أجده أسرع و بدون مشاكل تضارب الباينات في الشبكة
شكرا شكرا شكرا
ممكن هكذا بالوضع المنفصل
PHP كود :
Dim dt_Ticket As New DataTableLabel_N_CAISSE.Text= (-Val(TextBox4.Text))
Using da_Ticket As New OleDbDataAdapter("UPDATE [TABLE_" "] SET [Dates]=@dates,[Heure]=@heure"cn)
 
   da_Ticket.SelectCommand.Parameters.AddWithValue("@dates"Now.AddHours(m).ToString("dd/MM/yyyy"))
 
   da_Ticket.SelectCommand.Parameters.AddWithValue("@heure"Now.AddHours(m).ToString("HH:mm:ss"))
 
   da_Ticket.Fill(dt_Ticket)
 
   Dim savedt_Ticket As New OleDbCommandBuilder(da_Ticket)
 
   da_Ticket.Update(dt_Ticket)
End Using 

ممكن هكذا بالوضع المتصل
PHP كود :
Dim n Label_N_CAISSE.Text= (-Val(TextBox4.Text))
If 
cn.State <> ConnectionState.Open Then cn.Open()
Using cmd_Ticket As New OleDbCommand("UPDATE [TABLE_" "] SET [Dates]=@dates,[Heure]=@heure"cn)
 
   cmd_Ticket.Parameters.AddWithValue("@dates"Now.AddHours(m).ToString("dd/MM/yyyy"))
 
   cmd_Ticket.Parameters.AddWithValue("@heure"Now.AddHours(m).ToString("HH:mm:ss"))
 
   cmd_Ticket.ExecuteNonQuery()
End Using
cn
.Close() 
شكرا لك أخي Beginer
أعتذر منك لتعبك في إعادة كتابة الكود
جزاك الله على وقتك

سأستخدم الوضع المتصل لعله يكون أسرع و أفضل بدون أخطاء
شكرا كثييرا

فقط هذا الخطأ لا يزال يضهر عند دخول أكثر من مستخدم

 
 
تم وضع قاعدة البيانات بواسطة المستخدم << Admin >> on << اسم الجهاز >> في حالة تمنعه من الفتح أو الإغلاق



حتى بعد إتباعي لشرح الأخ الجوكر
 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الصفحات : 1 2