تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟
#1
السلام عليكم ورحمة الله وبركاته

كيف حالكم ياشباب بارك الله فيكم

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


كود :
RS.Open "select * from TB1 where Code='" & (TxtCode) & "'", DB, adOpenStatic, adLockReadOnly
If RS.RecordCount > 0 Then
MsgBox "كود مكرر", vbExclamation, "تنبية"
Else
RS.Close
RS.Open "select * from TB1 ", DB, adOpenDynamic, adLockOptimistic
RS.AddNew
   RS!Name = Trim(Txtname.Text)
   RS!code = Trim(TxtCode.Text)
RS.Update


انتظر مساعدتكم وشكرا لكم

وبارك الله فيكم وجزاكم الله كل خير
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم...
لديك طريقتان: إما أن تستعمل كوداً كالكود الذي ذكرته (مع بعض التعديل) أو أن تعتمد على ضبط خصائص الحقول في قاعدة البيانات.

1. في مثل هذه الحالات عادةً نستعمل حقل تعريف فريد في الجدول لتعريف كل سجل بقيمة لا تتكرر في حقل التعريف، و هناك أشكال كثيرة لمثل هذا الحقل، لكن أبسطها و أسهلها - على الأقل في Access هو إنشاء حقل من النوع "ترقيم تلقائي" (Auto-increment أو Auto-number) بحيث يقوم محرك قواعد البيانات بنفسه بتوليد قيمة فريدة (غير مكررة) لكل سجل نقوم بإضافته.
في مثالك أنت، تحتاج إلى إضافة مثل هذا الحقل - و لنفرض أننا سنسميه ID و نوعه ترقيم تلقائي. و تكون خطوات تعديل السجل كالتالي:
أ. تحديد السجل الذي سيتم تعديله. الطريقة تعتمد عليك أنت، مثلاً طلب رقم الكود (code) من المستخدم للبحث عن السجل، أو ربما تكون السجلات معروضة في DBGrid، ... إلخ.
ب. الاحتفاظ بقيمة الحقل ID في متغير.
ج. قبل حفظ السجل المعدل نتأكد من عدم تكرار الكود مع سجل آخر، و هذا هو بيت القصيد: استعمل نفس كودك السابق و لكن مع تعديل بسيط، كالتالي:
كود :
Dim RecID As Long

RecID = ...

RS.Open "SELECT * FROM TB1 WHERE (Code = '" & (TxtCode) & "') AND (ID <> " & CStr(RecID) & ")", DB, adOpenStatic, adLockReadOnly
If RS.RecordCount > 0 Then
    MsgBox "كود مكرر", vbExclamation, "تنبية"
Else
    ' ...
    ' ...
    ' ...
End If
حيث سنبحث عن كود (code) مطابق للكود المكتوب في مربع النص مع سجل غير السجل الذي يتم تعديله.

2. الطريقة الثانية هي أن تجعل الحقل code (في Access) لا يقبل القيم المكررة (حدد الحقل code و اذهب إلى الخاصية "مفهرس" و اختر لها "نعم (التكرار غير مقبول)").
في هذه الحالة لن تحتاج إلى الاختبار في كود VB - في الإضافة أو التعديل - و لكن عليك إنشاء مصيدة أخطاء. مثلاً:
كود :
Private Sub ...

    On Error GoTo Save_Err

    RS.Close
    RS.Open "SELECT * FROM TB1", DB, adOpenDynamic, adLockOptimistic
    RS.AddNew
    RS("Name") = Trim(Txtname.Text)
    RS("code") = Trim(TxtCode.Text)
    RS.Update
    Exit Sub

Save_Err:
    RS.CancelUpdate
    MsgBox "خطأ..." & vbCrLf & Err.Description & vbCrLf & "لم يتم حفظ السجل"
End Sub

و طبعاً يمكنك معرفة رقم الخطأ و معرفة ما إذا كان سببه تكرار البيانات أم شيء آخر.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة:
#3
السلام عليكم ورحمة الله وبركاته

شكرا لك اخوى على الرد بارك الله فيك

جربت الكود الاول وظهر لى الخطأ التالى :

no value given for one or more required parameters

وجربت الكود الثانى وظهر الخطأ التالى :

either bof or eof is true or the current record has been deleted
requested operation requires a current record

والخطا يظهر لى عند السطر

RS.CancelUpdate


انتظر الحل وشكرا لك وبارك الله فيك
الرد }}}
تم الشكر بواسطة:
#4

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





RS.AddNew لإضافة جديد.
RS.Edit للتعديل على سجل بعد تحديده بـ WHERE في جملة الاستعلام.
ضع البيانات المطلوبة، مع ملاحظة أنه في حالة Edit لن تحتاج للسطر (RS!code = Trim(TxtCode.Text.
RS.Update تكون للـ AddNew و Edit بعد وضع البيانات المطلوبة.

PHP كود :
RS.Open "SELECT * FROM TB1 WHERE Code='" & (TxtCode) & "'"DBadOpenDynamicadLockOptimistic
RS
.Edit
   RS
!Name Trim(Txtname.Text)
RS.Update 






السلام عليكم ورحمة الله وبركاته
الرد }}}
تم الشكر بواسطة:
#5
السلام عليكم ورحمة الله وبركاته

