• Martes 20 de Agosto de 2019, 21:09

Autor Tema:  VB.NET + ACCESS Como Modificar un Registro  (Leído 14876 veces)

datawox

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
VB.NET + ACCESS Como Modificar un Registro
« en: Viernes 23 de Abril de 2010, 16:21 »
0
Hola a todos!
Mi problema es el siguiente: Tengo un Form el cual lo abro con los datos de un registro que quiero modificar.
Pero tengo un código que lo unico que hace es añadirme otro registro mas...en vez de modificar el ó los campos que quiero.

El código es:

'====================================================================================
'====================================================================================

Try
            'Crear la Tabla
            Dim tablaVales As String = "SELECT * FROM Vales WHERE Id=" & txtId.Text


            ' Crear un nuevo objeto del tipo DataAdapter
            Using da = New OleDbDataAdapter(tablaVales, conexion)

                ' Crear los comandos de insertar, actualizar y eliminar
                Dim cb As New OleDbCommandBuilder(da)

                dt = New DataTable

                ' Llenar la tabla con los datos indicados
                da.Fill(dt)

                ' Crear un nuevo registro
                Dim dr As DataRow = dt.NewRow()
                ' Asignar los datos de los textbox a la fila
                'asignarDatos(dr)
                dr("Numero") = txtNumero.Text
                dr("Fecha") = dataFecha.Value
                dr("Familia") = cboFamilia.Text
                dr("Maquina") = cboDescripcion.Text
                dr("Horas") = txtHoras.Text
                dr("Precio") = txtPrecio.Text
                dr("Total") = txtTotal.Text

                ' Añadir la nueva fila a la tabla
                dt.Rows.Add(dr)
                ' Guardar físicamente los datos en la base

                da.Update(dt)

                dt.AcceptChanges()
                ' Si es el primer registro de la base,
                ' volver a leer los datos para actualizar los IDs
                If CInt("0" & dr("Id").ToString) = 0 Then
                    dt = New DataTable
                    da.Fill(dt)

                End If

                'Cerramos el Form
                Me.Close()

            End Using

'====================================================================================
'====================================================================================

He probado cambiar la consulta y poner UPDATE.. pero no me reconoce la tabla, me dice que el indice esta a cero... y no me hace nada.
Agradeceria cualquier duda.
Gracias

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: VB.NET + ACCESS Como Modificar un Registro
« Respuesta #1 en: Viernes 23 de Abril de 2010, 16:50 »
0
Cuando creas el la tabla deberias cargar los datos sin filtrar (SELECT * FROM Vales)

despues filtrarlos mediante el dataTable con el metodo Select , esto te devuelve una matriz de datarows de la cual te interesa la primera...
FilaBuscada as DataRow=Dt.Select("id="& txtid.text)(0);

a FilaBuscada es a quien le vas a volver a asignar los datos para despues atualizarlos con el dataadapter.update(FilaBuscada);
Nuestro poder está creciendo mas rápido que nuestra sabiduria

datawox

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: VB.NET + ACCESS Como Modificar un Registro
« Respuesta #2 en: Viernes 23 de Abril de 2010, 17:44 »
0
Hola!
Primero que nada Gracias... por tu contestación tan rapida.
Mira lo he hecho asi:

'==================================================
'==================================================
Try
            'Crear la Tabla
            Dim tablaVales As String = "SELECT * FROM Vales"


            ' Crear un nuevo objeto del tipo DataAdapter
            Using da = New OleDbDataAdapter(tablaVales, conexion)

                ' Crear los comandos de insertar, actualizar y eliminar
                Dim cb As New OleDbCommandBuilder(da)

                dt = New DataTable

                ' Llenar la tabla con los datos indicados
                da.Update(dt)

                ' Crear un nuevo registro
                Dim FilaBuscada As DataRow = dt.Select("Id=" & txtId.Text)(0)
                ' Asignar los datos de los textbox a la fila
                'asignarDatos(dr)
                FilaBuscada("Numero") = txtNumero.Text
                FilaBuscada("Fecha") = dataFecha.Value
                FilaBuscada("Familia") = cboFamilia.Text
                FilaBuscada("Maquina") = cboDescripcion.Text
                FilaBuscada("Horas") = txtHoras.Text
                FilaBuscada("Precio") = txtPrecio.Text
                FilaBuscada("Total") = txtTotal.Text

               
                da.Update(FilaBuscada)

                FilaBuscada.AcceptChanges()
               
                'Cerramos el Form
                Me.Close()

            End Using
'==================================
'==================================

Pero me da error... en la linea: da.Update(FilaBuscada)
Me subrraya la linea diciendo: Error de resolución de sobrecarga porque ninguna de las funciones Update a las que se tiene acceso, se puede llamar con estos argumentos.

Que es lo que tengo mal?

Gracias

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: VB.NET + ACCESS Como Modificar un Registro
« Respuesta #3 en: Viernes 23 de Abril de 2010, 19:06 »
0
Lo unico que veo es que creas el dataadapter pero no usas el metodo fill del datatable para llenar la tabla con los registros de la consulta select
osea que estas buscando datos en una tabla vacia....
Nuestro poder está creciendo mas rápido que nuestra sabiduria

datawox

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: VB.NET + ACCESS Como Modificar un Registro
« Respuesta #4 en: Martes 27 de Abril de 2010, 09:03 »
0
La verdad es que he probado muchas cosas pero no doy con lo correcto....

