none
Evitar Duplicidad en un registro mediante programacion

    Pregunta

  • buenas, actualmente estoy intentando lograr evitar la duplicidad con un codigo que me parece es bastente viable pero no me funciona y no logro encontrar el error, el codigo que uso es el siguiente

      If MessageBox.Show("¿Seguro que quiere guardar el registro?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then

                For Each fila In Tabla_de_gabrielDataGridView.Rows
                    If fila.cells("DataGridViewTextBoxColumn22").value <> txtNombre.Text Then
                        'insertar filas en la BD
                        Me.Tabla_de_gabrielTableAdapter.Insertar(txtNombre.Text, txtContraseña.Text,  cbEstadoCivil.Text)
                        Me.Tabla_de_gabrielTableAdapter.Fill(Me.GabrielDataSet.Tabla_de_gabriel)
                    Else
                        MessageBox.Show("Este Usuario Ya esta existe, use otro nombre de usuario", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                    End If
                Next

    'Si no estoy mal, lo que  intento decir en ese codigo es: recorreme todo el datagrid y si encuentras una celda cuyo valor sea igual al nombre que intento insertar que surga un mensaje dando la alerta, en caso contrario que inserte. 

    'pero el resultado que obtengo de ese codigo es que inserta filas casi infinitas y tengo que parar la depuracion para detener el bucle.

    Ojala  y puedan ayudarme

    Gracias


    Renzo Rivera

    domingo, 15 de enero de 2017 19:58

Respuestas

  • Fíjate con cuidado en el "If" que has puesto dentro del bucle. Recorres con un bucle TODAS las filas, y por cada fila dices que si es DISTINTA del txtNombre, entonces la inserte en la base de datos. Es decir, que si en el grid hay mil filas y solo una tiene el nombre del txtNombre, entonces insertas 999 filas en la base de datos (porque todas son distintas), y presentas una sola vez el mensaje diciendo que ya existe.

    Te recomiendo que para evitar problemas reorganices el código usando una variable booleana. Declara primero la variable, que podemos llamar "YaExiste" e inicialízala a False. Después haz el bucle, y dentro pon el IF de forma que si la fila es IGUAL al txtNombre entonces pones True en la variable YaExiste y sales del bucle (con Exit For). Y Luego, ya fuera del bucle, pones un "IF" que dependiendo de YaExiste grabe el registro o muestre el error.

    • Marcado como respuesta Renzo19 domingo, 15 de enero de 2017 21:51
    domingo, 15 de enero de 2017 20:16
  • dime cual es el error

    Has puesto el bloque del "If Yaexiste..." dentro del bucle, en lugar de ponerlo al final, después del "Next".

    Dim YaExiste As Boolean = False
    For Each fila In Tabla_de_gabrielDataGridView.Rows
        If txtNombre.Text = fila.cells("DataGridViewTextBoxColumn22").value Then
            YaExiste = True
             Exit For
        End If
    Next 
    If YaExiste = False Then
        '...
    Else
        '...
    End If
    
    

    • Marcado como respuesta Renzo19 domingo, 15 de enero de 2017 21:50
    domingo, 15 de enero de 2017 21:42

Todas las respuestas

  • Fíjate con cuidado en el "If" que has puesto dentro del bucle. Recorres con un bucle TODAS las filas, y por cada fila dices que si es DISTINTA del txtNombre, entonces la inserte en la base de datos. Es decir, que si en el grid hay mil filas y solo una tiene el nombre del txtNombre, entonces insertas 999 filas en la base de datos (porque todas son distintas), y presentas una sola vez el mensaje diciendo que ya existe.

    Te recomiendo que para evitar problemas reorganices el código usando una variable booleana. Declara primero la variable, que podemos llamar "YaExiste" e inicialízala a False. Después haz el bucle, y dentro pon el IF de forma que si la fila es IGUAL al txtNombre entonces pones True en la variable YaExiste y sales del bucle (con Exit For). Y Luego, ya fuera del bucle, pones un "IF" que dependiendo de YaExiste grabe el registro o muestre el error.

    • Marcado como respuesta Renzo19 domingo, 15 de enero de 2017 21:51
    domingo, 15 de enero de 2017 20:16
  • Alberto Poblacion, muchas gracias entendi un poco mejor mira como puse el codigo y por favor dime cual es el error por que no sucede nada, en ningun caso

       Dim YaExiste As Boolean = False
                For Each fila In Tabla_de_gabrielDataGridView.Rows
                    If txtNombre.Text = fila.cells("DataGridViewTextBoxColumn22").value Then
                        YaExiste = True
                        Exit For
                        If YaExiste = False Then
                            'Guarda en la BD
                            Me.Tabla_de_gabrielTableAdapter.Insertar(txtNombre.Text,"EJEMPLO...")
                            Me.Tabla_de_gabrielTableAdapter.Fill(Me.GabrielDataSet.Tabla_de_gabriel)
                        Else
                            MessageBox.Show("Este Usuario Ya esta existe, use otro nombre de usuario", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                        End If


                    End If
                Next


    Renzo Rivera

    • Marcado como respuesta Renzo19 domingo, 15 de enero de 2017 21:50
    • Desmarcado como respuesta Renzo19 domingo, 15 de enero de 2017 21:50
    domingo, 15 de enero de 2017 21:07
  • dime cual es el error

    Has puesto el bloque del "If Yaexiste..." dentro del bucle, en lugar de ponerlo al final, después del "Next".

    Dim YaExiste As Boolean = False
    For Each fila In Tabla_de_gabrielDataGridView.Rows
        If txtNombre.Text = fila.cells("DataGridViewTextBoxColumn22").value Then
            YaExiste = True
             Exit For
        End If
    Next 
    If YaExiste = False Then
        '...
    Else
        '...
    End If
    
    

    • Marcado como respuesta Renzo19 domingo, 15 de enero de 2017 21:50
    domingo, 15 de enero de 2017 21:42
  • Alberto Poblacion

    Hermano eres un genio, me funciono justo como quería gracias!


    Renzo Rivera

    domingo, 15 de enero de 2017 21:50