إقتباس :RS.AddNew لإضافة جديد.
RS.Edit للتعديل على سجل بعد تحديده بـ WHERE في جملة الاستعلام.
ضع البيانات المطلوبة، مع ملاحظة أنه في حالة Edit لن تحتاج للسطر (RS!code = Trim(TxtCode.Text.
RS.Update تكون للـ AddNew و Edit بعد وضع البيانات المطلوبة.

شكرا لك اخوى على الرد ولكن انت تقصد RS.EditMode لانى لايوجد عندى RS.Edit

ثانى شىء انا حليت المشكلة بالنسبة للطريقة الثانية الى كتبها اخوى ناجى ابراهيم والى هى :

كود :
Private Sub ...

    On Error GoTo Save_Err

    RS.Close
    RS.Open "SELECT * FROM TB1", DB, adOpenDynamic, adLockOptimistic
    RS.AddNew
    RS("Name") = Trim(Txtname.Text)
    RS("code") = Trim(TxtCode.Text)
    RS.Update
    Exit Sub

Save_Err:
    RS.CancelUpdate
    MsgBox "خطأ..." & vbCrLf & Err.Description & vbCrLf & "لم يتم حفظ السجل"
End Sub
باقى فقط حل مشكلة الطريقة الاولى والمشكلة هى :

no value given for one or more required parameters

وشكرا لكم جميعا وبارك الله فيكم وجزاكم الله كل خير
الرد }}}
تم الشكر بواسطة:
#6
هل تقصد بكلمة التحديث اي [COLOR="#FF0000"]التعديل [/COLOR]على السجل
اذا كان هذا ماتقصدة فـ الليك بهذا التعديل في الكود الخاص بك
واتمنا يكون المطلوب
ولو ارفقة البرنامج ليتم التعديل علية

PHP كود :
If rs.State 1 Then rs.Close
RS
.Open "select * from TB1 where Code='" & (TxtCode) & "'"DBadOpenStaticadLockReadOnly
If RS.RecordCount <> 1 Then
MsgBox 
"لا توجد بيانات "vbExclamation"تنبية"
Else
RS.Update
   RS
!Name Trim(Txtname.Text)
   
RS!code Trim(TxtCode.Text)
RS.Update 
[صورة مرفقة: images?q=tbn:ANd9GcT72OLJW7D1E5QW-HUeWeJ...TGoNeg2jnQ]
الرد }}}
تم الشكر بواسطة:
#7
إقتباس :هل تقصد بكلمة التحديث اي التعديل على السجل

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

شكرا على مرورك اخى الكريم بارك الله فيك

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

وشكرا لكم جميعا وبارك الله فيكم وجزاكم الله كل خير


الملفات المرفقة
.rar   تعديل سجل.rar (الحجم : 17.25 ك ب / التحميلات : 125)
الرد }}}
تم الشكر بواسطة:
#8
تفضل التعديل


الملفات المرفقة
.rar   تعديل سجل.rar (الحجم : 19.31 ك ب / التحميلات : 180)
[صورة مرفقة: images?q=tbn:ANd9GcT72OLJW7D1E5QW-HUeWeJ...TGoNeg2jnQ]
الرد }}}
تم الشكر بواسطة:
#9
السلام عليكم ورحمة الله وبركاته

شكرا لك اخى بارك الله فيك ورزقك من واسع علمة

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

واجهتنى مشكلة عندما قمت بتغيير نوع حقل الكود ليكون Number فظهر لى الخطأ التالى عند التنفيذ

data type mismatch in criteria expression

فما حل هذه المشكلة وشكرا لك وبارك الله فيك

الرد }}}
تم الشكر بواسطة:
#10
تفضل التعديل بعد تغير نوع الحقل الى رقم


الملفات المرفقة
.rar   تعديل سجل.rar (الحجم : 18.02 ك ب / التحميلات : 176)
[صورة مرفقة: images?q=tbn:ANd9GcT72OLJW7D1E5QW-HUeWeJ...TGoNeg2jnQ]
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طريقة التعامل مع قاعدة البيانات وربطها بالفيجوال بيسك 6 ENG.MPROG 11 22,046 21-02-24, 08:29 PM
آخر رد: Nasa_use
  ربط قاعدة البيانات بالانترنت abu jana 7 3,460 26-03-23, 04:17 PM
آخر رد: sanyor77
  عروض أعمدة ال datagrid تلقائيآ حسب البيانات المكتوبة فيها اسلام الكبابى 2 2,569 27-02-23, 03:55 PM
آخر رد: tighrmte
  رفع قواعد البيانات أكسس على الانترنت فيجوال بيسيك 2 3,582 27-02-23, 03:44 PM
آخر رد: tighrmte
  عرض الصور من قاعدة بيانات اكسس داخل الداتا ريبورت mohammed_atallah 0 689 01-09-22, 01:25 PM
آخر رد: mohammed_atallah
  [سؤال] كيفية إظهار QR Code على Crystal Reports 10 tarekj 1 2,413 15-12-21, 03:53 AM
آخر رد: AmrSobhy
  كيفية منع تكرار التاريخ فى قاعدة البيانات ؟ gedo 7 5,691 19-06-21, 09:31 PM
آخر رد: khaled201349
  طلب طريقة نقل البيانات من جدول الي جدول اخر في قاعدة بيانات اخر ahmed201 2 2,340 01-03-21, 12:14 AM
آخر رد: ahmed201
  فورم vb6 لنقل بيانات من جدول لآخر بنفس قاعدة بيانات اكسيس محمد تريكه 5 3,712 24-02-21, 08:10 PM
آخر رد: ahmed201
  [سؤال] البرنامج لا يقرأ من قاعدة البيانات بعد تنصيب البرنامج على ويندوز 10 aboezzat84 4 2,207 03-01-21, 02:58 AM
آخر رد: aboezzat84

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


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