تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
منع التكرار في اضافة بيانات لقاعدة بيانات أكسس vb.net
#1
السلام عليكم ورحمة الله وبركاته
لدي قاعدة بيانات تتكون من عدة جدوال من المفترض ان يقوم المستخدم في احد فورمات بالاضافة كل البيانات لاحد الجدوال وبعض البيانات لجدول آخر ... ولذا لا استطيع عمل ماستر كي لجدول الاخير ليمنع تكرار البيانات عند اضافة بقية البيانات له عن الطريق الفورم الخاص به
فهل من طريقة اخري تمنع اضافة البيانات مكررة ....(علي مستوي الصف )

الجدول يتكون من خمسة اعمدة ... وقد يحدث أن تتكرر بيانات اربعة أعمدة ... ولكن لا ينبغي أن يتكرر بيانات الخمسة أعمدة ..فهل من طريق تفعل ذلك

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

وهذا الكود للفوم الآخير

كود :
Imports System.Data
Imports System.Data.OleDb
Public Class SpecialColor
    Public CON As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & Application.StartupPath & "\db1.mdb")
    Public DS As New DataSet
    Dim dt As New DataTable
    Public SQLstr As String = "SELECT * FROM SpecialColor WHERE OrderNo LIKE '%" & PrintDetails.TextBox1.Text & "%'"



    Sub DataBaseUpdate()
        Try
            CON.Open()
            Dim DataAdapter1 As New OleDbDataAdapter(SQLstr, CON)
            DataAdapter1.Fill(DS, "SpecialColor")
            CON.Close()
            DataAdapter1.Fill(dt)
            Me.DataGridView1.DataSource = dt

            AddDataContent()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Critical, " خطأ في الإتصال")
        End Try

    End Sub
    Public Sub updatTheDataBase()
        Dim DataAdapter1 As New OleDbDataAdapter(SQLstr, CON)
        DS.Clear()
        DataAdapter1.Fill(DS, "SpecialColor")
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MyBase.Close()
        OrderForm.Show()
        PrintDetails.Show()
    End Sub
    Sub AddDataContent()

        On Error Resume Next
        TextBox3.DataBindings.Add("Text", DS, "SpecialColor.PrintOn")
        TextBox5.DataBindings.Add("Text", DS, "SpecialColor.OrderNo")
        TextBox2.DataBindings.Add("Text", DS, "SpecialColor.SpecialColor")
        TextBox4.DataBindings.Add("Text", DS, "SpecialColor.Color")
        TextBox1.DataBindings.Add("Text", DS, "SpecialColor.Ref")

    End Sub
    Sub InsertData()
        Try





            Dim SavInto1 As New OleDb.OleDbCommand
            SavInto1.Connection = CON
            SavInto1.CommandType = CommandType.Text
            SavInto1.CommandText = "Update SpecialColor set Color=@P1,Ref=@P2 where OrderNo=@P3 and PrintOn=@P4 and SpecialColor =@P5"

            With SavInto1.Parameters
                .AddWithValue("@P1", TextBox4.Text)
                .AddWithValue("@P2", TextBox1.Text)
                .AddWithValue("@P3", TextBox5.Text)
                .AddWithValue("@P4", TextBox3.Text)
                .AddWithValue("@P5", TextBox2.Text)
            End With

            CON.Open()
            SavInto1.ExecuteNonQuery()
            SavInto1.ExecuteNonQuery()
            MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح", MsgBoxStyle.Information, "تمت العملية بنجاح")
            CON.Close()


        Catch ex As Exception When SQLstr.Count > 1
            MsgBox("This Record allreay updated", MsgBoxStyle.Critical, "Error")
            CON.Close()
        Catch ex As Exception
            MsgBox(Err.Description, MsgBoxStyle.Critical, "Error")
        End Try
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        InsertData()
        If Me.BindingContext(DS, "SpecialColor").Position = Me.BindingContext(DS, "SpecialColor").Count - 1 Then
            MyBase.Close()
        Else
            Me.BindingContext(DS, "SpecialColor").Position += 1
        End If
    End Sub

    Private Sub SpecialColor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "Print Details Of Order Number " & PrintDetails.TextBox1.Text
        TextBox3.ReadOnly = True
        TextBox2.ReadOnly = True
        TextBox5.ReadOnly = True


        DataBaseUpdate()
        If Me.BindingContext(DS, "SpecialColor").Count >= 2 Then
            Button3.Enabled = True
            Button4.Enabled = True
        Else
            Button3.Enabled = False
            Button4.Enabled = False
        End If



    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Me.BindingContext(DS, "SpecialColor").Position -= 1
    End Sub

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

    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

    End Sub

    Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    End Sub
End Class
الرد }}}
تم الشكر بواسطة:
#2
لقد وصلت لهذا الكود الذي يمنع حفظ البيانات المكررة ولكنه يمنع حفظ البيانات نهائيا حينما يكن هناك بيانات مكررة

هل من الممكن تنظروا لهذا الكود وتحاولوا اصلاحه

