none
Nombre de tabla y campos como parametros en consulta RRS feed

  • Pregunta

  • Buenas Tardes

    Estoy realizando una aplicacion en la cual se tienen varias secciones que manejan datos por separado. Estas secciones podrian estar codificadas como 001, 002, 003, en base a ese codigo se copia la estructura de una tabla llamada Clientes, entonces esa tabla pasaria a llamarse "001Clientes"..., ahora bien dicha tabla contiene campos Pago1, Pago2, Pago3 que se seleccionarian dependiendo de cual este vacio.

    Mi consulta es como puedo en un UPDATE pasarle el nombre de tabla como parametro ya que puede ser la 001Clientes o la 002Clientes, como puedo pasar el nombre de un campo de esa tabla como parametro cuando puede ser el Pago1, Pago2... este es codigo que uso en el UPDATE, pero me da error.

    Dim Query As String= "UPDATE @Tabla SET CrCuopaga = @CrCuopaga,CrCuoatra = @CrCuoatra,

    CrTotalpagado = @CrTotalpagado, CrTotalabonado = @CrTotalabonado, CrCuotanum = @CrCuotanum,

    @cuopaga = @cuopaga1, @abopaga = @abopaga1, @fpago = @fpago1, @CrEnrutada= CrEnrutada where CrNumero = @CrNumero"

    Como ven coloco el nombre de tabla como parametro y los nombres de campo finales exceptuando el ultimo tambien.

    Este error es por el nombre de la tabla "Error de sintaxis en la consulta. Cláusula de consulta incompleta"

    Este Por los campos "No se han especificado valores para algunos de los parámetros requeridos"

    Pido disculpas por lo extenso y agradezco de anatemano la ayuda.

    jueves, 16 de marzo de 2017 22:03

Respuestas

  • Hola fertrones0,

    ¿Qué base de datos estás utilizando, SqlServer, Access, MySQL ?

    Independientemente del SGBD que estés utilizando podrías utilizar el método String.Format para crear la estructura de la query (BD y campos según tu condición), al final solo agregarías los valores que serán modificados.

    Método String.Format

    Podrías hacer algo como :

    Dim nombreTabla As String = "002Clientes"
    Dim campo1 As String = "Pago2"
    Dim campo2 As String = "Otro2"
    
    Dim query = String.Format("UPDATE {0} SET {1} = @param1, {2} = @param2 where id = @id",
                                nombreTabla, campo1, campo2)

    Dónde : Los índices serán reemplazados por los valores enviados :

    {0} = nombreTabla
    {1} = campo1
    {2} = campo2

    El resultado de la variable query retornaría con el nombre de la tabla y los campos según los valores de las variables.

    UPDATE 002Clientes SET Pago2 = @param1, Otro2 = @param2 where id = @id

    Teniendo la query construida solo agregarías los valores a los parámetros.

    Dim cmd As New SqlCommand(query, con)
    cmd.Parameters.AddWithValue("@param1", TextBox1.Text)
    cmd.Parameters.AddWithValue("@param2", TextBox2.Text)
    cmd.Parameters.AddWithValue("@id", Convert.ToInt32(txtId.Text))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta fertrones0 viernes, 17 de marzo de 2017 13:46
    viernes, 17 de marzo de 2017 2:35

Todas las respuestas

  • Hola fertrones0,

    ¿Qué base de datos estás utilizando, SqlServer, Access, MySQL ?

    Independientemente del SGBD que estés utilizando podrías utilizar el método String.Format para crear la estructura de la query (BD y campos según tu condición), al final solo agregarías los valores que serán modificados.

    Método String.Format

    Podrías hacer algo como :

    Dim nombreTabla As String = "002Clientes"
    Dim campo1 As String = "Pago2"
    Dim campo2 As String = "Otro2"
    
    Dim query = String.Format("UPDATE {0} SET {1} = @param1, {2} = @param2 where id = @id",
                                nombreTabla, campo1, campo2)

    Dónde : Los índices serán reemplazados por los valores enviados :

    {0} = nombreTabla
    {1} = campo1
    {2} = campo2

    El resultado de la variable query retornaría con el nombre de la tabla y los campos según los valores de las variables.

    UPDATE 002Clientes SET Pago2 = @param1, Otro2 = @param2 where id = @id

    Teniendo la query construida solo agregarías los valores a los parámetros.

    Dim cmd As New SqlCommand(query, con)
    cmd.Parameters.AddWithValue("@param1", TextBox1.Text)
    cmd.Parameters.AddWithValue("@param2", TextBox2.Text)
    cmd.Parameters.AddWithValue("@id", Convert.ToInt32(txtId.Text))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta fertrones0 viernes, 17 de marzo de 2017 13:46
    viernes, 17 de marzo de 2017 2:35
  • Gracias Joel por tu respuesta, lo voy a implementar de esa manera, la base es Accsess y el lenguaje es VB .net  2015, la marco como respuesta porque se ve que es exactamente lo que busco.

    Un abrazo desde Colombia

    Editado

    Implementada la modificacion, funciono a la perfeccion, muchisimas gracias

    • Editado fertrones0 viernes, 17 de marzo de 2017 16:10
    viernes, 17 de marzo de 2017 13:51