datawox

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: VB.NET + ACCESS Como Modificar un Registro
« Respuesta #5 en: Martes 27 de Abril de 2010, 09:24 »
0
'###################################################
'###################################################
SOLUCIONADO
'###################################################
'###################################################
Por si a alguien le sirve..


Try
            'Crear la Tabla
            Dim tablaVales As String = "SELECT * FROM Vales"

            ' Crear un nuevo objeto del tipo DataAdapter
            Using da = New OleDbDataAdapter(tablaVales, conexion)

                ' Crear los comandos de insertar, actualizar y eliminar
                Dim cb As New OleDbCommandBuilder(da)

                dt = New DataTable

                ' Llenar la tabla con los datos indicados
                da.Fill(dt)

                ' Crear un nuevo registro
                Dim Modifica As DataRow = dt.Select("Id=" & txtId.Text)(0)
                ' Asignar los datos de los textbox a la fila
                'asignarDatos(FilaBuscada)
                Modifica("Numero") = txtNumero.Text
                Modifica("Fecha") = dataFecha.Value
                Modifica("Familia") = cboFamilia.Text
                Modifica("Maquina") = cboDescripcion.Text
                Modifica("Horas") = txtHoras.Text
                Modifica("Precio") = txtPrecio.Text
                Modifica("Total") = txtTotal.Text

                ' Añadir la nueva fila a la tabla
                'dt.Rows.Add(FilaBuscada)

                ' Guardar físicamente los datos en la base
                da.Update(dt)

                dt.AcceptChanges()

                'Cerramos el Form
                Me.Close()

            End Using

        Catch ex As Exception
            MessageBox.Show("La Tabla esta Vacia, por lo que no se podran visualizar registros anteriores" & vbCrLf & _
                            ex.Message, "Conectar con la base", _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

Gracias... Me has enfocado a la solución.

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: VB.NET + ACCESS Como Modificar un Registro
« Respuesta #6 en: Martes 27 de Abril de 2010, 15:31 »
0
De nada, me alegra mucho
Nuestro poder está creciendo mas rápido que nuestra sabiduria

afviloria

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re:VB.NET + ACCESS Como Modificar un Registro
« Respuesta #7 en: Viernes 28 de Febrero de 2014, 17:16 »
0
Saludos, Por favor alguien q me ayude. He seguido el hilo del foro. Realicé tal cual. Me Form muestra el cambio pero no se almacena an la tabla. Mi codigo es:
=============================================================================================================================================
ublic Class FrmBuscarAlumno
    Dim cnn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\BD.mdb;Persist Security Info=True;Jet OLEDB:Database Password=195019760339")
    Dim comandos As New OleDb.OleDbCommand
    Dim dt As New DataTable
    Dim dt2 As New DataTable
    Dim dt3 As New DataTable
    Dim dt4 As New DataTable
    Dim da As New OleDbDataAdapter("SELECT * FROM Alumnos", cnn)
    Dim da2 As New OleDbDataAdapter("SELECT * FROM Cursos", cnn)
    Dim da3 As New OleDbDataAdapter("SELECT * FROM Tipos", cnn)
    Dim da4 As New OleDbDataAdapter("SELECT * FROM Estados", cnn)
    Dim ds As New DataSet
    Dim ds2 As New DataSet
    Dim ds3 As New DataSet
    Dim ds4 As New DataSet
=============================================================================================================================================


    Private Sub CmdGNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdGNuevo.Click
        Try
            'Crear la Tabla
            Dim TablaAlumnos As String = "SELECT * FROM Alumnos"

            ' Crear un nuevo objeto del tipo DataAdapter
            Using da = New OleDbDataAdapter(TablaAlumnos, cnn)

                ' Crear los comandos de insertar, actualizar y eliminar
                Dim cb As New OleDbCommandBuilder(da)

                dt = New DataTable

                ' Llenar la tabla con los datos indicados
                da.Fill(dt)

                ' Crear un nuevo registro
                Dim Modifica As DataRow = dt.Select("CodAlumno=" & CodAlumnoTextBox.Text)(0)
                ' Asignar los datos de los textbox a la fila
                'asignarDatos(FilaBuscada)
                Modifica("Nombres") = NombresTextBox.Text
                Modifica("Apellidos") = ApellidosTextBox.Text
                Modifica("Direccion") = DireccionTextBox.Text
                Modifica("Telefono") = TelefonoTextBox.Text
                Modifica("CodCurso") = CodCursoTextBox.Text
                Modifica("Foto") = txtfoto.Text
                Modifica("CodTipo") = CodTipoTextBox.Text
                Modifica("CodEstado") = CodEstadoTextBox.Text
                Modifica("Acudiente") = AcudienteTextBox.Text


                ' Añadir la nueva fila a la tabla
                'dt.Rows.Add(FilaBuscada)

                ' Guardar físicamente los datos en la base
                da.Update(dt)
                dt.AcceptChanges()
                cnn.Close()                 'Cerramos el Form
                'Me.Close()

            End Using

        Catch ex As Exception
            MessageBox.Show("La Tabla esta Vacia, por lo que no se podran visualizar registros anteriores" & vbCrLf & _
                            ex.Message, "Conectar con la base", _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
End Class