تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] رسالة خطأ عند الحذف أو تعديل بيانات جديدة #concurrency violation#
#1
لطالما أرقني هذا المشكل
و أرهق الكثير من الإخوة في المنتدى

-------------------------------------------------------------------------------------------------
رسالة خطأ عند الحذف أو تعديل بيانات جديدة

-------------------------------------------------------------------------------------------------





تعددت الأسباب لكن الحل لم أجده في أي موضوع

اليوم و بعد بحث طويل و التدقيق و التجربة . إقتربت من معرفة المشكل حتى نجد الحل
إكتشفت أن سبب المشكل هو المفتاح الرئيسي في قاعدة البيانات
بحيث عند جعله "AutoNumber" يحدث المشكل

ما رأيكم و ما هو العلاج ؟
الرد
تم الشكر بواسطة:
#2
الغ خاصية الترقيم التلقائي و ضع هذا الكود :

PHP كود :
Dim T As LongAs Long
        For T 
0 To DT1.Rows.Count 1
            n 
+= 1
            If CInt
(DT1(T)("AutoNumbering")) <> n Then
                txtn
.Text n
                Exit Sub
            End 
If
 
       Next
        txtn
.Text 
الرد
#3
ضع الكود المستخدم
لتوضح الطريقة التى تستخدمها فى التعديل والحذف

حتى اوضح لماذا تحدث هذه المشكلة تماماً
لان عملية AutoNumber ما هى الا ترقيم تلقائي 
وليس له اى مشكلة او دخل فى الامر

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

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: sniperjawadino , حريف برمجة , asemshahen5
#4
لو أن عندي عامود ترقيم تلقائي و حذفت منه السجلات التالية 2-4-6 عند إضافة سجل جديد للعامود يعطينى 7 مثلا هل هناك طريقة أجبره على أخذ الرقم 2 أو 4 أو 6
إذا كان هناك أرجو كتابتها .
الرد
تم الشكر بواسطة: حريف برمجة
#5
(11-05-19, 05:40 PM)asemshahen5 كتب : لو أن عندي عامود ترقيم تلقائي و حذفت منه السجلات التالية 2-4-6 عند إضافة سجل جديد للعامود يعطينى 7 مثلا هل هناك طريقة أجبره على أخذ الرقم 2 أو 4 أو 6
إذا كان هناك أرجو كتابتها .


لا يوجد طريقة مع الترقيم التلقائي

نعم يمكنك عمل كود تحقق وادخال القيمة يدوياً

ولكن سيتم تخزين هنا 7 فارغاً كما لو انه تم الاستخدام

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

الترقيم التلقائي يجب ان لا يستخدم ولا هو للعرض
الاستخدام الوحيد فقط فى التعديل والحذف فقط

وليس لعرض كا تسلسل فى الداتا جريد وما شبه

ولحل مشكلة هذا فى العرض مثل الداتا جريد
فقط كل ما عليك عمل كود For لتعديل لانشاء عمود 
او تغيير / عادة ترقيم العمود التسلسلى
لاعطاء ترقيم من 1 الى اخر رقم

وهو ارسال قيمة i+1 لقيمة العمود التسلسلي

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: asemshahen5 , حريف برمجة
#6
أخي asemshahen5
شكرا لك على المساعدة
لكن لا يمكن الغاء خاصية الترقيم التلقائي في البرامج التي تسجل معلومات كثيرة مثل المطعم
لأنه سيكون الأمر متعب للحاسوب 
أضن ذلك

أخي elgokr
شكرا لك على المتابعة مرة أخرى
سأضع لك مثال صغير هنا حتى ترى بعينيك عسى أن تكتشف لي الخطأ
وكما قلت أنت فبالبرنامج في الشبكة يستخدمه تلاث أشخاص
الرد
تم الشكر بواسطة: elgokr , حريف برمجة , حريف برمجة
#7
الشكر لله والحمد لله
والحمد لله على كل حال

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

واذا كان قاعدة البيانات من نوع Sql
فسيكون الامر فقط كما اشرت اليه مسبقاً 
وهو كود الفتح والاغلاق لقاعدة البيانات اثناء التنفيذ

على العموم انا فى انتظار المثال حتى افيدك بالاجابة تحل الامر مباشراً

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
#8
(13-05-19, 02:13 AM)elgokr كتب :
الشكر لله والحمد لله
والحمد لله على كل حال

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

واذا كان قاعدة البيانات من نوع Sql
فسيكون الامر فقط كما اشرت اليه مسبقاً 
وهو كود الفتح والاغلاق لقاعدة البيانات اثناء التنفيذ

على العموم انا فى انتظار المثال حتى افيدك بالاجابة تحل الامر مباشراً

