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

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : مشكلة بكود التعديل بسبب جملة فور (/showthread.php?tid=35284)

الصفحات: 1 2 3


مشكلة بكود التعديل بسبب جملة فور - abdulla2 - 19-06-20

عندي مشكلة عملت لوب في زر الحفظ
عندي حقلين الاسم والرقم..
اذا الرقم موجود بقاعدة البيانات
يظهو رسالة موجود مسبقا
والامور تمشي تمام
---
المشكلة حينما اعمل تعديل لاني لا اردي ان اعدل الرقم برقم موجود مسبقا
واريد اعدل يعتبر الرقم موجود
مسبقا ويظهر لي الرسالة
---
كيف اتحاوز المشكلة..
=============
يعني في الحفظ احتاج جملة الفور ومافي مشكلة
لكن بالتعديل اقمت بضغط على السجل سيجلب البيانات الى التكسات
وحينما اعدل الرقم سيظهر لي رسالة الرقم موجود
اريد ان يفهم انني اعدل واضيف جملة الفور
لكن سيظهر لي رسالة الرقم موجود ؟؟؟
ولو الغيت جملة الفور سيكرر نفس الرقم وهذا مالا اريده
..
ارجو المساعدة وفقكم الله


RE: مشكلة بكود التعديل بسبب جملة فور - معاند الحظ - 19-06-20

اخي بالنسبة للتعامل مع قواعد البيانات وفيما يخص سؤالك فهناك ثلاث عمليات هي 
1- اضافة (قيمة جديدة) مثل انشاء سجل واضافة قيم الحقول التابعة له للقاعدة
2- التحديث (تحديث قيمة موجودة مسبقا بقيمة جديدة) 
3- الحذف 

لكن لو ترفق الكود اللي تستخدمه او ترفق المشروع عشان تكون الصورة اوضح


RE: مشكلة بكود التعديل بسبب جملة فور - abdulla2 - 20-06-20

وعليك السلام ..
شكراً للرد ..
=========
هذا كود الإضافة مع الإستدعاء ...

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


RE: مشكلة بكود التعديل بسبب جملة فور - معاند الحظ - 20-06-20

يا اخي

تقول انك تستخدم الكود التالي للتعديل 

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



RE: مشكلة بكود التعديل بسبب جملة فور - ابراهيم ايبو - 20-06-20

السلام عليكم ورحمة الله وبركاته
اخي الكريم  لماذا تضع جملة انسرت في كود التعديل  ولماذا تتحقق من وجود السجل اصلا  يكفي ان تقوم باستدعاء السجل بناء على رقمه وعندها سيتم ملء البيانات في مربعات النصوص عندها ستكتب القيم الجديدة ماعدا رقم الاي دي لان التعديل سيتم بناء عليه اي انه هو شرط التعديل 
تفضل هذا كود التعديل اما الاستدعاء فيتم قبل التعديل حسب ماتبرمج انت من كود  اما ان تقوم بالبحث برقم سجل وتجلبه ثم تعدل او ان كانت البيانات في الداتا غرايد وعند اختيار سجل سيتم عرض حقول السجل في مربعات النصوص ايضا عدل ثم اضغط زر التعديل
هذا صب ضعه كما هو
كود :
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


RE: مشكلة بكود التعديل بسبب جملة فور - abdulla2 - 20-06-20

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


RE: مشكلة بكود التعديل بسبب جملة فور - WaeLx - 20-06-20

(20-06-20, 10:35 AM)abdulla2 كتب : اعذروني لم انتبه اني وصعت كود الاضافة بالغلط نسخت كود الاضافة المفروض كود التعديل
ولكن اخطأت بالنسخ للمنتدى =======
بارك الله فيكم
ولكن هناك اشكال بالاكواد
طيب لو عدلت رقم الشارة
وكان رقم الشارة موجود باحدى
السجلات الأخرى سيحفظ بنفس الرقم وهذا ما لا اريده؟؟؟


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

قم بربط الشرط ب ID 
ليكون الكود كالتالي

بفرض ان العمود الأول = ID


كود :
For I = 0 To dgv.Rows.Count - 1
If txtShara.Text = dgv.Rows(I).Cells(2).Value.ToString AND txtid.Text <> dgv.Rows(I).Cells(0).Value.ToString Then
MsgBox("رقم الشارة موجود مسبقا", MsgBoxStyle.Information, "خطأ")
txtShara.SelectAll()
txtShara.Focus()
Exit Sub
End If
Next



RE: مشكلة بكود التعديل بسبب جملة فور - abdulla2 - 20-06-20

اخي هو ليس id
shara هي رقم شارة العمل
اما ال id فو يتولد اوتوماتكلي عبر
دالة max


RE: مشكلة بكود التعديل بسبب جملة فور - WaeLx - 20-06-20

(20-06-20, 01:57 PM)abdulla2 كتب : اخي هو ليس id
shara هي رقم شارة العمل
اما ال id فو يتولد اوتوماتكلي عبر
دالة max


السلام عليكم أخي الحبيب


ما فهمته من سؤالك هو أنك لا تريد رقم الشارة أن يكون متكرر

في حالة تسجيل عامل جديد فالبرنامج سيتأكد أن الرقم غير موجود

أما في حالة تعديل بيانات عامل، فرقم الشارة موجود بالفعل لهذا العامل، لذا انت لا تريد أن تظهر رسالة بأن الرقم موجود في حالة التعديل

لكن اذا كنت تعدل بيانات العامل و عدلت أيضا رقم الشارة لرقم يخص عامل اخر، فهنا يجب أن تظهر رسالة تنبيه

و الكود الذي اقترحته عليك هو انه يقارن رقم id العامل الذي تقوم بتعديل بياناته (الموجود بالفعل في dgv) برقم العامل الذي يحمل نفس رقم الشارة، فاذا كان هو نفس العامل الذي تقوم بتعديل بياناته فلا تظهر رسالة خطأ، أما اذا وجد id اخر غير الذي تقوم بالتعديل عليه و يحمل نفس رقم الشارة، فسيعطي رسالة خطأ

فقط جرب الكود الذي وضعته و اخبرني ان كان يعمل ام لا


RE: مشكلة بكود التعديل بسبب جملة فور - ابراهيم ايبو - 20-06-20

السلام عليكم ورحمة الله وبركاته
موفور الشكر لاخي Waelx على مايقدمه من مساعدة لاخوته في المنتدى
بالنسبة لموضوع الاخ عبد الله الامر جدا بسيط وكما اشار لك الاخ وائل نقوم بالتحقق من وجود سجل يحمل القيمة التي سندخلها في حقل الشارة اكانت حفظ جديد ام تعديل
فقط اضيف اننا نقوم بعمل جملة بحث عن السجلات  في الداتا تابل بدلا من الداتا غرايد ان كانت تساوي القيمة المدخلة في مربع نص الشارة ويتم ذلك قبل امر الحفظ او التعديل عبر تعريف متغير من نوع بولين فان وجدنا سجلا يحمل نفس القيمة يكون ترو وان لم يوجد ستكون قيمته فولس وبناء على القيمة نحفظ او نعدل 
المثال التالي بالكامل للفكرة 
صب التحقق يمكننا استخدامه مع اي جدول واي حقل فقط نمرر الباراميترات الثلاث ( اسم الجدول - اسم الحقل - مربع نص الادخال)
ملاحظة حقل الاي دي جعلته ترقيم تلقائي