الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة فى كود الحفظ

بدأه مصطفى_ظيمة في 12 مارس 2011 · 11 رد · 1,114 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأعزاء أعضاء المنتدى الذى له افضال كثيرة على بعد الله سبحانة وتعالى

الموضوع بسيط

الكود التالى هو كود حفظ البيانات فى قاعدة من نوع أكسس

الكود يقوم بالتحقق من البيانات المدخلة إلى الجدول gen قبل الحفظ

وفى حالة عدم تكرارها بقوم بالحفظ بنجاح

المشكلة انه فى حالة عدم تكرار البيانات لا يقوم بالحفظ

انا اريد أن يقوم الكود بالتحقق من تكرار البيانات وعندما يعطينى رسالة بذلك يكون بها اختيارات yes و No

عندما أختار No لايقوم بالحفظ وعندما يكون yes يقوم بالحفظ

أو بمنعى آخر أريد أن أكون انا المسيطرة على الحفظ حتى فى حالة التكرار وليس الكود

وشكرا لكم على تعاونكم

وهذا هو الكود

DB.Open() 
        Dim str1 As String 
        str1 = "select * from gen where [num] ='" & TextBox2.Text & "'" 
        Dim com As New OleDbCommand(str1, DB) 
        Dim dataReader As OleDb.OleDbDataReader 
        dataReader = com.ExecuteReader() 
        dataReader.Read() 
        If dataReader.HasRows = False Then 
            Dim res = MsgBox("هل ترغب بالتأكيد في حفظ بيانات المستخدم الجديد", MsgBoxStyle.YesNo) 
            If res = 10 Then 
                str1 = "INSERT INTO gen (code,num,Kind,source,tex,notes)" & _ 
                "values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & ComboBox1.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "')" 
                Dim com1 As New OleDb.OleDbCommand(str1, DB) 
                com1.ExecuteNonQuery() 
            End If 
        Else 
            MsgBox("هذا المستخدم موجود سابقاْ", MsgBoxStyle.YesNoCancel) 
        End If 
        DB.Close()

وهذا مثال به الكود

ارجو تعديل الكود او تعديل المثال

Mostafa_Zema v3.0.rar

#2

للرفع