تحياتى لك
وتمنياتى لك التوفيق


حقا أخي elgokr
الطريقة اللتي شرحت في الرابط هي اللتي إستعملت فشكرا لك على هذا

لقد وضعت مثال مصغر على العملية هنا

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

كود :
             dttt.Rows(0).Item("Qté") = dttt.Rows(0).Item("Qté") - DataGridView1.Rows(i).Cells("Qté").Value

               Dim save As New OleDbCommandBuilder(daaa)
               daaa.Update(dttt)
               dttt.AcceptChanges()

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


-----------
أنا لا أستخدم فتح و غلق القاعدة في برامجي
فقط استعلامات

فهل هذا مضر
حتى إني لم أرى مثال لفتح و غلق القاعدة ولا أعرف ما الفائدة
-----------
بالنسبة للأعضاؤ الذين يستخدمون SQLSERVER أو MYSQL
لماذا لا يوجد لديهم هده المشاكل في الشبكة
يعني ما الفرقي الجوهري بينهم و بين ACCES  في التعديل و الحدف
----------

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


الملفات المرفقة
.zip   app.zip (الحجم : 93.21 ك ب / التحميلات : 8)
الرد
تم الشكر بواسطة:
#9
قبل ان اقوم بالاطلاع على المرفق
تعال نتحدث قليلاً لما هو لديك فى الكود من مشكلة

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

ولكن المشكلة تقع فى قيمة الكمية فتعال نتخيلها ان الكمية 100
عند عمل الاستعلام عند المستخدم الاول
فاتا الشخص الثاني قام بفتح نفس الشاشة واصبح الكمية لديه 100 ايضاً

طيب تعال نقول ان المستخدم الثاني قام بتحديث الكمية واصبح الكمية لديه بعد التحديث 90
السؤال هنا واللى هو نقطة مهمة جداً جداً جداً تعتقد ان الكمية خاصة الـ 90 من المستخدم الثاني
سمعت عن المستخدم الاول اللى كانت عنده 100 حتى فتح الشاشة

كا قاعدة بيانات ايوة سمعت ولكن على الشاشة
وفى قيمة dttt لا وهى 100 حتى هذه اللحظة

ايه ده يعنى لو المستخدم الاول عمل تحديث الان على الكمية لينقص 20
بدل ما تكون القيمة 70 هتصبح 80

بكل تاكيد لان عند عملية التحديث تتم من خلال DataTable وليس من خلال كود
كالاستعلام لتحديث بقاعدة البيانات

طيب الحل هنا ايه

الحل هو بدلاً من استخدام هذا الجزؤ كما توقعت وشرحت بالاعلى بعد فتح المرفق
كود :
           daaa = New OleDbDataAdapter("select * from TABLE_STOCK_FINAL WHERE Code = '" & dt1.Rows(i).Item("Code") & "'     ", cn)
           daaa.Fill(dttt)

ان تجعله كود 
PHP كود :
update query 

يتم الامر ازاي بناءاً على المرفق
انظر داخل حلقة For فى كود زر الحفظ 

وقم بمسح الكود التالى
كود :
           Dim dttt As New DataTable
           Dim daaa As New OleDbDataAdapter
           dttt.Clear()

           daaa = New OleDbDataAdapter("select * from TABLE_STOCK_FINAL WHERE Code = '" & dt1.Rows(i).Item("Code") & "'     ", cn)
           daaa.Fill(dttt)


           If dttt.Rows.Count <> 0 Then

               dttt.Rows(0).Item("Qté") = dttt.Rows(0).Item("Qté") - DataGridView1.Rows(i).Cells("Qté").Value

               Dim save As New OleDbCommandBuilder(daaa)
               daaa.Update(dttt)
               dttt.AcceptChanges()

           End If

واستبدله بهذا الكود ليكون بدل ما تم مسحه
كود :
           ' Start Update To Database
           If Not cn.State = ConnectionState.Open Then
               cn.Open()
           End If
           Dim sqlins As String = "UPDATE TABLE_STOCK_FINAL SET Qté = Qté - " & DataGridView1.Rows(i).Cells("Qté").Value & " WHERE Code = '" & DataGridView1.Rows(i).Cells("Code").Value & "'"
           Using cmd As New OleDbCommand(sqlins, cn)
               cmd.ExecuteNonQuery()
           End Using
           cn.Close()
           ' End Add To Database

وبكدة سيتم حل المشكلة تماماً بامر الله
وسيصبح قاعدة بيانات Access كما لو انها Sql فى التعامل  Big Grin

