Problemas al insertar un registro.
Publicado por Miguel (281 intervenciones) el 12/04/2016 00:08:24
Tengo un formulario en el unos TextBox y un DatagridView.. Los datos,que muestro son la unión de las tablas : Provincias, Municipios y Calles relacionadas con una tabla de clientes. Esta relación da lugar a la tabla de VerClientes.
Para visualizar los datos sobre los testBox y sobre el DatagridView utilizo la tabla de "VerClientes", pero para Insertar, Modificar y Eliminar lo hago sobre "Clientes".
Las Tablas de Provincias, Municipios y Calles me funcionan correctamente pero en el formulario de clientes en el cual utilizo las tablas de "VerClientes" y "Clientes", al havcr el Insert me pasa por todos los campos correctamente solo que cuando tiene que pasar por el ExecuteNonQuery(), me dice que no puede ya que crearía duplicidad en el indice, pero curiosamente dicho indice no existe en la tabla.
He realizado este programa con una programación diferente, pero al final me quedo clavado en la misma operación.
Este es el código que he utilizado:
Public Sub fInsert()
Try
OpenDatos()
Dim cmd As New OleDbCommand("Insert Into Clientes(IdClien,Nombre,IdProv,IdCp,IdCalle,NumPiso,Sujeto,Dni,Fijo,Movil,Fax,Correo,Notas) values (?,?,?,?,?,?,?,?,?,?,?,?,?)", cn)
cmd.Parameters.Add("@IdClien", OleDbType.Integer).Value = PtClientes.IdClien
cmd.Parameters.Add("@Nombre", OleDbType.VarChar).Value = PtClientes.Nombre
cmd.Parameters.Add("@IdProv", OleDbType.VarChar).Value = PtClientes.IdProv
cmd.Parameters.Add("@IdCp", OleDbType.Integer).Value = PtClientes.IdCp
cmd.Parameters.Add("@IdCalle", OleDbType.Integer).Value = PtClientes.IdCalle
cmd.Parameters.Add("@NumPiso", OleDbType.VarChar).Value = PtClientes.NumPiso
cmd.Parameters.Add("@Sujeto", OleDbType.VarChar).Value = PtClientes.Sujeto
cmd.Parameters.Add("@Dni", OleDbType.VarChar).Value = PtClientes.Dni
cmd.Parameters.Add("@Fijo", OleDbType.VarChar).Value = PtClientes.Fijo
cmd.Parameters.Add("@Movil", OleDbType.VarChar).Value = PtClientes.Movil
cmd.Parameters.Add("@Fax", OleDbType.VarChar).Value = PtClientes.Fax
cmd.Parameters.Add("@Correo", OleDbType.VarChar).Value = PtClientes.Correo
cmd.Parameters.Add("@Notas", OleDbType.VarChar).Value = PtClientes.Notas
cmd.ExecuteNonQuery()
MsgBox("Registro guardado")
CloseDatos()
Catch ex As Exception
MessageBox.Show(ex.Message, "No se pudo Insertar", MessageBoxButtons.OK, MessageBoxIcon.Error)
CloseDatos()
End Try
End Sub
Y la primera vez lo hice con este otro código:
Sub InsertarNuevo()
Try
Dim dr As DataRow
dr = ds.Tables("Clientes").NewRow
dr(0) = CInt(Me.txtIdClien.Text)
dr(1) = CStr(Me.txtNombre.Text)
dr(2) = CStr(Me.txtIdProv.Text)
dr(3) = CInt(Me.txtIdCp.Text)
dr(4) = CInt(Me.txtIdCalle.Text)
dr(5) = "" & CStr(Me.txtNumPiso.Text)
If Len("" & CStr(Me.txtSujeto.Text)) > 0 Then
dr(6) = "" & CStr(Me.txtSujeto.Text)
End If
dr(7) = "" & CStr(Me.txtDni.Text)
dr(8) = "" & CStr(Me.txtFijo.Text)
dr(9) = "" & CStr(Me.txtMovil.Text)
dr(10) = "" & CStr(Me.txtFax.Text)
dr(11) = "" & CStr(Me.txtCorreo.Text)
dr(12) = "" & CStr(Me.txtNotas.Text)
ds.Tables("Clientes").Rows.Add(dr)
da.Update(ds, "Clientes")
Catch oExcep As Exception
Console.WriteLine("StackTrace: {0}", oExcep.StackTrace)
End Try
End Sub
No se si necesito hacer alguna aclaración dentro del programa para que reconozca el cambio de tablas. Yo consideraba que al tener el nombre de la tabla en el "Insert" era suficiente.
Espero haber dado una visión clara del problema y haber si alguien puede ayudarme a encontrar el fallo que tengo.
Un saludo y gracias.
Para visualizar los datos sobre los testBox y sobre el DatagridView utilizo la tabla de "VerClientes", pero para Insertar, Modificar y Eliminar lo hago sobre "Clientes".
Las Tablas de Provincias, Municipios y Calles me funcionan correctamente pero en el formulario de clientes en el cual utilizo las tablas de "VerClientes" y "Clientes", al havcr el Insert me pasa por todos los campos correctamente solo que cuando tiene que pasar por el ExecuteNonQuery(), me dice que no puede ya que crearía duplicidad en el indice, pero curiosamente dicho indice no existe en la tabla.
He realizado este programa con una programación diferente, pero al final me quedo clavado en la misma operación.
Este es el código que he utilizado:
Public Sub fInsert()
Try
OpenDatos()
Dim cmd As New OleDbCommand("Insert Into Clientes(IdClien,Nombre,IdProv,IdCp,IdCalle,NumPiso,Sujeto,Dni,Fijo,Movil,Fax,Correo,Notas) values (?,?,?,?,?,?,?,?,?,?,?,?,?)", cn)
cmd.Parameters.Add("@IdClien", OleDbType.Integer).Value = PtClientes.IdClien
cmd.Parameters.Add("@Nombre", OleDbType.VarChar).Value = PtClientes.Nombre
cmd.Parameters.Add("@IdProv", OleDbType.VarChar).Value = PtClientes.IdProv
cmd.Parameters.Add("@IdCp", OleDbType.Integer).Value = PtClientes.IdCp
cmd.Parameters.Add("@IdCalle", OleDbType.Integer).Value = PtClientes.IdCalle
cmd.Parameters.Add("@NumPiso", OleDbType.VarChar).Value = PtClientes.NumPiso
cmd.Parameters.Add("@Sujeto", OleDbType.VarChar).Value = PtClientes.Sujeto
cmd.Parameters.Add("@Dni", OleDbType.VarChar).Value = PtClientes.Dni
cmd.Parameters.Add("@Fijo", OleDbType.VarChar).Value = PtClientes.Fijo
cmd.Parameters.Add("@Movil", OleDbType.VarChar).Value = PtClientes.Movil
cmd.Parameters.Add("@Fax", OleDbType.VarChar).Value = PtClientes.Fax
cmd.Parameters.Add("@Correo", OleDbType.VarChar).Value = PtClientes.Correo
cmd.Parameters.Add("@Notas", OleDbType.VarChar).Value = PtClientes.Notas
cmd.ExecuteNonQuery()
MsgBox("Registro guardado")
CloseDatos()
Catch ex As Exception
MessageBox.Show(ex.Message, "No se pudo Insertar", MessageBoxButtons.OK, MessageBoxIcon.Error)
CloseDatos()
End Try
End Sub
Y la primera vez lo hice con este otro código:
Sub InsertarNuevo()
Try
Dim dr As DataRow
dr = ds.Tables("Clientes").NewRow
dr(0) = CInt(Me.txtIdClien.Text)
dr(1) = CStr(Me.txtNombre.Text)
dr(2) = CStr(Me.txtIdProv.Text)
dr(3) = CInt(Me.txtIdCp.Text)
dr(4) = CInt(Me.txtIdCalle.Text)
dr(5) = "" & CStr(Me.txtNumPiso.Text)
If Len("" & CStr(Me.txtSujeto.Text)) > 0 Then
dr(6) = "" & CStr(Me.txtSujeto.Text)
End If
dr(7) = "" & CStr(Me.txtDni.Text)
dr(8) = "" & CStr(Me.txtFijo.Text)
dr(9) = "" & CStr(Me.txtMovil.Text)
dr(10) = "" & CStr(Me.txtFax.Text)
dr(11) = "" & CStr(Me.txtCorreo.Text)
dr(12) = "" & CStr(Me.txtNotas.Text)
ds.Tables("Clientes").Rows.Add(dr)
da.Update(ds, "Clientes")
Catch oExcep As Exception
Console.WriteLine("StackTrace: {0}", oExcep.StackTrace)
End Try
End Sub
No se si necesito hacer alguna aclaración dentro del programa para que reconozca el cambio de tablas. Yo consideraba que al tener el nombre de la tabla en el "Insert" era suficiente.
Espero haber dado una visión clara del problema y haber si alguien puede ayudarme a encontrar el fallo que tengo.
Un saludo y gracias.
Valora esta pregunta


0