none
Problema con addwithvalue RRS feed

  • Pregunta

  • hola gente del foro tengo problemas con esta instrucciones:

                

     Dim cadenasql As String = "INSERT INTO [transregistro] ([fecha],[hora],[numeracion],[usuario],[codcte],[titular],[codigo barra],[cantidad],[descripcion])"
                cadenasql = cadenasql + " VALUES ('" & fecha11 & "' ,'" & hora11 & "','" & enumera & "','" & usu & "','" & cdcte & "','" & ttlr & "','" & enumera & "','" & enumera & "','@descripcion & ')"


                For Each row As DataGridViewRow In DataGridView_resumen.Rows

                    DataGridView_resumen.AllowUserToAddRows() = False
                    comando.Parameters.Clear()
                    'comando.Parameters.AddWithValue("@codigo barra", CStr(row.Cells(0).Value))
                    'comando.Parameters.AddWithValue("@cantidad", CStr(row.Cells(1).Value))
                    comando.Parameters.AddWithValue("@descripcion", CStr(row.Cells(2).Value))
                    'ejecutar la consulta de accion

                    cnn.Open()
                    comando.CommandText = cadenasql
                    comando.ExecuteNonQuery()

    los datos de fecha, hora, numeracion, usuario, cdocte, titular los copia bien, el problema esta en que en la base de datos access copia asi de esta manera "@codigo barra" y no los datos que tengo cargado en el datagridview?


    sábado, 17 de enero de 2015 16:29

Todas las respuestas

  • Hola,

    Lo que te sugiero es que todos los parámetros del procedimiento lo envíes a través de la colección Parameters del objeto Command. Bajo está sugerencia tu código quedaría de la siguiente manera:

    Dim cadenasql As String = "INSERT INTO [transregistro] ([fecha],[hora],[numeracion],[usuario],[codcte],[titular],[codigo barra],[cantidad],[descripcion]) VALUES (@fecha,@hora,@numeracion,@usuario,@codcte,@titular,@codigo_barra,@cantidad,@descripcion)"
    
    For Each row As DataGridViewRow In DataGridView_resumen.Rows
    
      DataGridView_resumen.AllowUserToAddRows() = False
      comando.Parameters.Clear()
      comando.Parameters.AddWithValue("@fecha", fecha11)
      comando.Parameters.AddWithValue("@hora", hora11)
      comando.Parameters.AddWithValue("@numeracion", enumera)
      comando.Parameters.AddWithValue("@usuario", usu)
      comando.Parameters.AddWithValue("@codcte", cdcte)
      comando.Parameters.AddWithValue("@titular", ttlr)
      comando.Parameters.AddWithValue("@codigo_barra", CStr(row.Cells(0).Value))
      comando.Parameters.AddWithValue("@cantidad", CStr(row.Cells(1).Value))
      comando.Parameters.AddWithValue("@descripcion", CStr(row.Cells(2).Value))
      
      cnn.Open()
      comando.CommandText = cadenasql
      comando.ExecuteNonQuery()
    Te sugiero que el parámetro @codigo_barra lo unas con un guión bajo y no lo pases con espacio en blanco. ¿Por qué @cantidad lo conviertes a cadena?

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.


    Willams Morales P.
    Arequipa - Perú


    sábado, 17 de enero de 2015 16:50
  • hola williams, gracias por responder, te vuelvo a reiterar la consulta, 

    en la instruccion:

    'comando.Parameters.AddWithValue("@codigo barra", CInt(row.Cells(0).Value))

    o en la intruccion donde va el comando sql insert, debe faltar algo o se debe definir una variable o algo, porque 

    en la bd access, me copia textualmente esto "@codigo barra" y no toma los parametros del mismo...una cosa a tener en cuenta es que coloque un punto de parada en esta instruccion y previasualizo que hasta el Cint toma los valores, pero al momento de reflejarlos en la instruccion insert, no los retiene. por eso llego a la conclusion de que algo esta faltando.

    A la espera de una pronta respuesta. Saludos Marcelo.

    domingo, 18 de enero de 2015 12:49
  • Marcelo, es una mala práctica enviar parámetros de la manera como lo vienes haciendo. Nuevamente te invoco a tomar el código que te he adjuntado. Avísame si con lo propuesto tienes problemas. @Codigo Barra con espacio en blanco me da mala espina.
    domingo, 18 de enero de 2015 15:37