تقييم الموضوع :
  • 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 ك ب / التحميلات : 11)
الرد }}}
تم الشكر بواسطة:
#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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  سؤال عن تعلم لغة جديدة محمد حمد 2023 1 32 25-03-24, 03:14 PM
آخر رد: Taha Okla
  استعلام من عدة جداول لقاعدة بيانات اكسس Adel27213 1 702 07-11-23, 08:27 AM
آخر رد: justforit
  [SQL] استفسار عن طريقة تحزم قواعد بيانات MSSQL مع البرنامج VB.NET2019 salemq 2 530 18-05-23, 03:02 AM
آخر رد: سعود
  ما معني بيانات تقع بين الرمز[] في حقل في داتا بيس bassant 3 672 03-04-23, 11:53 PM
آخر رد: sanyor77
  [نقاش] مشاركة قاعدة بيانات SQL على شبكه داخليه morkoskhalaf 3 3,009 06-01-23, 03:20 AM
آخر رد: عبدالكريم برشدان
  قاعدة بيانات xml djelloul 3 2,799 07-11-22, 10:27 PM
آخر رد: Am7
  [عنوان معدل]حفظ بيانات listbox fhad24 36 12,240 08-10-22, 06:55 PM
آخر رد: رضوان الجماعي
  مشكلة ظهور بياانات حقلين في قاعدة بيانات على شكل علامة استفهام bassant 5 1,632 17-10-21, 02:07 PM
آخر رد: abubasilIraq
  [Acces2010] اريد تعديل الكود للاكسس بسام محمدغانم 0 833 13-10-21, 09:14 PM
آخر رد: بسام محمدغانم
  كيف افتح قاعة بيانات اكسس بسام محمدغانم 1 1,404 04-10-21, 02:52 AM
آخر رد: اسلام الكبابى

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


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