الان للنقطة الاخيرة
إقتباس :بالنسبة للأعضاؤ الذين يستخدمون SQLSERVER أو MYSQL
لماذا لا يوجد لديهم هده المشاكل في الشبكة
يعني ما الفرقي الجوهري بينهم و بين ACCES  في التعديل و الحدف

طبعاً يوجد فارق كبير جداً بين Access  و Sql
قاعدة بيانات Access
هى للعوامل الفردية الصغيرة ولهذا لم تخصص للتعامل عبر الشبكات 
والطريقة لجعلها كذلك هو فى الموضوع لشرحى كيف التعامل مع Access خلال الشبكة
بينما Sql من اى نوع فهو للتعامل مع الاحجام المتوسطة ولاكثر من 5 افراد فاكثر
طبعاً يوجد قواعد بيانات اضخم ولا نحتاج للنقاش عنها هنا

يمكنك الان اختبارا الكود
وابشر بان اصبح الامر معك افضل من الاول
وان تكون الصورة وضحت لديك كاملاً

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

فسامحنى على ذلك

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: sniperjawadino , sniperjawadino , sendbad100
#10
مهما كتبت و شكرت فلن يصلك شكري وامتناني الكلي لك على شرحك ووقتك الذي تمنحه لنا لمساعداتنا

شكرا كثيييرا
جزاك الله على تعبك


_______________________________________________

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

لخصت أسئلتي في هذه النقط لأني حسيت أني تقلت عليك فاعذرني أخي فأنا متلهف لأفهم أخطائي
في الحقيقة ليست أسئلة فقط أريد أن تأكد لي أن تفكيري صحيح



1/ فهمت جيدا المثال الذي شرحت لي
لكن في هذا المثال هل يمكن أن نقول أن هذا الخطأ في الحساب قد يقع في لحضة أقل من ثانية
يعني المدة بين جلب الاستعلام و حفض التعديل عن طريق DataTable 

يعني هل هذا هو مكان الخطأ

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

______________

2/ هل الكود الذي منحتني update query 
هل يمكنني أن أقول أن هذا هو الوضع المتصل ؟

وما كنت أقوم به هو الوضع المنفصل  ؟

و الوضع متصل لا يصلح في الشبكة ؟

______________

3/ بالنسبة ل 
If Not cn.State = ConnectionState.Open Then
هل فتح القاعدة قبل الاستعلام يلعب دور datatable التي كنت استعملها ؟
لأني لم أقم يوما بفتح القاعدة قبل الاستعلام
والكل كان شغال حتى باستعمال update query 
لكن باستخدام datatable طبعا

______________

4/ هل هناك ضرر للقاعدة بسبب كثرة الاسعلامات ؟
وبالتالي كثرة  فتح القاعدة و غلقها  القاعدلة
فتح...غلق..فتح...غلق...فتح...غلق..فتح...غلق

______________

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

وبين الطريقة التي قمت أنت بها في الموضوع
يعني تقسيم القاعدة ....

ما الفرق
أو ما  الإجابيات

______________
الرد
تم الشكر بواسطة: elgokr


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  منع التكرار في اضافة بيانات لقاعدة بيانات أكسس vb.net ahmedshafea 3 5,559 01-07-19, 12:28 PM
آخر رد: essamprog
  الربط بين جهازين لقاعدة بيانات واحده makky 11 286 23-06-19, 12:07 AM
آخر رد: حريف برمجة
Information [سؤال] انشاء قاعدة بيانات access واضافة جدول وحقول بكود vb.net fefooo29 4 3,482 10-06-19, 09:31 PM
آخر رد: sherf
  مساعدة في تصميم قاعدة بيانات ادارة ساعات عمل الموظفين Rabeea Qbaha 6 196 06-06-19, 12:23 AM
آخر رد: elgokr
  استدعاء بيانات من اكثر من جدول المتألق9 1 173 04-06-19, 10:29 PM
آخر رد: احمد نعمة السلامي
  [VB.NET] قاعدة بيانات postgress tarek 2 252 06-04-19, 09:07 PM
آخر رد: elgokr
  الاتصال بقاعدة بيانات mdf موجودة على القرص نور الهدى الهدى 10 620 18-03-19, 08:55 PM
آخر رد: 5000
  قاعدة بيانات بيانات ال sql مع الفجوال 2008 raaddawood 0 286 02-02-19, 11:16 AM
آخر رد: raaddawood
  الاتصال بقاعدة بيانات اكسس وفق نظام 64 بايت raaddawood 0 262 28-01-19, 09:21 PM
آخر رد: raaddawood
Photo [VB.NET] تعديل المدخلات في (الداتا قريد فيو ) لفاتورة مبيعات؟ EYADISMAIL 1 370 09-01-19, 10:30 PM
آخر رد: EYADISMAIL

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم