عندي مشكلة عملت لوب في زر الحفظ
عندي حقلين الاسم والرقم..
اذا الرقم موجود بقاعدة البيانات
يظهو رسالة موجود مسبقا
والامور تمشي تمام
---
المشكلة حينما اعمل تعديل لاني لا اردي ان اعدل الرقم برقم موجود مسبقا
واريد اعدل يعتبر الرقم موجود
مسبقا ويظهر لي الرسالة
---
كيف اتحاوز المشكلة..
=============
يعني في الحفظ احتاج جملة الفور ومافي مشكلة
لكن بالتعديل اقمت بضغط على السجل سيجلب البيانات الى التكسات
وحينما اعدل الرقم سيظهر لي رسالة الرقم موجود
اريد ان يفهم انني اعدل واضيف جملة الفور
لكن سيظهر لي رسالة الرقم موجود ؟؟؟
ولو الغيت جملة الفور سيكرر نفس الرقم وهذا مالا اريده
..
ارجو المساعدة وفقكم الله
اخي بالنسبة للتعامل مع قواعد البيانات وفيما يخص سؤالك فهناك ثلاث عمليات هي
1- اضافة (قيمة جديدة) مثل انشاء سجل واضافة قيم الحقول التابعة له للقاعدة
2- التحديث (تحديث قيمة موجودة مسبقا بقيمة جديدة)
3- الحذف
لكن لو ترفق الكود اللي تستخدمه او ترفق المشروع عشان تكون الصورة اوضح
وعليك السلام ..
شكراً للرد ..
=========
هذا كود الإضافة مع الإستدعاء ...
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
If txtName.Text = "" Then
MsgBox("قم بإدخال الإسم لإتمام عملية الإضافة", MsgBoxStyle.Information, "تنبيه")
Exit Sub
End If
If txtShara.Text = "" Then
MsgBox("قم بكتابة رقم الشارة لإتمام عملية الإضافة", MsgBoxStyle.Information, "تنبيه")
Exit Sub
End If
'---------------------------------
For I = 0 To dgv.Rows.Count - 1
If txtShara.Text = dgv.Rows(I).Cells(2).Value.ToString Then
MsgBox("رقم الشارة موجود مسبقا", MsgBoxStyle.Information, "خطأ")
txtShara.SelectAll()
txtShara.Focus()
Exit Sub
End If
Next
'-----------------------------------------------------------------
insert_User(txtid.Text, txtName.Text, txtShara.Text)
FillDGV()
dgv.DataSource = dt1
MsgBox("تمت عملية الإضافة بنجاح", MsgBoxStyle.Information, "الإضافة")
AllClear()
End Sub
=========================================================
وهذا كود التعديل مع الإستدعاء
For I = 0 To dgv.Rows.Count - 1
If txtShara.Text = dgv.Rows(I).Cells(2).Value.ToString Then
MsgBox("رقم الشارة موجود مسبقا", MsgBoxStyle.Information, "خطأ")
txtShara.SelectAll()
txtShara.Focus()
Exit Sub
End If
Next
Public Sub update_User(ByVal FName As String, ByVal Shara As String, ByVal id As Integer)
btnUpdate.Enabled = False
btnDelete.Enabled = False
btnAdd.Enabled = True
'-----------------------------------------------------------
Dim cmd As New OleDbCommand("update tb1 set FName=@FName,Shara=@Shara where id=@id", con)
cmd.Parameters.Add("@FName", OleDbType.VarChar).Value = FName
cmd.Parameters.Add("@Shara", OleDbType.VarChar).Value = Shara
cmd.Parameters.Add("@id", OleDbType.Integer).Value = id
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Sub
insert_User(txtid.Text, txtName.Text, txtShara.Text)
FillDGV()
dgv.DataSource = dt1
MsgBox("تمت عملية التعديل بنجاح", MsgBoxStyle.Information, "التعديل")
AllClear()
========================
وهذا كود الحذف
Public Sub delete_User(ByVal id As Integer)
btnUpdate.Enabled = False
btnDelete.Enabled = False
btnAdd.Enabled = True
'-------------------------------------------------------------------------------------------
If txtid.Text = "" Then
MsgBox(" !!..حدد البيانات المطلوب حذفها", MsgBoxStyle.Information, "تنبيه")
Exit Sub
End If
Try
Dim cmd As New OleDbCommand("delete From tb1 where id=@id", con)
cmd.Parameters.Add("@id", OleDbType.Integer).Value = id
con.Open()
cmd.ExecuteNonQuery()
con.Close()
FillDGV()
Catch ex As Exception
If con.State = ConnectionState.Open Then con.Close()
MsgBox(ex.Message)
End Try
End Sub
الاستدعاء
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
If MsgBox(" !!.. هل أنت متأكد من حذف بيانات هذا الموظف ", MsgBoxStyle.YesNo, "تأكيد الحذف") = DialogResult.Yes Then
If MsgBox(" ?.. هناك سجلات مرتبطة بهذا الموظف سيتم حذفها بالكامل للإستمرار إضغط نعم ", MsgBoxStyle.YesNo, "تأكيد الحذف") = DialogResult.Yes Then
delete_User(txtid.Text)
FillDGV()
dgv.DataSource = dt1
AllClear()
End If
End If
End Sub
يا اخي
تقول انك تستخدم الكود التالي للتعديل
كود :
For I = 0 To dgv.Rows.Count - 1
If txtShara.Text = dgv.Rows(I).Cells(2).Value.ToString Then
MsgBox("رقم الشارة موجود مسبقا", MsgBoxStyle.Information, "خطأ")
txtShara.SelectAll()
txtShara.Focus()
Exit Sub
End If
Next
ولو تلاحظ ان الكود فيه الشرط التالي
اذا كانت القيمة الموجودة في
txtShara.Text هي نفس القيمة الموجودة في dgv.Rows(I).Cells(2).Value.ToString اذن امنع التعديل اضهر رسالة خطأ
فما ادري بصراحة كيف تبغى تعدل البيانات مع الشرط هذا ؟
لان الشرط يمنع التعديل بينما انت تحتاج الى شرط يكون كالتالي
كود :
For I = 0 To dgv.Rows.Count - 1
If txtShara.Text = dgv.Rows(I).Cells(2).Value.ToString Then
' هنا يجب ان تضع كود التحديث او التعديل
updateMydata
txtShara.SelectAll()
txtShara.Focus()
Exit Sub
End If
Next
Sub updateMydata()
'اجراء تعديل البيانات
'ضع كود تعديل او تحديث البيانات هنا
End Sub
السلام عليكم ورحمة الله وبركاته
اخي الكريم لماذا تضع جملة انسرت في كود التعديل ولماذا تتحقق من وجود السجل اصلا يكفي ان تقوم باستدعاء السجل بناء على رقمه وعندها سيتم ملء البيانات في مربعات النصوص عندها ستكتب القيم الجديدة ماعدا رقم الاي دي لان التعديل سيتم بناء عليه اي انه هو شرط التعديل
تفضل هذا كود التعديل اما الاستدعاء فيتم قبل التعديل حسب ماتبرمج انت من كود اما ان تقوم بالبحث برقم سجل وتجلبه ثم تعدل او ان كانت البيانات في الداتا غرايد وعند اختيار سجل سيتم عرض حقول السجل في مربعات النصوص ايضا عدل ثم اضغط زر التعديل
هذا صب ضعه كما هو
كود :
Public Sub Update_tb1(Fname As String, Shara As String, Id As Integer)
Dim Cmd As New OleDbCommand("Update tb1 set Fname=@Fname,Shara=@Shara Where Id=@Id", con)
Cmd.Parameters.Add(New OleDbParameter("@Fname", OleDbType.VarWChar)).Value = Fname
Cmd.Parameters.Add(New OleDbParameter("@Shara", OleDbType.VarWChar)).Value = Shara
Cmd.Parameters.Add(New OleDbParameter("@Id", OleDbType.Integer)).Value = Id
If Con.State = ConnectionState.Open Then Con.Close()
Con.Open()
Cmd.ExecuteNonQuery()
Con.Close()
MessageBox.Show("تم تعديل البيانات بنجاح", "تعديل", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
وهذا في زر التعديل
كود :
Try
If MessageBox.Show("هل تريد تعديل السجل؟", "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
Update_tb1(Txt_Fname.Text, Txt_Shara.Text, Txt_Id.Text)
Else
Exit Sub
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
المعذرة كنت قد اسميت الجدول بـ Users غيرته الان الى اسم الجدول الذي عندك وهو
tb1
اعذروني لم انتبه اني وصعت كود الاضافة بالغلط نسخت كود الاضافة المفروض كود التعديل
ولكن اخطأت بالنسخ للمنتدى =======
بارك الله فيكم
ولكن هناك اشكال بالاكواد
طيب لو عدلت رقم الشارة
وكان رقم الشارة موجود باحدى
السجلات الأخرى سيحفظ بنفس الرقم وهذا ما لا اريده؟؟؟
اخي هو ليس id
shara هي رقم شارة العمل
اما ال id فو يتولد اوتوماتكلي عبر
دالة max
السلام عليكم ورحمة الله وبركاته
موفور الشكر لاخي Waelx على مايقدمه من مساعدة لاخوته في المنتدى
بالنسبة لموضوع الاخ عبد الله الامر جدا بسيط وكما اشار لك الاخ وائل نقوم بالتحقق من وجود سجل يحمل القيمة التي سندخلها في حقل الشارة اكانت حفظ جديد ام تعديل
فقط اضيف اننا نقوم بعمل جملة بحث عن السجلات في الداتا تابل بدلا من الداتا غرايد ان كانت تساوي القيمة المدخلة في مربع نص الشارة ويتم ذلك قبل امر الحفظ او التعديل عبر تعريف متغير من نوع بولين فان وجدنا سجلا يحمل نفس القيمة يكون ترو وان لم يوجد ستكون قيمته فولس وبناء على القيمة نحفظ او نعدل
المثال التالي بالكامل للفكرة
صب التحقق يمكننا استخدامه مع اي جدول واي حقل فقط نمرر الباراميترات الثلاث ( اسم الجدول - اسم الحقل - مربع نص الادخال)
ملاحظة حقل الاي دي جعلته ترقيم تلقائي