Visual Basic.NET - Problemas al insertar un registro.

   
Vista:

Problemas al insertar un registro.

Publicado por Miguel (56 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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo

Problemas al insertar un registro.

Tienes que revisar tu tabla clientes, seguramente hay un índice compuesto o algo por el estilo, ya que no debería darte ningún mensaje al respecto, pero si estás intentando ingresar un registro que ya existe, no te dejará pasar, justamente donde se ejecuta la consulta, es en el ExecuteNonquery, por eso que es alli que detecta la duplicidad.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar