تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟
#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

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

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


الردود في هذا الموضوع
كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - بواسطة ناجي إبراهيم - 15-03-13, 06:24 PM

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

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


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