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


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

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

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

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

data type mismatch in criteria expression

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

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


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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  حفظ الصورة بعد عمل سحبها من السكانر(الماسح الضوئي) في قاعدة البيانات haniblack 11 1,124 18-09-17, 10:01 PM
آخر رد: scsi7000
  كيفية انشاء حقل ترقيم تلقائي تناسيم 1 75 06-09-17, 05:28 PM
آخر رد: محمد كريّم
  هل يمكن دمج قاعدة بيانات dmb مع عدة قواعد مثلها gonm64 3 130 02-09-17, 05:15 PM
آخر رد: Amir_alzubidy
  كيفية تصدير البيانات الى الوورد gonm64 0 48 16-08-17, 06:21 AM
آخر رد: gonm64
  [VB.NET] مشكله في الاضافه الى قاعدة البيانات ابراهيم الضبري 0 124 27-04-17, 07:42 PM
آخر رد: ابراهيم الضبري
  كيف اجعل المستخد م يحدد قاعدة بيانات البرنامج يدوياً من خلال البرنامج والعمل عليها ؟؟ softmail8 4 881 27-01-17, 08:08 PM
آخر رد: awidan76
  طريقة التعامل مع قاعدة البيانات وربطها بالفيجوال بيسك 6 ENG.MPROG 9 6,580 06-01-17, 06:28 PM
آخر رد: ShaReeF
  كيفية منع تكرار التاريخ فى قاعدة البيانات ؟ gedo 6 1,295 25-10-16, 10:10 AM
آخر رد: abulayth
  رفع قواعد البيانات أكسس على الانترنت فيجوال بيسيك 1 386 15-10-16, 05:11 PM
آخر رد: abulayth
  انشاء علاقة بين الجداول في قاعدة بيانات SQL aiman 1 391 14-10-16, 09:24 PM
آخر رد: aiman

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


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