تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
منع التكرار اسم الصنف في حالة الحفظ والتعديل كود واحد
#1
شباب الله يكرمكم مساعده 
انا شغال في برنامج مبيعات 
وعملت زر واحد للتعديل والاضافه المشكله انه بيكرر الاضافه عاوز اخلي الاستعلام انه لو الاسم موجود ماتضفيه تاني 
 ده الكود 
كود :
       If Unit.Text = "" Then
           ErrorProvider1.SetError(Unit, "ادخل اسم الوحدة")
           Unit.Focus()
           Exit Sub
       Else
           Dim sql = "select * from Unit where ID=N'" & (ID.Text) & "'"

           Dim adp As New SqlClient.SqlDataAdapter(sql, SQLConn)
           Dim ds As New DataSet
           adp.Fill(ds)
           Dim dt = ds.Tables(0)
           If dt.Rows.Count > 0 Then
               Dim dr = dt.Rows(0)
               dr!Unit = Unit.Text
               Dim cmd As New SqlClient.SqlCommandBuilder(adp)
               adp.Update(dt)
               BtnNew_Click(sender, e)
               MsgBox("تم التعديل بنجاح", MsgBoxStyle.Information, "رسالة تأكيد")
               showGrid("select * from Unit order by Unit")

           Else

               Dim dr = dt.NewRow
               dr!Unit = Unit.Text
               dt.Rows.Add(dr)
               Dim cmd1 As New SqlClient.SqlCommandBuilder(adp)
               adp.Update(dt)
               BtnNew_Click(sender, e)
               MsgBox("تم الحفظ بنجاح", MsgBoxStyle.Information, "رسالة تأكيد")

               showGrid("select * from Unit order by Unit")

           End If
           End If
الرد }}}
تم الشكر بواسطة: سعود
#2
رأي:
انك تخلي TEXTSANF لما يتكتب فيه يتم الاستعلام منه عند الكتابة في الجدول ولو مثلا كتبنا كالأتي
TEXTSANF= شاي   وعملنا استعلام وبعد كتابة الاستعلام ظهر اسم الصنف في TEXTSERSH
نستخدم الكود الاتي.

if textsanf=textsearsh.text then

كود الاقتراح باضافة الصنف اذا كان نعم يتم الحفظ واذا كان لا يمنع حفظ هذا الصنف

else

كود الحفظ او التعديل


end if

هذا رأي والله أعلم ولعلك تجد ضالتك عند احد الاخوة.
المبرمج لا يفكر في المشكلة بل في الحل!!
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , سعود
#3
السلام عليكم احي الكريم 
لفعل جملة تقوم بالحفظ او التعديل نحتاج الى التأكد من ان السجل موجود او لا 
وافضل تحقق يكون بحقل الاي دي كونه فريد لايتكرر
في البداية قم بإنشاء هذا الصب
كود :
Dim da As New OleDbDataAdapter
   Dim kk As Boolean ' نعريف متغير من نوع بولين خارج الصب
   ' ننشئ صب للتحقق من ان الملف الذي يحمل رقم الاي دي موجود او لا
   Sub chekItem()
       Dim dt As New DataTable
       da = New OleDbDataAdapter("select * From Items where id = " & Txt_id.Text & "", con)
       da.Fill(dt)
       If dt.Rows.Count = 0 Then
           kk = False
       ElseIf dt.Rows.Count > 0 Then
           kk = True
       End If
   End Sub

ثم في حدث زر الحفظ ضع هذا الكود وضع كود الحفظ في المكان المشار اليه وكذلك كود التعديل

