Insertar datos en la base de datos

Iniciado por andaluz, 26 Febrero 2012, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

andaluz

hola a todos, estoy realizando una aplicación en la cual quiero insertar registros en la base de datos, insertarlo me lo inserta bien, pero el iconveniente esta en que al lado de los textbox de insertar tengo un DataGrid en el cual tengo la tabla y no me muestra el registro que he insertado al pulsar el botón de insertar.

que tengo que hacer para actualizar la tabla???

aqui os dejo el codigo que he realizado:

Código (vbnet) [Seleccionar]

Private Sub btn_Insertar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Insertar.Click
       Dim nombre, dni As String
       Dim edad As Double

       For i = 0 To Usuarios2TableAdapter.GetData.Rows.Count - 1
           nombre = Usuarios2TableAdapter.GetData.Rows(i).Item(0)
           dni = Usuarios2TableAdapter.GetData.Rows(i).Item(1)
           edad = Usuarios2TableAdapter.GetData.Rows(i).Item(2)

           
           ' si el dni que quiero insertar ya esta en la tabla muestra un error
           If txt_DNI.Text = dni Then
               MessageBox.Show("El dni ya existe", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
               Limpiar_Campos(txt_Nombre, txt_DNI, txt_Edad)
               Exit Sub
           Else
               ' en caso contrario lo inserta
               Try
                   Usuarios2TableAdapter.Insert(txt_Nombre.Text, txt_DNI.Text, txt_Edad.Text)
                   Limpiar_Campos(txt_Nombre, txt_DNI, txt_Edad)
                   Exit Try
               Catch ex As Exception

               End Try

               MessageBox.Show("Usuario insertado correctamente", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
               Limpiar_Campos(txt_Nombre, txt_DNI, txt_Edad)
               Exit For
           End If
       Next

       Me.Validate()
       Me.Usuarios2BindingSource.EndEdit()
       Me.TableAdapterManager.UpdateAll(Me.Bd_pruebaDataSet1)

   End Sub


Espero que me puedan ayudar,

Saludos

seba123neo

no trabajo con datagrid, pero con actualizar o hacer un refresh al datasource que tiene asignado ese datagrid te tendria que mostrar el registro nuevo.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

andaluz

Bueno no es un datagrid creado por mi, es al arrastrar la tabla al formulario para que me muestre los datos que se han insertado en esa tabla lo que quiero que se me actualice.

Saludos

abel_c_b

Hola, tal y como dice Sebas, debes refrescar el datagrid; una función para ello es:

DataGrid1.ResetBindings()

Saludos

andaluz

#4
vale ya lo he conseguido.

lo que no comprendo es porque utilizando ese codigo, me inserta usuarios con el mismo dni, cuando me deberia de dar error al comprobar que el dni que introduzco ya existe en la base de datos.

Código (vbnet) [Seleccionar]

For i = 0 To Usuarios2TableAdapter.GetData.Rows.Count - 1
                nombre = Usuarios2TableAdapter.GetData.Rows(i).Item(0)
                dni = Usuarios2TableAdapter.GetData.Rows(i).Item(1)
                edad = Usuarios2TableAdapter.GetData.Rows(i).Item(2)
                ' si el dni que quiero insertar ya esta en la tabla muestra un error
               If txt_DNI.Text = dni Then
                   MessageBox.Show("txt_dni: " & txt_DNI.Text & "DNI: " & dni)
                   MessageBox.Show("El dni ya existe", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                   Limpiar_Campos(txt_Nombre, txt_DNI, txt_Edad)
                   Exit Sub
               Else
                   ' inserto el usuario en la base de datos
                   Usuarios2TableAdapter.Insert(txt_Nombre.Text, txt_DNI.Text, txt_Edad.Text)
               End If
Next


gracias por tu aportacion abel_c_b

Saludos

seba123neo

la logica del codigo esta mal, por ejemplo si tengo 3 DNI en la base, supongamos los numeros:

1, 2 y 3

supongamos que yo quiero ingresar el 2 (que ya existe), me deberia decir que ya existe, pero ahi en ese codigo lo que hace es recorrer secuencialmente cada uno, y cuando este recorriendo el primer registro, me va a comparar el 2 con el 1, y como no es igual me lo va a insertar de nuevo.

lo que deberias hacer es recorrer todo y una variable que diga si existe o no, y esa validacion dejarla fuera del bucle For, algo asi:

Código (vbnet) [Seleccionar]
        Dim vExiste As Boolean = False

        For i = 0 To Usuarios2TableAdapter.GetData.Rows.Count - 1
            nombre = Usuarios2TableAdapter.GetData.Rows(i).Item(0)
            dni = Usuarios2TableAdapter.GetData.Rows(i).Item(1)
            edad = Usuarios2TableAdapter.GetData.Rows(i).Item(2)
            ' si el dni que quiero insertar ya esta en la tabla muestra un error

            If txt_DNI.Text = dni Then
                vExiste = True
                Exit For
            End If

        Next

        If vExiste Then
            MessageBox.Show("txt_dni: " & txt_DNI.Text & "DNI: " & dni)
            MessageBox.Show("El dni ya existe", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Limpiar_Campos(txt_Nombre, txt_DNI, txt_Edad)
            Exit Sub
        Else
            ' inserto el usuario en la base de datos
            Usuarios2TableAdapter.Insert(txt_Nombre.Text, txt_DNI.Text, txt_Edad.Text)
        End If


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson