elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  error al insertar en la base de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: error al insertar en la base de datos  (Leído 5,280 veces)
andaluz


Desconectado Desconectado

Mensajes: 333



Ver Perfil
error al insertar en la base de datos
« en: 25 Mayo 2012, 16:53 pm »

Hola a todos, tengo un error al insertar en la base de datos, el cual me dice "Error no especificado" y la verdad es que no consigo encontrar el fallo, os pongo el código para ver si me pueden ayudar
Código
  1. Private Sub btn_Insertar_Ventas_Clientes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Insertar_Ventas_Clientes.Click
  2.        Dim id_marc, id_emp, id_cli As Integer
  3.  
  4.        ' compruebo que ninguno de los datos de venta a cliente esta vacio
  5.        If cbb_Venta_Client_Insertar.Text = "" Or cbb_Nomb_Emp_Vent_Insertar.Text = "" Or
  6.            cbb_Apel_Emp_Vent_Insertar.Text = "" Or cbb_Marca_Artic_Vent_Insertar.Text = "" Or
  7.            cbb_Articulo_Artic_Vent_Insertar.Text = "" Or cbb_Nomb_Client_Vent_Insertar.Text = "" Or
  8.            cbb_Apel_Client_Vent_Insertar.Text = "" Then
  9.            MessageBox.Show("Alguno/s de los datos del articulo esta vacio, rellenelo", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
  10.            Exit Sub
  11.        End If
  12.  
  13.        ' consulta para asignar el Id_Marca eligiendo el nombre del proveedor a la tabla modelos
  14.        Dim dtadapterMarca As OleDbDataAdapter = New OleDbDataAdapter("SELECT Id_Marca FROM Marcas WHERE Marcas.Marca='" & cbb_Marca_Artic_Vent_Insertar.Text & "'", conexion_access)
  15.        Dim dtsMarca As New DataSet
  16.        dtadapterMarca.Fill(dtsMarca, "Marcas")
  17.        For Each Fila As DataRow In dtsMarca.Tables("Marcas").Rows
  18.            id_marc = Fila("Id_Marca")
  19.        Next
  20.  
  21.        ' consulta para asignar el Id_empleado eligiendo el empleado
  22.        'Dim id_emp As Integer
  23.        Dim dtadapterEmpleado As OleDbDataAdapter = New OleDbDataAdapter("SELECT Empleados.Id_Empleado FROM Empleados WHERE Empleados.Nombre='" & cbb_Nomb_Emp_Compra.Text & "' AND Empleados.Apellidos='" & cbb_Apel_Emp_Vent_Insertar.Text & "'", conexion_access)
  24.        Dim dtsEmpleado As New DataSet
  25.  
  26.        dtadapterEmpleado.Fill(dtsEmpleado, "Empleados")
  27.        For Each Fila As DataRow In dtsEmpleado.Tables("Empleados").Rows
  28.            id_emp = Fila("Id_Empleado")
  29.        Next
  30.  
  31.        ' consulta para asignar el Id_cliente eligiendo el nombre del cliente a la tabla ventas
  32.        Dim dtadapterCliente As OleDbDataAdapter = New OleDbDataAdapter("SELECT Id_Cliente FROM Clientes WHERE Clientes.Nombre='" & cbb_Nomb_Client_Vent_Insertar.Text & "' AND Clientes.Apellidos='" & cbb_Apel_Client_Vent_Insertar.Text & "'", conexion_access)
  33.        Dim dtsCliente As New DataSet
  34.        dtadapterCliente.Fill(dtsCliente, "Clientes")
  35.        For Each Fila As DataRow In dtsCliente.Tables("Clientes").Rows
  36.            id_cli = Fila("Id_Cliente")
  37.        Next
  38.  
  39.        ' inserto los datos en la tabla ventas
  40.        Dim CadenaSql As String = "INSERT INTO Ventas (Fecha_Venta, Pagado, Id_Stock, Id_Empleado, Id_Cliente) VALUES ('" & CDate(cbb_Venta_Client_Insertar.Text) & "'," & chk_Pagado_Venta_Insertar.Checked & "," & "(SELECT TOP 1 Stock.Id_Stock FROM Stock WHERE Stock.Id_Articulo IN (SELECT Articulos.Id_Articulos FROM Articulos WHERE Articulos.Descripcion='" & cbb_Articulo_Artic_Vent_Insertar.Text & "' AND Stock.Vendido=False))," & "(SELECT Empleados.Id_Empleado FROM Empleados WHERE Empleados.Nombre='" & cbb_Nomb_Emp_Vent_Insertar.Text & "' AND Empleados.Apellidos='" & cbb_Apel_Emp_Vent_Insertar.Text & "')," & "(SELECT Clientes.Id_Cliente FROM Clientes WHERE Clientes.Nombre='" & cbb_Nomb_Client_Vent_Insertar.Text & "' AND Clientes.Apellidos='" & cbb_Apel_Client_Vent_Insertar.Text & "'))"
  41.  
  42.        MsgBox(IdStock)
  43.        MsgBox(CadenaSql)
  44.        Dim Comando As New OleDb.OleDbCommand(CadenaSql, conexion_access)
  45.        Comando.Connection.Open()
  46.        Comando.ExecuteNonQuery()
  47.        If Mensaje = "" Then
  48.            MessageBox.Show("La venta se ha insertado correctamente.", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
  49.        Else
  50.            MessageBox.Show("La venta se ha insertado correctamente. Debe dispensar al cliente el artículo con número de serie: " & Mensaje, "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
  51.        End If
  52.  
  53.         ' ME GUSTARÍA SABER SI TENGO QUE REDIMENSIONAR LA MATRIZ
  54.        ' redimensionamos el tamaño de la matriz
  55.        'ReDim Preserve S_Ventas(S_Ventas.Length)
  56.  
  57.        ' para refrescar la tabla me tengo que crear 2 variables
  58.        Dim ta_venta As New ArcoclimaDataSetTableAdapters.VentasTableAdapter
  59.        Dim tabla_venta As New ArcoclimaDataSet.VentasDataTable
  60.  
  61.        ' refrescamos los valores de la tabla
  62.        tabla_venta = ta_venta.GetData
  63.        ArticulosDataGridView.DataSource = tabla_venta
  64.  
  65.        Me.Validate()
  66.        Me.VentasBindingSource.EndEdit()
  67.        Me.TableAdapterManager.UpdateAll(Me.ArcoclimaDataSet)
  68.  
  69.        Comando.Connection.Close()
  70.  
  71.        ' Limpio el contenido de los TextBox que he insertado en la tabla de empleados
  72.        Limpiar_TextBox(cbb_Marca_Artic_Vent_Insertar.Text, cbb_Articulo_Artic_Vent_Insertar.Text,
  73.                        cbb_Nomb_Emp_Vent_Insertar.Text, cbb_Apel_Emp_Vent_Insertar.Text,
  74.                        cbb_Nomb_Client_Vent_Insertar.Text, cbb_Apel_Client_Vent_Insertar.Text)
  75.        Exit Sub
  76.    End Sub
  77.  

El Id me lo devuelve correcto, pero no se si el error esta en la consulta o en el código, espero que me puedan ayudar,

Saludos


En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: error al insertar en la base de datos
« Respuesta #1 en: 25 Mayo 2012, 20:50 pm »

Buenas.

El problema creo que lo tienes en la consulta del INSERT. Dentro del VALUES, estás poniendo los valores a grabar, mediante subconsultas. Deberías poner esos valores directamente, sin consultas. De hecho, eso que haces es algo que no entiendo, ya que algunos de esos valores ya los has obtenido previamente y están asignados a las variables id_emp, id_cli.

Aparentemente estás utilizando variables, dataadapters y datasets sin obtener beneficio de ello, al contrario.  :-\

Otra cosa que no entiendo (igual me precipito) es el hecho de que tengas en diferentes combos los nombres y apellidos de clientes/empleados. ¿Por qué no meterlos en un mismo combo?

Una recurso que te vendría (creo) muy bien, sería el uso de la propiedad "itemdata" de los combos (si usas VB6, sabrás de qué hablo). Con ello conseguirías, al  momento de cargar los nombres y apellidos, poder también cargar los respectivos id, de modo que luego no tendrías que utilizar dataadapters y datasets adicionales para saber esos valores.

El problema es que esa propiedad no está presente en .NET, pero podrias implementarla de esta manera: http://support.microsoft.com/kb/311340

Bueno, espero que esta  miniparrafada te sirva de ayuda  :D.

Saludos.


En línea

- Nice to see you again -
andaluz


Desconectado Desconectado

Mensajes: 333



Ver Perfil
Re: error al insertar en la base de datos
« Respuesta #2 en: 25 Mayo 2012, 21:12 pm »

que utilidad tiene itendata??

es que no la verdad es que no la conozco y como se utiliza???
« Última modificación: 25 Mayo 2012, 21:15 pm por andaluz » En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: error al insertar en la base de datos
« Respuesta #3 en: 25 Mayo 2012, 23:42 pm »

Buenas.

Pero, ¿le has echado por lo menos un vistazo al enlace?  :huh: Ahí podrás ver (al final del mismo) cómo se crea una clase auxiliar que podrías utilizar para guardar tanto los id como nombre+apellido de clientes/empleados y cargarlos en los items de tus combos. Luego, según te interese, es cuestión de recuperar el valor de una u otra propiedad de la clase auxiliar.

Saludos.
En línea

- Nice to see you again -
andaluz


Desconectado Desconectado

Mensajes: 333



Ver Perfil
Re: error al insertar en la base de datos
« Respuesta #4 en: 26 Mayo 2012, 11:00 am »

Este es otro error, os comento lo que quiero realizar y a continuación os pongo la consulta que he realizado para ello:
     - quiero que en el combo1 tengo el nombre de los clientes y quiero conseguir es el Id_Venta.
      codigo que yo he realizado:
         
Código
          "SELECT Ventas.Id_Ventas FROM Ventas WHERE Ventas.Id_Cliente IN (SELECT Clientes.Id_Cliente FROM Clientes WHERE Clientes.Nombre='" & cbb_Cod_Venta_Instalacion_ins.Text & "')"
 
                  El ultimo combo es el nombre del cliente

Las tablas son las siguientes:
Clientes                       Insatlaciones                    Ventas
Id_Cliente                        Id_Instalacion                   Id_Ventas
Nombre                            Descripcion                       Fecha_Venta
Apellidos                           ......                                 ..........
DNI                                  Id_Venta                          Id_Stock
.......                                 Id_Empleado                    Id_Empleado
                                                                               Id_Cliente
En línea

andaluz


Desconectado Desconectado

Mensajes: 333



Ver Perfil
Re: error al insertar en la base de datos
« Respuesta #5 en: 26 Mayo 2012, 11:17 am »

el error que me da al ejecutar la aplicación me la da en esa consulta y dice lo siguiente:
      No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla 'Clientes'
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: error al insertar en la base de datos
« Respuesta #6 en: 26 Mayo 2012, 16:09 pm »

Buenas.

Código
  1. "SELECT Ventas.Id_Ventas FROM Ventas WHERE Ventas.Id_Cliente IN (SELECT Clientes.Id_Cliente FROM Clientes WHERE Clientes.Nombre='" & cbb_Cod_Venta_Instalacion_ins.Text & "')"

Citar
  No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla 'Clientes'

¿Seguro que ese aviso te lo da con esa consulta? Tiene más pinta de dártelo al intentar insertar/actualizar una venta, con un Id_Cliente que no existe aún en la tabla Clientes (relaciones entre tablas, integridad referencial...)

Saludos.



En línea

- Nice to see you again -
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C# codigo] insertar registro en base de datos
.NET (C#, VB.NET, ASP)
SRVAM 6 34,385 Último mensaje 20 Enero 2010, 08:58 am
por SRVAM
insertar imagenes en base de datos « 1 2 3 »
Bases de Datos
xemnas 20 16,881 Último mensaje 12 Enero 2012, 18:16 pm
por Novlucker
Insertar datos de dos campos hidden y un campo de texto en la base de datos.
Desarrollo Web
70N1 4 5,018 Último mensaje 6 Octubre 2012, 20:22 pm
por RevangelyonX
problema con formulario para insertar informacion en base de datos
PHP
abbyblack123 1 2,636 Último mensaje 24 Abril 2013, 17:48 pm
por s7evin
Insertar embed de twitter en la base de datos [solucionado]
PHP
soru13 2 2,196 Último mensaje 28 Abril 2013, 13:27 pm
por soru13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines