SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => VB .NET => Mensaje iniciado por: datawox en Viernes 23 de Abril de 2010, 16:21
-
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
-
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);
-
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
-
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....
-
La verdad es que he probado muchas cosas pero no doy con lo correcto....
-
'###################################################
'###################################################
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.
-
De nada, me alegra mucho
-
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