none
Nros de Cedula Duplicados en Datagridview

    Pregunta

  • Buenos dias, tengo un proyecto sencillo que consiste en agregar ciertos datos, para agregar estos datos utilice access y la consulta Insertar para que me aparezca en un Datagridview, los datos se agregan y aparecen en el Datagridview, pero quisiera saber como evito que se introduzca un campo repetido, especificamente el campo Cedula que en access es el campo clave, para que el programa no de error.

    lei que haciendo un barrido por  un barrido por cada celda de la columna en cuestion del datagridview, pero no he encontrado hacerlo funcionar, agradeceria toda la ayuda que puedan brindarme.

    viernes, 14 de septiembre de 2018 9:48

Respuestas

  • Hola amigo buenas tardes muchas gracias por responderme de verdad necesito hacer ese programa y no consigo hacerlo funcionar, me explico mejor tengo un Form donde tengo una serie de Textbox mediante lo cuales agrego la informacion y al hacer click en el boton agregar me aparecen automaticamente en el datagridview que tambien lo tengo en el mismo Form hasta aqui todo "bien".

    el problema esta al momento de agregar el campo Cedula igual a dos usuarios me detecta que no puede haber usuarios duplicados porque este campo lo tengo en access como el campo clave, lo que quiero es que busque en el datagridview si la cedula existe y si existe diga que ya el usuario esta registrado, sino agregue al usuario

    estoy trabajando con vb 2008 y access mediante consultas

      'CONSULTA INSERTAR QUE PERMITE INSERTAR TODOS LOS DATOS EN EL FORMULARIO
                Me.Datos_Personales_HabitantesTableAdapter.INSERTAR(NombresTextBox.Text, ApellidosTextBox.Text, CedulaTextBox.Text, Fecha_de_NacimientoTextBox.Text, SexoComboBox1.Text, Estado_CivilComboBox2.Text, DirecciónTextBox.Text, Teléfono_HabitaciónTextBox.Text, Teléfono_CelularTextBox.Text, NivelInstruccionComboBox3.Text, Profesión___OficioTextBox.Text, ActualTrabajaComboBox4.Text, ClasificacionIngresoComboBox5.Text, Ingreso_MensualTextBox.Text)
                'ESTA LINEA DE CODIGO PERMITE ACTUALIZAR LOS DATOS INGRESADOS EN EL FORMULARIO
                Me.Datos_Personales_HabitantesTableAdapter.Fill(Me.Base_de_Datos_MalvinasDataSet.Datos_Personales_Habitantes)
                MsgBox("Registro de Habitante Exitoso", vbInformation, "Registro de Habitante")
                Me.Hide()
                Form2.Show()

    este es el codigo de la consulta Insertar, si puedes ayudarme te lo agradeceria mucho amigo

    viernes, 14 de septiembre de 2018 16:52
  • Hola:
    Este es un ejemplo para Consultar,Insertar y Modificar registros de una tabla de Access
    En un Form como el de la imagen

    Copia y pega el sigiente código

    Option Strict On
    Option Explicit On
    Imports System.Data.OleDb
    Public Class FrmDatos
        Private msQuery As String
        'Variable para controlar si hay cambios
        Private mbSwCambio As Boolean
        'Variable para controlar si se ha pulsado el boton Nuevo
        Private mbNuevo As Boolean
        Private msCadenaACCESS As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\prueba.accdb"
        Private Sub FrmDatos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            msQuery = "Select * From Datos Where 1=0"
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            ' estilo para la cabecera
            Dim styCabecera As DataGridViewCellStyle
            styCabecera = New DataGridViewCellStyle()
            styCabecera.BackColor = Color.LightBlue
            styCabecera.ForeColor = Color.DarkOliveGreen
            styCabecera.Font = New Font("Bradley Hand ITC", 10, FontStyle.Bold)
            styCabecera.Alignment = DataGridViewContentAlignment.BottomCenter
            Me.dgrDatos.ColumnHeadersDefaultCellStyle = styCabecera
            ' estilo principal para todas las celdas
            Dim styEstilo As DataGridViewCellStyle
            styEstilo = New DataGridViewCellStyle()
            styEstilo.BackColor = Color.LightYellow
            styEstilo.ForeColor = Color.DarkViolet
            styEstilo.Font = New Font("Arial", 10, FontStyle.Bold)
            styEstilo.Alignment = DataGridViewContentAlignment.TopCenter
            styEstilo.NullValue = "VALOR NULO"
            styEstilo.SelectionBackColor = Color.DarkGreen
            styEstilo.SelectionForeColor = Color.LightSkyBlue
            styEstilo.WrapMode = DataGridViewTriState.[True]
            Me.dgrDatos.DefaultCellStyle = styEstilo
            ' estilo para las filas alternas
            Dim styAlterno As DataGridViewCellStyle
            styAlterno = New DataGridViewCellStyle()
            styAlterno.BackColor = Color.LightGray
            styAlterno.ForeColor = Color.BlueViolet
            styAlterno.Font = New Font("Courier New", 10, FontStyle.Bold)
            styAlterno.NullValue = "VALOR NULO"
            Me.dgrDatos.AlternatingRowsDefaultCellStyle = styAlterno
            Me.WindowState = FormWindowState.Maximized
        End Sub
        Private Sub lP_Salir()
            Me.AutoValidate = Windows.Forms.AutoValidate.Disable
            Me.Close()
        End Sub
        Private Sub lP_Buscar()
            Dim lbHayFiltro As Boolean = False
            msQuery = "Select * From datos"
            If Me.txtBCedula.Text <> "" Then
                lbHayFiltro = True
                msQuery &= " Where cedula=" & Me.txtBCedula.Text
            End If
            If Me.txtBNombre.Text <> "" Then
                If lbHayFiltro = True Then
                    msQuery &= " And "
                Else
                    msQuery &= " Where "
                End If
                msQuery &= "nombre Like '%" & Me.txtBNombre.Text & "%'"
            End If
            'Actualizamos el DataGrid con el DataTable
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.ToolStripButtonBuscar.Enabled = False
            Me.ToolStripButtonNuevo.Enabled = False
            Me.ToolStripButtonNBusqueda.Enabled = True
        End Sub
        Private Sub lP_NBusqueda()
            msQuery = "Select * From Datos Where 1=0"
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.txtBCedula.Text = ""
            Me.txtBNombre.Text = ""
            Me.ToolStripButtonBuscar.Enabled = True
            Me.ToolStripButtonNuevo.Enabled = True
            Me.ToolStripButtonNBusqueda.Enabled = False
            Me.txtBCedula.Focus()
        End Sub
        Private Sub lP_Nuevo()
            lP_HabilitaDetalle()
            lP_QuitarHandle()
            Me.txtCedula.Enabled = True
            Me.txtCedula.Text = ""
            Me.dtpFNacimiento.Value = Date.Today
            Me.txtSexo.Text = ""
            Me.txtNombre.Text = ""
            Me.txtApellido.Text = ""
            Me.txtECivil.Text = ""
            Me.txtDireccion.Text = ""
            Me.txtTHabilitacion.Text = ""
            Me.txtTCelular.Text = ""
            Me.txtNInstruccion.Text = ""
            Me.txtPOficio.Text = ""
            Me.txtTrabaja.Text = ""
            Me.txtCIngreso.Text = ""
            Me.txtIMensual.Text = ""
            Me.txtCedula.Focus()
            mbNuevo = True
            mbSwCambio = False
            lP_PonerHandle()
            Me.ErrorProviderDatos.Clear()
        End Sub
        Private Sub dgrDatos_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgrDatos.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            lP_HabilitaDetalle()
            lP_QuitarHandle()
            Me.txtCedula.Enabled = False
            Dim loFila As DataGridViewRow = Me.dgrDatos.CurrentRow()
            'Situamos en las cajas de texto del frame de detalle los contenidos de la fila seleccionada en el grid
            Me.txtCedula.Text = loFila.Cells("cedula").Value.ToString()
            Me.dtpFNacimiento.Value = CDate(loFila.Cells("f_nacimiento").Value)
            Me.txtSexo.Text = loFila.Cells("sexo").Value.ToString()
            Me.txtNombre.Text = loFila.Cells("nombre").Value.ToString()
            Me.txtApellido.Text = loFila.Cells("apellido").Value.ToString()
            Me.txtECivil.Text = loFila.Cells("estado_civil").Value.ToString()
            Me.txtDireccion.Text = loFila.Cells("direccion").Value.ToString()
            Me.txtTHabilitacion.Text = loFila.Cells("telefono_habilitacion").Value.ToString()
            Me.txtTCelular.Text = loFila.Cells("telefono_celular").Value.ToString()
            Me.txtNInstruccion.Text = loFila.Cells("nivel_instruccion").Value.ToString()
            Me.txtPOficio.Text = loFila.Cells("profesion_oficio").Value.ToString()
            Me.txtTrabaja.Text = loFila.Cells("actualmente_trabaja").Value.ToString()
            Me.txtCIngreso.Text = loFila.Cells("clasificacion_ingreso").Value.ToString()
            Me.txtIMensual.Text = loFila.Cells("ingreso_mensual").Value.ToString()
            Me.dtpFNacimiento.Focus()
            mbNuevo = False
            mbSwCambio = False
            lP_PonerHandle()
            Me.ErrorProviderDatos.Clear()
        End Sub
        Private Sub lP_Aceptar()
            If mbSwCambio = True Then
                mbSwCambio = False
            Else
                MessageBox.Show("No se han realizado cambios", "lP_Aceptar", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
                Return
            End If
            If Me.ValidateChildren = False Then
                MessageBox.Show("Datos incompletos", "lP_Aceptar", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Return
            End If
            Me.Cursor = Cursors.WaitCursor
            Dim lsQuery As String
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    If mbNuevo = True Then
                        lsQuery = "Insert into datos (cedula, nombre, apellido, f_nacimiento, sexo, estado_civil, direccion, telefono_habilitacion, telefono_celular, nivel_instruccion, profesion_oficio, actualmente_trabaja, clasificacion_ingreso, ingreso_mensual) Values (@Cedula, @Nombre, @Apellido, @FNacimiento, @Sexo, @ECivil, @Direccion, @THabilitacion, @TCelular, @NInstruccion, @POficio, @ATrabaja, @CIngreso, @IMensual)"
                    Else
                        Dim loFila As DataGridViewRow = Me.dgrDatos.CurrentRow()
                        lsQuery = "Update datos Set nombre=@Nombre, apellido=@Apellido, f_nacimiento=@FNacimiento, sexo=@Sexo, estado_civil=@ECivil, direccion=@Direccion, telefono_habilitacion=@THabilitacion, telefono_celular=@TCelular, nivel_instruccion=@NInstruccion, profesion_oficio=@POficio, actualmente_trabaja=@ATrabaja, clasificacion_ingreso=@CIngreso, ingreso_mensual=@IMensual Where cedula=" & loFila.Cells("cedula").Value.ToString()
                    End If
                    ' crear comando
                    Using loComando As New OleDbCommand(lsQuery, loConexion)
                        ' añadir parametros
                        If mbNuevo = True Then
                            loComando.Parameters.Add(New OleDbParameter("@cedula", Me.txtCedula.Text))
                        End If
                        loComando.Parameters.Add(New OleDbParameter("@Nombre", Me.txtNombre.Text))
                        loComando.Parameters.Add(New OleDbParameter("@Apellido", Me.txtApellido.Text))
                        loComando.Parameters.Add(New OleDbParameter("@FNacimiento", Me.dtpFNacimiento.Value))
                        loComando.Parameters.Add(New OleDbParameter("@Sexo", Me.txtSexo.Text))
                        loComando.Parameters.Add(New OleDbParameter("@ECivil", Me.txtECivil.Text))
                        loComando.Parameters.Add(New OleDbParameter("@Direccion", Me.txtDireccion.Text))
                        loComando.Parameters.Add(New OleDbParameter("@THabilitacion", Me.txtTHabilitacion.Text))
                        loComando.Parameters.Add(New OleDbParameter("@TCelular", Me.txtTCelular.Text))
                        loComando.Parameters.Add(New OleDbParameter("@NInstruccion", Me.txtNInstruccion.Text))
                        loComando.Parameters.Add(New OleDbParameter("@POficio", Me.txtPOficio.Text))
                        loComando.Parameters.Add(New OleDbParameter("@ATrabaja", Me.txtTrabaja.Text))
                        loComando.Parameters.Add(New OleDbParameter("@CIngreso", Me.txtCIngreso.Text))
                        loComando.Parameters.Add(New OleDbParameter("@IMensual", Me.txtIMensual.Text))
                        loConexion.Open()   ' abrir conexión
                        loComando.ExecuteNonQuery()
                    End Using
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "lP_Aceptar", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            lP_HabilitaDatos()
            Me.Cursor = Cursors.Default
        End Sub
        Private Sub lP_Cancelar()
            lP_HabilitaDatos()
        End Sub
        Private Sub txtCedula_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtCedula.Validating
            If Me.txtCedula.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProviderDatos.SetError(Me.txtCedula, "Introduzca la Cedula")
            Else
                Me.ErrorProviderDatos.SetError(Me.txtCedula, Nothing)
            End If
        End Sub
        Private Sub lP_Cambio(ByVal sender As Object, ByVal e As System.EventArgs)
            mbSwCambio = True
        End Sub
        Private Sub lP_PonerHandle()
            AddHandler txtCedula.TextChanged, AddressOf lP_Cambio
            AddHandler txtNombre.TextChanged, AddressOf lP_Cambio
            AddHandler txtApellido.TextChanged, AddressOf lP_Cambio
            AddHandler txtSexo.TextChanged, AddressOf lP_Cambio
            AddHandler txtECivil.TextChanged, AddressOf lP_Cambio
            AddHandler txtDireccion.TextChanged, AddressOf lP_Cambio
            AddHandler txtTHabilitacion.TextChanged, AddressOf lP_Cambio
            AddHandler txtTCelular.TextChanged, AddressOf lP_Cambio
            AddHandler txtNInstruccion.TextChanged, AddressOf lP_Cambio
            AddHandler txtPOficio.TextChanged, AddressOf lP_Cambio
            AddHandler txtTrabaja.TextChanged, AddressOf lP_Cambio
            AddHandler txtCIngreso.TextChanged, AddressOf lP_Cambio
            AddHandler txtIMensual.TextChanged, AddressOf lP_Cambio
            AddHandler dtpFNacimiento.ValueChanged, AddressOf lP_Cambio
        End Sub
        Private Sub lP_QuitarHandle()
            RemoveHandler txtCedula.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtNombre.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtApellido.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtSexo.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtECivil.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtDireccion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtTHabilitacion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtTCelular.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtNInstruccion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtPOficio.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtTrabaja.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtCIngreso.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtIMensual.TextChanged, AddressOf lP_Cambio
            RemoveHandler dtpFNacimiento.ValueChanged, AddressOf lP_Cambio
        End Sub
        Private Sub ToolStripBotones_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ToolStripBotones.ItemClicked
            lP_Botones(CType(e.ClickedItem, ToolStripItem).Text)
        End Sub
        Private Sub lP_Botones(ByVal vsMenuItemText As String)
            Select Case (vsMenuItemText)
                Case "&Aceptar"
                    lP_Aceptar()
                Case "&Cancelar"
                    lP_Cancelar()
            End Select
        End Sub
        Private Sub ToolStripBusqueda_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ToolStripBusqueda.ItemClicked
            lP_Botones1(CType(e.ClickedItem, ToolStripItem).Text)
        End Sub
        Private Sub lP_Botones1(ByVal vsMenuItemText As String)
            Select Case (vsMenuItemText)
                Case "&Nuevo"
                    lP_Nuevo()
                Case "&Buscar"
                    lP_Buscar()
                Case "&NBusqueda"
                    lP_NBusqueda()
                Case "&Salir"
                    lP_Salir()
            End Select
        End Sub
        Private Sub lP_HabilitaDatos()
            'Se desactiva el Frame de detalles y nos situamos en el Frame principal
            Me.grbDetalle.Visible = False
            Me.grbDatos.Enabled = True
            Me.grbBusqueda.Enabled = True
        End Sub
        Private Sub lP_HabilitaDetalle()
            'Se desactiva el Frame busqueda y nos situamos en el Frame de detalles
            Me.grbDetalle.Visible = True
            Me.grbDatos.Enabled = False
            Me.grbBusqueda.Enabled = False
        End Sub
    End Class
    La base de datos se llama prueba y la tabla Datos con la siguiente estructura

    P.D.
    Procura no utilizar espacios ni acentos para los nombres de los campos y tablas
    Un saludo desde Bilbo
    Carlos


    domingo, 16 de septiembre de 2018 3:50

Todas las respuestas

  • antes de insertar deberias hacer el select para validar si el campo ya existe.. es algo bastante sencillo si tienes problemas puedes especificar en que lenguaje estas trabajando para orientarte mas.

    Saludos 

    CR

    viernes, 14 de septiembre de 2018 12:39
  • Hola amigo buenas tardes muchas gracias por responderme de verdad necesito hacer ese programa y no consigo hacerlo funcionar, me explico mejor tengo un Form donde tengo una serie de Textbox mediante lo cuales agrego la informacion y al hacer click en el boton agregar me aparecen automaticamente en el datagridview que tambien lo tengo en el mismo Form hasta aqui todo "bien".

    el problema esta al momento de agregar el campo Cedula igual a dos usuarios me detecta que no puede haber usuarios duplicados porque este campo lo tengo en access como el campo clave, lo que quiero es que busque en el datagridview si la cedula existe y si existe diga que ya el usuario esta registrado, sino agregue al usuario

    estoy trabajando con vb 2008 y access mediante consultas

      'CONSULTA INSERTAR QUE PERMITE INSERTAR TODOS LOS DATOS EN EL FORMULARIO
                Me.Datos_Personales_HabitantesTableAdapter.INSERTAR(NombresTextBox.Text, ApellidosTextBox.Text, CedulaTextBox.Text, Fecha_de_NacimientoTextBox.Text, SexoComboBox1.Text, Estado_CivilComboBox2.Text, DirecciónTextBox.Text, Teléfono_HabitaciónTextBox.Text, Teléfono_CelularTextBox.Text, NivelInstruccionComboBox3.Text, Profesión___OficioTextBox.Text, ActualTrabajaComboBox4.Text, ClasificacionIngresoComboBox5.Text, Ingreso_MensualTextBox.Text)
                'ESTA LINEA DE CODIGO PERMITE ACTUALIZAR LOS DATOS INGRESADOS EN EL FORMULARIO
                Me.Datos_Personales_HabitantesTableAdapter.Fill(Me.Base_de_Datos_MalvinasDataSet.Datos_Personales_Habitantes)
                MsgBox("Registro de Habitante Exitoso", vbInformation, "Registro de Habitante")
                Me.Hide()
                Form2.Show()

    este es el codigo de la consulta Insertar, si puedes ayudarme te lo agradeceria mucho amigo

    viernes, 14 de septiembre de 2018 16:52
  • antes de insertar deberias hacer el select para validar si el campo ya existe.. es algo bastante sencillo si tienes problemas puedes especificar en que lenguaje estas trabajando para orientarte mas.

    Saludos 

    CR

    Hola amigo buenas tardes muchas gracias por responderme de verdad necesito hacer ese programa y no consigo hacerlo funcionar, me explico mejor tengo un Form donde tengo una serie de Textbox mediante lo cuales agrego la informacion y al hacer click en el boton agregar me aparecen automaticamente en el datagridview que tambien lo tengo en el mismo Form hasta aqui todo "bien".

    el problema esta al momento de agregar el campo Cedula igual a dos usuarios me detecta que no puede haber usuarios duplicados porque este campo lo tengo en access como el campo clave, lo que quiero es que busque en el datagridview si la cedula existe y si existe diga que ya el usuario esta registrado, sino agregue al usuario

    estoy trabajando con vb 2008 y access mediante consultas

     'CONSULTA INSERTAR QUE PERMITE INSERTAR TODOS LOS DATOS EN EL FORMULARIO
                Me.Datos_Personales_HabitantesTableAdapter.INSERTAR(NombresTextBox.Text, ApellidosTextBox.Text, CedulaTextBox.Text, Fecha_de_NacimientoTextBox.Text, SexoComboBox1.Text, Estado_CivilComboBox2.Text, DirecciónTextBox.Text, Teléfono_HabitaciónTextBox.Text, Teléfono_CelularTextBox.Text, NivelInstruccionComboBox3.Text, Profesión___OficioTextBox.Text, ActualTrabajaComboBox4.Text, ClasificacionIngresoComboBox5.Text, Ingreso_MensualTextBox.Text)
                'ESTA LINEA DE CODIGO PERMITE ACTUALIZAR LOS DATOS INGRESADOS EN EL FORMULARIO
                Me.Datos_Personales_HabitantesTableAdapter.Fill(Me.Base_de_Datos_MalvinasDataSet.Datos_Personales_Habitantes)
                MsgBox("Registro de Habitante Exitoso", vbInformation, "Registro de Habitante")
                Me.Hide()
                Form2.Show()

    este es el codigo de la consulta Insertar, si puedes ayudarme te lo agradeceria mucho amigo


    viernes, 14 de septiembre de 2018 23:37
  • Hola:
    ¿Puedes poner la estructura de la tabla de access donde quieres insertar registros?
    Un saludo desde Bilbo
    Carlos

    sábado, 15 de septiembre de 2018 10:32
  • Hola Carlos gracias por responder 

    

    Te refieres a esto amigo???

    sábado, 15 de septiembre de 2018 14:18
  • Hola:
    Este es un ejemplo para Consultar,Insertar y Modificar registros de una tabla de Access
    En un Form como el de la imagen

    Copia y pega el sigiente código

    Option Strict On
    Option Explicit On
    Imports System.Data.OleDb
    Public Class FrmDatos
        Private msQuery As String
        'Variable para controlar si hay cambios
        Private mbSwCambio As Boolean
        'Variable para controlar si se ha pulsado el boton Nuevo
        Private mbNuevo As Boolean
        Private msCadenaACCESS As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\prueba.accdb"
        Private Sub FrmDatos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            msQuery = "Select * From Datos Where 1=0"
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            ' estilo para la cabecera
            Dim styCabecera As DataGridViewCellStyle
            styCabecera = New DataGridViewCellStyle()
            styCabecera.BackColor = Color.LightBlue
            styCabecera.ForeColor = Color.DarkOliveGreen
            styCabecera.Font = New Font("Bradley Hand ITC", 10, FontStyle.Bold)
            styCabecera.Alignment = DataGridViewContentAlignment.BottomCenter
            Me.dgrDatos.ColumnHeadersDefaultCellStyle = styCabecera
            ' estilo principal para todas las celdas
            Dim styEstilo As DataGridViewCellStyle
            styEstilo = New DataGridViewCellStyle()
            styEstilo.BackColor = Color.LightYellow
            styEstilo.ForeColor = Color.DarkViolet
            styEstilo.Font = New Font("Arial", 10, FontStyle.Bold)
            styEstilo.Alignment = DataGridViewContentAlignment.TopCenter
            styEstilo.NullValue = "VALOR NULO"
            styEstilo.SelectionBackColor = Color.DarkGreen
            styEstilo.SelectionForeColor = Color.LightSkyBlue
            styEstilo.WrapMode = DataGridViewTriState.[True]
            Me.dgrDatos.DefaultCellStyle = styEstilo
            ' estilo para las filas alternas
            Dim styAlterno As DataGridViewCellStyle
            styAlterno = New DataGridViewCellStyle()
            styAlterno.BackColor = Color.LightGray
            styAlterno.ForeColor = Color.BlueViolet
            styAlterno.Font = New Font("Courier New", 10, FontStyle.Bold)
            styAlterno.NullValue = "VALOR NULO"
            Me.dgrDatos.AlternatingRowsDefaultCellStyle = styAlterno
            Me.WindowState = FormWindowState.Maximized
        End Sub
        Private Sub lP_Salir()
            Me.AutoValidate = Windows.Forms.AutoValidate.Disable
            Me.Close()
        End Sub
        Private Sub lP_Buscar()
            Dim lbHayFiltro As Boolean = False
            msQuery = "Select * From datos"
            If Me.txtBCedula.Text <> "" Then
                lbHayFiltro = True
                msQuery &= " Where cedula=" & Me.txtBCedula.Text
            End If
            If Me.txtBNombre.Text <> "" Then
                If lbHayFiltro = True Then
                    msQuery &= " And "
                Else
                    msQuery &= " Where "
                End If
                msQuery &= "nombre Like '%" & Me.txtBNombre.Text & "%'"
            End If
            'Actualizamos el DataGrid con el DataTable
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.ToolStripButtonBuscar.Enabled = False
            Me.ToolStripButtonNuevo.Enabled = False
            Me.ToolStripButtonNBusqueda.Enabled = True
        End Sub
        Private Sub lP_NBusqueda()
            msQuery = "Select * From Datos Where 1=0"
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.txtBCedula.Text = ""
            Me.txtBNombre.Text = ""
            Me.ToolStripButtonBuscar.Enabled = True
            Me.ToolStripButtonNuevo.Enabled = True
            Me.ToolStripButtonNBusqueda.Enabled = False
            Me.txtBCedula.Focus()
        End Sub
        Private Sub lP_Nuevo()
            lP_HabilitaDetalle()
            lP_QuitarHandle()
            Me.txtCedula.Enabled = True
            Me.txtCedula.Text = ""
            Me.dtpFNacimiento.Value = Date.Today
            Me.txtSexo.Text = ""
            Me.txtNombre.Text = ""
            Me.txtApellido.Text = ""
            Me.txtECivil.Text = ""
            Me.txtDireccion.Text = ""
            Me.txtTHabilitacion.Text = ""
            Me.txtTCelular.Text = ""
            Me.txtNInstruccion.Text = ""
            Me.txtPOficio.Text = ""
            Me.txtTrabaja.Text = ""
            Me.txtCIngreso.Text = ""
            Me.txtIMensual.Text = ""
            Me.txtCedula.Focus()
            mbNuevo = True
            mbSwCambio = False
            lP_PonerHandle()
            Me.ErrorProviderDatos.Clear()
        End Sub
        Private Sub dgrDatos_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgrDatos.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            lP_HabilitaDetalle()
            lP_QuitarHandle()
            Me.txtCedula.Enabled = False
            Dim loFila As DataGridViewRow = Me.dgrDatos.CurrentRow()
            'Situamos en las cajas de texto del frame de detalle los contenidos de la fila seleccionada en el grid
            Me.txtCedula.Text = loFila.Cells("cedula").Value.ToString()
            Me.dtpFNacimiento.Value = CDate(loFila.Cells("f_nacimiento").Value)
            Me.txtSexo.Text = loFila.Cells("sexo").Value.ToString()
            Me.txtNombre.Text = loFila.Cells("nombre").Value.ToString()
            Me.txtApellido.Text = loFila.Cells("apellido").Value.ToString()
            Me.txtECivil.Text = loFila.Cells("estado_civil").Value.ToString()
            Me.txtDireccion.Text = loFila.Cells("direccion").Value.ToString()
            Me.txtTHabilitacion.Text = loFila.Cells("telefono_habilitacion").Value.ToString()
            Me.txtTCelular.Text = loFila.Cells("telefono_celular").Value.ToString()
            Me.txtNInstruccion.Text = loFila.Cells("nivel_instruccion").Value.ToString()
            Me.txtPOficio.Text = loFila.Cells("profesion_oficio").Value.ToString()
            Me.txtTrabaja.Text = loFila.Cells("actualmente_trabaja").Value.ToString()
            Me.txtCIngreso.Text = loFila.Cells("clasificacion_ingreso").Value.ToString()
            Me.txtIMensual.Text = loFila.Cells("ingreso_mensual").Value.ToString()
            Me.dtpFNacimiento.Focus()
            mbNuevo = False
            mbSwCambio = False
            lP_PonerHandle()
            Me.ErrorProviderDatos.Clear()
        End Sub
        Private Sub lP_Aceptar()
            If mbSwCambio = True Then
                mbSwCambio = False
            Else
                MessageBox.Show("No se han realizado cambios", "lP_Aceptar", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
                Return
            End If
            If Me.ValidateChildren = False Then
                MessageBox.Show("Datos incompletos", "lP_Aceptar", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Return
            End If
            Me.Cursor = Cursors.WaitCursor
            Dim lsQuery As String
            Try
                Using loConexion As New OleDbConnection(msCadenaACCESS)
                    If mbNuevo = True Then
                        lsQuery = "Insert into datos (cedula, nombre, apellido, f_nacimiento, sexo, estado_civil, direccion, telefono_habilitacion, telefono_celular, nivel_instruccion, profesion_oficio, actualmente_trabaja, clasificacion_ingreso, ingreso_mensual) Values (@Cedula, @Nombre, @Apellido, @FNacimiento, @Sexo, @ECivil, @Direccion, @THabilitacion, @TCelular, @NInstruccion, @POficio, @ATrabaja, @CIngreso, @IMensual)"
                    Else
                        Dim loFila As DataGridViewRow = Me.dgrDatos.CurrentRow()
                        lsQuery = "Update datos Set nombre=@Nombre, apellido=@Apellido, f_nacimiento=@FNacimiento, sexo=@Sexo, estado_civil=@ECivil, direccion=@Direccion, telefono_habilitacion=@THabilitacion, telefono_celular=@TCelular, nivel_instruccion=@NInstruccion, profesion_oficio=@POficio, actualmente_trabaja=@ATrabaja, clasificacion_ingreso=@CIngreso, ingreso_mensual=@IMensual Where cedula=" & loFila.Cells("cedula").Value.ToString()
                    End If
                    ' crear comando
                    Using loComando As New OleDbCommand(lsQuery, loConexion)
                        ' añadir parametros
                        If mbNuevo = True Then
                            loComando.Parameters.Add(New OleDbParameter("@cedula", Me.txtCedula.Text))
                        End If
                        loComando.Parameters.Add(New OleDbParameter("@Nombre", Me.txtNombre.Text))
                        loComando.Parameters.Add(New OleDbParameter("@Apellido", Me.txtApellido.Text))
                        loComando.Parameters.Add(New OleDbParameter("@FNacimiento", Me.dtpFNacimiento.Value))
                        loComando.Parameters.Add(New OleDbParameter("@Sexo", Me.txtSexo.Text))
                        loComando.Parameters.Add(New OleDbParameter("@ECivil", Me.txtECivil.Text))
                        loComando.Parameters.Add(New OleDbParameter("@Direccion", Me.txtDireccion.Text))
                        loComando.Parameters.Add(New OleDbParameter("@THabilitacion", Me.txtTHabilitacion.Text))
                        loComando.Parameters.Add(New OleDbParameter("@TCelular", Me.txtTCelular.Text))
                        loComando.Parameters.Add(New OleDbParameter("@NInstruccion", Me.txtNInstruccion.Text))
                        loComando.Parameters.Add(New OleDbParameter("@POficio", Me.txtPOficio.Text))
                        loComando.Parameters.Add(New OleDbParameter("@ATrabaja", Me.txtTrabaja.Text))
                        loComando.Parameters.Add(New OleDbParameter("@CIngreso", Me.txtCIngreso.Text))
                        loComando.Parameters.Add(New OleDbParameter("@IMensual", Me.txtIMensual.Text))
                        loConexion.Open()   ' abrir conexión
                        loComando.ExecuteNonQuery()
                    End Using
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(msQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    Me.dgrDatos.DataSource = loDataTable
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "lP_Aceptar", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            lP_HabilitaDatos()
            Me.Cursor = Cursors.Default
        End Sub
        Private Sub lP_Cancelar()
            lP_HabilitaDatos()
        End Sub
        Private Sub txtCedula_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtCedula.Validating
            If Me.txtCedula.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProviderDatos.SetError(Me.txtCedula, "Introduzca la Cedula")
            Else
                Me.ErrorProviderDatos.SetError(Me.txtCedula, Nothing)
            End If
        End Sub
        Private Sub lP_Cambio(ByVal sender As Object, ByVal e As System.EventArgs)
            mbSwCambio = True
        End Sub
        Private Sub lP_PonerHandle()
            AddHandler txtCedula.TextChanged, AddressOf lP_Cambio
            AddHandler txtNombre.TextChanged, AddressOf lP_Cambio
            AddHandler txtApellido.TextChanged, AddressOf lP_Cambio
            AddHandler txtSexo.TextChanged, AddressOf lP_Cambio
            AddHandler txtECivil.TextChanged, AddressOf lP_Cambio
            AddHandler txtDireccion.TextChanged, AddressOf lP_Cambio
            AddHandler txtTHabilitacion.TextChanged, AddressOf lP_Cambio
            AddHandler txtTCelular.TextChanged, AddressOf lP_Cambio
            AddHandler txtNInstruccion.TextChanged, AddressOf lP_Cambio
            AddHandler txtPOficio.TextChanged, AddressOf lP_Cambio
            AddHandler txtTrabaja.TextChanged, AddressOf lP_Cambio
            AddHandler txtCIngreso.TextChanged, AddressOf lP_Cambio
            AddHandler txtIMensual.TextChanged, AddressOf lP_Cambio
            AddHandler dtpFNacimiento.ValueChanged, AddressOf lP_Cambio
        End Sub
        Private Sub lP_QuitarHandle()
            RemoveHandler txtCedula.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtNombre.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtApellido.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtSexo.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtECivil.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtDireccion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtTHabilitacion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtTCelular.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtNInstruccion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtPOficio.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtTrabaja.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtCIngreso.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtIMensual.TextChanged, AddressOf lP_Cambio
            RemoveHandler dtpFNacimiento.ValueChanged, AddressOf lP_Cambio
        End Sub
        Private Sub ToolStripBotones_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ToolStripBotones.ItemClicked
            lP_Botones(CType(e.ClickedItem, ToolStripItem).Text)
        End Sub
        Private Sub lP_Botones(ByVal vsMenuItemText As String)
            Select Case (vsMenuItemText)
                Case "&Aceptar"
                    lP_Aceptar()
                Case "&Cancelar"
                    lP_Cancelar()
            End Select
        End Sub
        Private Sub ToolStripBusqueda_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ToolStripBusqueda.ItemClicked
            lP_Botones1(CType(e.ClickedItem, ToolStripItem).Text)
        End Sub
        Private Sub lP_Botones1(ByVal vsMenuItemText As String)
            Select Case (vsMenuItemText)
                Case "&Nuevo"
                    lP_Nuevo()
                Case "&Buscar"
                    lP_Buscar()
                Case "&NBusqueda"
                    lP_NBusqueda()
                Case "&Salir"
                    lP_Salir()
            End Select
        End Sub
        Private Sub lP_HabilitaDatos()
            'Se desactiva el Frame de detalles y nos situamos en el Frame principal
            Me.grbDetalle.Visible = False
            Me.grbDatos.Enabled = True
            Me.grbBusqueda.Enabled = True
        End Sub
        Private Sub lP_HabilitaDetalle()
            'Se desactiva el Frame busqueda y nos situamos en el Frame de detalles
            Me.grbDetalle.Visible = True
            Me.grbDatos.Enabled = False
            Me.grbBusqueda.Enabled = False
        End Sub
    End Class
    La base de datos se llama prueba y la tabla Datos con la siguiente estructura

    P.D.
    Procura no utilizar espacios ni acentos para los nombres de los campos y tablas
    Un saludo desde Bilbo
    Carlos


    domingo, 16 de septiembre de 2018 3:50