#3
 Dim str1 As String = "select user_n from user_add where [user_n] ='" & UserfComboBox.Text & "'"
        Dim str2 As String = "INSERT INTO user_add (user_n) values ('" & UserfComboBox.Text & "')"
        Dim com As New SqlCommand
        Dim com1 As New SqlCommand
        '''''''''''''''''''''''''''''''''
        If consq.State = ConnectionState.Open Then consq.Close()
        consq.Open()
        ''''''''''''
        com = New SqlCommand(str1, consq)
        Dim dataReader As SqlDataReader
        dataReader = com.ExecuteReader()
        dataReader.Read()
        ''''''''''''
        If dataReader.HasRows = False Then

            Dim res = MsgBox("هل ترغب بالتأكيد في حفظ بيانات المستخدم الجديد", MsgBoxStyle.YesNo)
            If res = MsgBoxResult.Yes Then

                If consq.State = ConnectionState.Open Then consq.Close()
                consq.Open()

                com1 = New SqlCommand(str2, consq)
                com1.ExecuteNonQuery()

            End If

        Else
            Dim res2 = MsgBox("هذا المستخدم موجود سابقاْ", MsgBoxStyle.YesNoCancel)
            If res2 = MsgBoxResult.Yes Then
                If consq.State = ConnectionState.Open Then consq.Close()
                consq.Open()

                com1 = New SqlCommand(str2, consq)
                com1.ExecuteNonQuery()
            Else
                Exit Sub
                consq.Close()
                com.Dispose()
                com1.Dispose()
            End If

            consq.Close()
            com.Dispose()
            com1.Dispose()
            Exit Sub
        End If
#4

أخى العزيز المسلمانى شكرا على ردك

ولكن هل من الممكن ان تطبق الكود على المثال المرفق فى بداية المشاركة لانى عند تطبيقه واجهت صعوبة فى التطبيق

وشكرا لك مرة أخرى

#5

أخى المسلمانى هذا هو كود الحفظ الذى اريد ان اضيف عليه كود عدم التكرار فى textbox2 اللى هوا اسمه num فى جدول gen

Try
            Application.DoEvents()


            If TextBox1.Text > 0 Then

                'كود اضافة سجل جديد
                Dim Add_NewRow As DataRow = DataSet1.Tables("gen").NewRow()

                If TextBox1.Text = "" Then Add_NewRow("code") = DBNull.Value Else Add_NewRow("code") = TextBox1.Text.Trim
                If TextBox2.Text = "" Then Add_NewRow("num") = DBNull.Value Else Add_NewRow("num") = TextBox2.Text.Trim
                If ComboBox1.Text = "" Then Add_NewRow("kind") = DBNull.Value Else Add_NewRow("kind") = ComboBox1.Text.Trim
                If TextBox3.Text = "" Then Add_NewRow("source") = DBNull.Value Else Add_NewRow("source") = TextBox3.Text.Trim
                If TextBox4.Text = "" Then Add_NewRow("tex") = DBNull.Value Else Add_NewRow("tex") = TextBox4.Text.Trim
                If TextBox5.Text = "" Then Add_NewRow("notes") = DBNull.Value Else Add_NewRow("notes") = TextBox5.Text.Trim

                DataSet1.Tables("gen").Rows.Add(Add_NewRow)

                'كود حفظ الاضافة
                Validate()
                DataAdapter.Update(DataSet1.Tables("gen"))
                DataSet1.AcceptChanges()

                'تحديث قاعدة البيانات
                DB.Open()
                DataSet1.Clear()
                DataAdapter.Fill(DataSet1, "gen")
                DB.Close()

                'كود الانتقال الى اخر سجل تم اضافته بعد تخديث قاعدة البيانات
                Me.BindingContext(DataSet1, "gen").Position = 0

                count()

                MsgBox("تم الاضافة بنجاح", 64, "نجاح")

            Else

                'كود معرفة رقم الصف الحالي في قاعدة البيانات  
                Dim Row_Num As Integer = Me.BindingContext(DataSet1, "gen").Position

                'كود حفظ التعديل
                DataSet1.Tables("gen").Rows(Row_Num).BeginEdit()

                If TextBox1.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("code") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("code") = TextBox1.Text.Trim
                If TextBox2.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("num") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("num") = TextBox2.Text.Trim
                If ComboBox1.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("kind") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("kind") = ComboBox1.Text.Trim
                If TextBox3.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("source") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("source") = TextBox3.Text.Trim
                If TextBox4.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("tex") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("tex") = TextBox4.Text.Trim
                If TextBox5.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("notes") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("notes") = TextBox5.Text.Trim

                DataSet1.Tables("gen").Rows(Row_Num).EndEdit()

                'كود حفظ التعديل
                Validate()
                DataAdapter.Update(DataSet1.Tables(0))
                DataSet1.AcceptChanges()

                count()

                MsgBox("تم حفظ التعديل", 64, "نجاح")

            End If

        Catch ex As Exception

            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try
#6

up

#7

اهلا اخي انا كنت بقصد اعطيك الفكرة على اي حال بدل الكود الذي لديك بهذا الكود

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim str1 As String = "select num from gen where [num] ='" & TextBox2.Text & "'"
        Dim str2 As String = "INSERT INTO gen (code,num,Kind,source,tex,notes)" & _
                "values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & ComboBox1.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "')"

        Dim com As New OleDbCommand
        Dim com1 As New OleDbCommand

        If DB.State = ConnectionState.Open Then DB.Close()
        DB.Open()

        com = New OleDbCommand(str1, DB)
        Dim dataReader As OleDb.OleDbDataReader
        dataReader = com.ExecuteReader()
        dataReader.Read()

        If dataReader.HasRows = False Then

            Dim res = MsgBox("هل ترغب بالتأكيد في حفظ بيانات المستخدم الجديد", MsgBoxStyle.YesNo)
            If res = MsgBoxResult.Yes Then
                com1 = New OleDb.OleDbCommand(str2, DB)
                com1.ExecuteNonQuery()
            End If


        Else

            Dim res2 = MsgBox("هذا المستخدم موجود سابقاْ", MsgBoxStyle.YesNo)
            If res2 = MsgBoxResult.Yes Then
                If DB.State = ConnectionState.Open Then DB.Close()
                DB.Open()
                com1 = New OleDbCommand(str2, DB)
                com1.ExecuteNonQuery()

            End If


        End If

        DB.Close()
        com.Dispose()
        com1.Dispose()

    End Sub
#8

أخى المسلمانى شكرا لك تعاونك معى وجزاك الله خيرا

ولكن انا اريد منك تعديل الكود الذى وضعته فى المشاركة (5) ليكون الحفظ بدون تكرار كما فى الكود الذى وضعته حضرتك فى المشاركة (6)

وك منى الف شكر

#9

اخي الكريم توضيح بالنسبة لكائن OleDbDataAdapter

هذا الكائن مهمته نقل و تحديث البيانات من و الى القاعدة وهو يتعامل مع اربع حالات هي

DataAdapter.SelectCommand

DataAdapter.InsertCommand

DataAdapter.UpdateCommand

DataAdapter.DeleteCommand

وكل حالة تحتاج الى جملة خاصة بها ليعرف هذا الكائن كيف سيقوم بالعمليات في الكود لديك انا لا ارى الا حالة واحدة فقط و هي DataAdapter.SelectCommand

و باقي الحالات لم يتم اعطاء تعريف لها فكيف ستحدث بياناتك او تضيف بيانات جديدة .

اخي الكريم انصحك بدراسة متأنية لفهم طبيعة الكائن و كيفية التعامل معه.

#10

اخى المسلمانى انا عارف انى اثقلت عليك

لكن انا لاحظت فى الكود اللى حضرتك وضعته انه لا يتعامل مع الداتاجريد

وبالتالى لا تظهر البيانات فى الداتا جريد بعد اجراء عملية الحفظ

رجاء منك وانا اعلم انى اثقلت عليك ولكنى كلى ثقة فى سعة صدرك

ان تعدل على الكود بحيث تظهر البيانات فى الداتا جريد بعد اجراء عملية الحفظ

وايضا اريد ان ينتقل إلى السجل الأول بعد عملية الحفظ

ولك منى جزيل الشكر والتقدير

تم تعديل هذه المشاركة بواسطة مصطفى_ظيمة في 18 مارس 2011 في 04:48

#11

اخي الكريم ضع المثال في المرفقات

#12

اخى المسلمانى

اولا انا شكر لك تعبك معى

ثانيا لقد توصلت إلى الكود الصحيح وهو على النحو التالى بشرط ان يكون حقل الترقيم ليس ترقيم تلقائى

وها هو كود الحفظ بعد التعديل عليه ليقوم بالتحقق فى TextBox2.Text من عدم تكرار المدخلات

اردت ان اضعه لكى يستفيد منه ا؟لأخوة فى المنتدى

وشكرا لك يا اخى مرة اخرى وجزاك الله خيرا

Try 

            Application.DoEvents() 





            If TextBox1.Text > 0 Then 


                Dim Check As New OleDbCommand("SELECT num from gen where num  like '" & TextBox2.Text.Trim & "' ", con) 

                Dim Checknum As String = "" 
                con.Open() 
                Checknum = Check.ExecuteScalar 
                con.Close() 

                If Checknum <> "" Then 
                    If MsgBox("  الرقم مكرر هل تريد الاستمرار في الحفظ   " & " ؟ ", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkCancel, "تنبيه") = MsgBoxResult.Cancel Then Exit Sub 
                End If 



                'كود اضافة سجل جديد    

                Dim Add_NewRow As DataRow = DataSet1.Tables("gen").NewRow() 



                If TextBox1.Text = "" Then Add_NewRow("code") = DBNull.Value Else Add_NewRow("code") = TextBox1.Text.Trim 

                If TextBox2.Text = "" Then Add_NewRow("num") = DBNull.Value Else Add_NewRow("num") = TextBox2.Text.Trim 

                If ComboBox1.Text = "" Then Add_NewRow("kind") = DBNull.Value Else Add_NewRow("kind") = ComboBox1.Text.Trim 

                If TextBox3.Text = "" Then Add_NewRow("source") = DBNull.Value Else Add_NewRow("source") = TextBox3.Text.Trim 

                If TextBox4.Text = "" Then Add_NewRow("tex") = DBNull.Value Else Add_NewRow("tex") = TextBox4.Text.Trim 

                If TextBox5.Text = "" Then Add_NewRow("notes") = DBNull.Value Else Add_NewRow("notes") = TextBox5.Text.Trim 



                DataSet1.Tables("gen").Rows.Add(Add_NewRow) 



                'كود حفظ الاضافة    

                Validate() 

                DataAdapter.Update(DataSet1.Tables("gen")) 

                DataSet1.AcceptChanges() 



                'تحديث قاعدة البيانات    

                DB.Open() 

                DataSet1.Clear() 

                DataAdapter.Fill(DataSet1, "gen") 

                DB.Close() 



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

                Me.BindingContext(DataSet1, "gen").Position = Me.BindingContext(DataSet1, "gen").Count - 1 



                count() 



                MsgBox("تم الاضافة بنجاح", 64, "نجاح") 



            Else 



                'كود معرفة رقم الصف الحالي في قاعدة البيانات      

                Dim Row_Num As Integer = Me.BindingContext(DataSet1, "gen").Position 



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

                DataSet1.Tables("gen").Rows(Row_Num).BeginEdit() 



                If TextBox1.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("code") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("code") = TextBox1.Text.Trim 

                If TextBox2.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("num") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("num") = TextBox2.Text.Trim 

                If ComboBox1.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("kind") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("kind") = ComboBox1.Text.Trim 

                If TextBox3.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("source") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("source") = TextBox3.Text.Trim 

                If TextBox4.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("tex") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("tex") = TextBox4.Text.Trim 

                If TextBox5.Text = "" Then DataSet1.Tables("gen").Rows(Row_Num).Item("notes") = DBNull.Value Else DataSet1.Tables("gen").Rows(Row_Num).Item("notes") = TextBox5.Text.Trim 



                DataSet1.Tables("gen").Rows(Row_Num).EndEdit() 



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

                Validate() 

                DataAdapter.Update(DataSet1.Tables(0)) 

                DataSet1.AcceptChanges() 



                count() 



                MsgBox("تم حفظ التعديل", 64, "نجاح") 



            End If 



        Catch ex As Exception 


            con.Close() 


            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 



        End Try

سؤال ثانى اخى المسلمانى وارجو ان يتسع صدرك لى

ماهى الطرقة التى استطيع بها توسيط البيانات فى الكمبوبوكس

حيث تظهر البيانات فى اليمين او اليسار

مواضيع مشابهة