منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40)
+--- قسم : قسم اسئلة vb6.0 المتعلقة بقواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=72)
+--- الموضوع : كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ (/showthread.php?tid=7974)

الصفحات: 1 2


كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - gedo - 15-03-13

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

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

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


كود :
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


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

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



كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - ناجي إبراهيم - 15-03-13

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

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

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

نرجو الاستفادة و السلام.


كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - gedo - 16-03-13

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

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

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

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


انتظر الحل وشكرا لك وبارك الله فيك



كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - @@أبورائد@@ - 16-03-13


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





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 






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



كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - gedo - 16-03-13

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

إقتباس :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

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



كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - تركي الحلواني - 17-03-13

هل تقصد بكلمة التحديث اي [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 



كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - gedo - 18-03-13

إقتباس :هل تقصد بكلمة التحديث اي التعديل على السجل

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

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

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

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



كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - تركي الحلواني - 18-03-13

تفضل التعديل


كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - gedo - 18-03-13

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

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

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

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

data type mismatch in criteria expression

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




كيفية منع التكرار فى قاعدة البيانات فى حالة التحديث ؟ - تركي الحلواني - 18-03-13

تفضل التعديل بعد تغير نوع الحقل الى رقم