كود :
Sub InsertData()
        Try
            Dim SQLstr As String = "SELECT * FROM SpecialColor WHERE OrderNo LIKE '%" & PrintDetails.TextBox1.Text & "%'"
            Dim selectdb As String = "SELECT Ref FROM SpecialColor WHERE OrderNo = '" & TextBox5.Text & "' and PrintOn = '" & TextBox3.Text & "' and SpecialColor = '" & TextBox2.Text & "' Color = '" & TextBox4.Text & "' '"
            Dim DataAdapter1 As New OleDbDataAdapter(selectdb, CON)
            TextBox6.DataBindings.Clear()
            TextBox6.DataBindings.Add("Text", DS, "SpecialColor.Ref")
            If TextBox6.Text <> TextBox1.Text Then
                Dim SavInto1 As New OleDb.OleDbCommand
                SavInto1.Connection = CON
                SavInto1.CommandType = CommandType.Text
                SavInto1.CommandText = "Update SpecialColor set Color=@P1,Ref=@P2 where OrderNo=@P3 and PrintOn=@P4 and SpecialColor=@P5 "
                With SavInto1.Parameters
                    .AddWithValue("@P1", TextBox4.Text)
                    .AddWithValue("@P2", TextBox1.Text)
                    .AddWithValue("@P3", TextBox5.Text)
                    .AddWithValue("@P4", TextBox3.Text)
                    .AddWithValue("@P5", TextBox2.Text)
                End With
                CON.Open()
                SavInto1.ExecuteNonQuery()
                CON.Close()
                MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح", MsgBoxStyle.Information, "تمت العملية بنجاح")
            ElseIf TextBox6.Text = TextBox1.Text Then
                MsgBox("This order allreay updated", MsgBoxStyle.Critical, "Error")
                TextBox1.Clear()
                TextBox4.Clear()
                CON.Close()
            End If
        Catch ex As Exception
            MsgBox(Err.Description, MsgBoxStyle.Critical, "Error")
        End Try
    End Sub
الرد }}}
تم الشكر بواسطة:
#3
الطريقة اللي اعرفها لمنع التكرار هي بالاستعلام اولا عن المراد اضافته فان كان موجود يخرج من الروتين او يستمر.
مثلا اريد اضافة اسم "سعود" اتحقق اولا
كود :
dim cm as new oledbcommand("select count(tid) from tb where tname='سعود'",con)
con.open
if cm.executescalar >0 then

هنا الاسم موجود وتكتب كود الخروج من الروتين لو كانت تحتوي كود الاضافة
exit sub

end if
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء، اللهم أصلح لي ديني الذي هو عصمة أمري، وأصلح لي دنياي التي فيها معاشي، وأصلح لي آخرتي التي فيها معادي، واجعل الحياة زيادة لي في كل خير، واجعل الموت راحة لي من كل شر
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي جدي وهزلي وخطأي وعمدي وكل ذلك عندي، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة: أبوبكر سويدان , waelalmsry75 , asemshahen5 , elgokr
#4
(06-10-13, 02:03 PM)سعود كتب : الطريقة اللي اعرفها لمنع التكرار هي بالاستعلام اولا عن المراد اضافته فان كان موجود يخرج من الروتين او يستمر.
مثلا اريد اضافة اسم "سعود" اتحقق اولا
كود :
dim cm as new oledbcommand("select count(tid) from tb where tname='سعود'",con)
con.open
if cm.executescalar >0 then

هنا الاسم موجود وتكتب كود الخروج من الروتين لو كانت تحتوي كود الاضافة
exit sub

end if
الله يجزيك خير
الرد }}}
تم الشكر بواسطة: asemshahen5 , asemshahen5 , elgokr


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] سؤال حول منع تكرار بيانات عند تعديلها justforit 0 36 20-04-24, 04:29 AM
آخر رد: justforit
  استعلام من عدة جداول لقاعدة بيانات اكسس Adel27213 1 731 07-11-23, 08:27 AM
آخر رد: justforit
  *[- تم الحل -]* ما هو كود اضافة ميزة المفتاح الاساسي لعمود ترقيم تلقائي موجود سعود 2 503 27-05-23, 01:44 AM
آخر رد: سعود
  [SQL] استفسار عن طريقة تحزم قواعد بيانات MSSQL مع البرنامج VB.NET2019 salemq 2 542 18-05-23, 03:02 AM
آخر رد: سعود
  ما معني بيانات تقع بين الرمز[] في حقل في داتا بيس bassant 3 678 03-04-23, 11:53 PM
آخر رد: sanyor77
  [نقاش] مشاركة قاعدة بيانات SQL على شبكه داخليه morkoskhalaf 3 3,027 06-01-23, 03:20 AM
آخر رد: عبدالكريم برشدان
  قاعدة بيانات xml djelloul 3 2,807 07-11-22, 10:27 PM
آخر رد: Am7
  [عنوان معدل]حفظ بيانات listbox fhad24 36 12,264 08-10-22, 06:55 PM
آخر رد: رضوان الجماعي
  مشكلة ظهور بياانات حقلين في قاعدة بيانات على شكل علامة استفهام bassant 5 1,636 17-10-21, 02:07 PM
آخر رد: abubasilIraq
  كيف افتح قاعة بيانات اكسس بسام محمدغانم 1 1,411 04-10-21, 02:52 AM
آخر رد: اسلام الكبابى

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


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