SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => VB .NET => Mensaje iniciado por: pirlespi en Jueves 1 de Agosto de 2013, 13:42
-
Muy buenas,
De nuevo me encuentro con un problema con los datagrid.
He creado un segundo form que recupera los datos de una tabla en Access y los filtra en base a un textbox del formulario principal. También tengo unos textbox que al rellenarlos crean un nuevo registro en el datagrid junto a los recuperados de la BBDD.
El problema es que, cuando lo cierro, los datos no se guardan en la tabla de access, quedando solo los que ya existian.
¿alguien podría indicarme como realizar esto?
Este es el código que tengo hasta ahora:
Public Class Form2
Dim conexion As OleDb.OleDbConnection
Dim MiDt As New DataTable
Dim BdS As Windows.Forms.BindingSource
Dim Scon As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=BBDD.mdb"
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
conexion = New OleDb.OleDbConnection(Scon)
conexion.Open()
Try
Dim MiDa As New OleDbDataAdapter("SELECT siniestro, fecha, obs FROM evolutivo WHERE siniestro = '" & Form1.NumeroTextBox.Text & "'", conexion)
MiDt.Clear()
MiDa.Fill(MiDt)
BdS = New BindingSource
BdS.DataSource = MiDt
Me.DataGridView1.DataSource = BdS.DataSource
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dt As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim row As DataRow = dt.NewRow()
'asignas los campos
dt.Rows.Add(Form1.NumeroTextBox.Text, DateTimePicker1.Text, TextBox2.Text)
End Sub
End Class
He intentado añadir al evento Button1_Click lo siguiente:
With MiDa
.InsertCommand = New System.Data.OleDb.OleDbCommand
.InsertCommand.Connection = conexion
.InsertCommand.CommandText = "INSERT INTO evolutivo(siniestro,fecha,obs) VALUES (@siniestro,@fecha,@obs)"
End With
Me.MiDa.Update(CType(Me.MiDt, DataTable))
Pero me al ejecutarlo me salta el siguiente error: "No se han especificado valores para algunos de los parámetros requeridos."
Muchas gracias!
-
Hola Pirlespi: Antes que nada quiero aclararte que no es mi intención pedirte que cambies el código de tu programa, quiero darte ésta alternativa que he utilizado y me ha funcionado:
Yo también trabajo con Acces y le creo una conexión ODBC, en el windowsform creo un objeto dataset con todas las tablas con las que trabajaré, creo un objeto BindingSource y automáticamente el Visual Basic me crea el objeto TableAdapter y por último creo el datagridview o el Listview para mostrar los datos, son estos los objetos necesarios para manejar datos desde cualquier tipo de base de datos.
Cuando quiero ingresar datos en la base de datos utilizo el siguiente código:
Private Sub INGRESAR_DATOS()
Dim nuevafilaClave As DataRow = Me.DSHistorias.Tables("HISTORIAS").NewRow
nuevafilaClave("Fecha_Historia") = Me.txtFechaH.Text
nuevafilaClave("Nombre") = Me.txtNombresH.Text
nuevafilaClave("Edad") = Me.txtEdadH.Text
nuevafilaClave("Sexo") = Me.txtSexoH.Text
nuevafilaClave("Direccion") = Me.txtDireccionH.Text
nuevafilaClave("Telefono") = Me.txtTelfHab.Text
nuevafilaClave("Celular") = Me.txtTelfCel.Text
nuevafilaClave("Referencia") = Me.txtReferido.Text
nuevafilaClave("Motivo") = Me.txtMotivoConsulta.Text
nuevafilaClave("Antecedente") = Me.txtAntecedentes.Text
nuevafilaClave("Tratamientos") = Me.txtTratamientoMed.Text
nuevafilaClave("Alergia") = Me.txtAlergia.Text
nuevafilaClave("Habitos") = Me.txtHabitos.Text
Me.DSHistorias.Tables("HISTORIAS").Rows.Add(nuevafilaClave)
Me.HistoriasTableAdapter.Update(Me.DSHistorias.Tables("HISTORIAS"))
End Sub
DSHistorias es el dataset que contiene la tabla HISTORIAS
Yo estuve varios días tratando de averiguar cómo podía ingresar y guardar los datos en la base de datos y fue difícil conseguir ayuda en la web, sólo en los foros pudieron ayudarme, ni siquiera la ayuda de Microsoft o la del Visual Studio tienen la información exacta.
Espero que te sirva de algo
-
Muy buenas Jose Alberto,
Te agradezco mucho tu post, aunque finalmente no he usado el código que me pasabas, me ha servido para "caer del burro".
Lo que he hecho ha sido poner un INSERT y arreglado.
Un saludo y gracias!
Try
conexion2 = New OleDb.OleDbConnection(Scon2)
conexion2.Open()
cmd = New OleDb.OleDbCommand("INSERT INTO evolutivo (siniestro, fecha, obs) values
('" + FormPrincipal.NumeroTextBox.Text + "', '" + DateTimePicker1.Text + "', '" + TextBox2.Text + "')", conexion2)
cmd.ExecuteNonQuery()