كود :
' كود الحفظ والتعديل
   Private Sub Btn_Save_Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Save_Update.Click
       Try
           chekItem() ' مناداة صب التحقق
           If kk = False Then
               ' ضع كود الحفظ هنا
           Else
               If MessageBox.Show("هل تريد تعديل السجل؟", "Alert", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
               End If
               ' ضع كود التعديل هنا
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
       ' اعادة تحميل الجدول
   End Sub
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
#4
PHP كود :
 Private Function ID_Exists(ByVal num As Integer) As Boolean
    
If Conn.State Is ConnectionState.Closed Then
        Conn
.Open()
    End If

    Dim cmd As SqlCommand = New SqlCommand("Select count(*) from Unit where ID= @ID"Conn)
    cmd.Parameters.AddWithValue("@ID"num)
    Dim result cmd.ExecuteScalar()
    Conn.Close()
    Return Convert.ToBoolean(result)
End Function 


تستطيع فحص التكارا كالاتي:
PHP كود :
If ID_Exists(ID.Text.textIs True Then
 the ID already in database
Else
the ID not in database
End 
If 

الرد }}}
#5
الله يعطيك العافية
باعتقادي انه من الافضل هو عدم تكرار رقم الباركود
وبالتالي كل صنف له رقم باركود فريد فاسم الصنف من الممكن ان يتكرر
اذا كان هناك اختلاف بوحدة الصنف
فمثلا لو فرضنا ان لدينا صنف اسمه (شاي) والوحدة عبارة عن عبوة بوزن 250 غرام مثلا"
وكان هناك عبوة اخرى من نفس الصنف لكن الوحدة عبارة عن 500 غرام
هنا اسم الصنف سيتكرر لكن كيف يمكن ان نفرق بينهما يبقى رقم الباركود هو الذي
من خلاله نستطيع ان نفرق بين الصنفين
الرد }}}
تم الشكر بواسطة: سعود
#6
اولا انا بشكركم جدا علي التفاعل والمساعده 
بس اظن ان الفكره لم تصل كامله 
الفكر ببساطه 
انا عاوز اقول للزر 
لو الاسم اللي انا كتبته في textbox  
موجود في خانة الاسم رساله ان الاسم ده موجود من قبل 
لو مش موجود ضيفه 
وفي نفس الوقت الزر بيقوم بالتعديل في حالة 
كود :
dt.Rows.Count > 0 Then
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , سعود
#7
السلام عليكم اخي الكريم
حقل الاسم يمكن ان يتكرر الاسم في السجلات اما حقل الاي دي او الباركود لايتكرر
وبما انك تريد حقل الاسم استبدل جملة الاستعلام 
الى التالي:
كود :
da = New OleDbDataAdapter("select * From Items where حقل الاسم = '" & Txt_Name.Text & "'", con)
سنبحث اولا وان وجد يكون الكود تعديل وان لم يوجد يكون الكود حفظ
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: سعود , سلام نيس
#8
(15-07-19, 11:13 PM)ابراهيم ايبو كتب : السلام عليكم اخي الكريم
حقل الاسم يمكن ان يتكرر الاسم في السجلات اما حقل الاي دي او الباركود لايتكرر
وبما انك تريد حقل الاسم استبدل جملة الاستعلام 
الى التالي:
كود :
da = New OleDbDataAdapter("select * From Items where حقل الاسم = '" & Txt_Name.Text & "'", con)
سنبحث اولا وان وجد يكون الكود تعديل وان لم يوجد يكون الكود حفظ

عليكم السلام اخي 
انت شخص عظيم 
ولكن في هذه الحاله يكرر الاسم انا اريد الا يكرر الاسم ويعلمنى ان الاسم منوجود من قبل
الرد }}}
تم الشكر بواسطة: سعود
#9
مارايك بالاطلاع على المثال السريع؟


.zip   AnewOrUpdate.zip (الحجم : 36.08 ك ب / التحميلات : 45)


الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , سلام نيس
#10
احسنتم جميعا 
والشكر لكم 
تم حل المسكله بالتحقق من من الداتا جريد فيو بهذا الكود 

كود :
      For i = 0 To DataGridView1.Rows.Count - 1
          If DataGridView1.Rows(i).Cells(0).Value = Item_code.Text Then
MsgBox
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو



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


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