none
Consulta SQL a traves de VB.net RRS feed

  • Pregunta

  • Buenas tardes. Tengo una consulta SQL con una condicion dentro la cual funciona perfectamente bien en SQL. Al Momento de trasladarla a mi compilador de VB me muestra un error en la condicionante

    Consulta SQL

    SELECT Horario,Caso
    FROM horario_atencion 
    LEFT OUTER JOIN
    (SELECT agenda.idHrs AS Detalle,
    IF (agenda.idHrs < 13 , "OCUPADO" , "") AS Caso
    FROM agenda
    WHERE idSuc ="2"
    AND FechaCita ="2018-04-09"
    ) AS Proc
    ON horario_atencion.idHorario = Proc.Detalle 
    WHERE idHorario < "13"
    ORDER BY Horario;

    String de VB

    "SELECT Horario,Caso
                        From horario_atencion 
                        LEFT OUTER JOIN
                        (SELECT agenda.idHrs AS Detalle,
                        IF (Agenda.idHrs < " + "13" + " ," + "OCUPADO" + " ," + "FREE" + ") As Caso   ' me muestra error en esta linea
                        From agenda
                        Where IdSuc = '" + Suc + "'
                        And FechaCita = '" + Fecha + "'
                        ) AS Proc
                        On horario_atencion.idHorario = Proc.Detalle 
                        WHERE idHorario <  " + "13" + "
                        ORDER BY Horario
                        "

    Muchisimas Gracias de Antemano

    miércoles, 11 de abril de 2018 20:10

Respuestas

  • Hola

    El error es que te faltan comillas simples al principio y al final de OCUPADO y de FREE:

    IF (Agenda.idHrs < " + "13" + " ," + "'OCUPADO'" + " ," + "'FREE'" + ") As Caso  

    ¿Y Por qué abres y cierras literales entre "" y los añades unos con otros, si no estás usando variables, sino constantes?

    Me explico:

    por qué:     IF (Agenda.idHrs < " + "13" + " ," + "OCUPADO" + " ," + "FREE" + ") As Caso  

    y no:          IF (Agenda.idHrs <  13 , 'OCUPADO' , 'FREE' ) As Caso   

    porque "13",  "OCUPADO" y "FREE" son literales y no variables, para qué usar tantas comillas?.

    Si no se trata de ese error, dinos de qué error se trata.

    Saludos.

    • Marcado como respuesta Dann_44 martes, 15 de mayo de 2018 18:45
    miércoles, 11 de abril de 2018 22:04

Todas las respuestas

  • ¿Y cual es el ERROR?, Aunque creo que esto ya tendria que verlo en el foro de VB
    miércoles, 11 de abril de 2018 20:53
  • Hola

    El error es que te faltan comillas simples al principio y al final de OCUPADO y de FREE:

    IF (Agenda.idHrs < " + "13" + " ," + "'OCUPADO'" + " ," + "'FREE'" + ") As Caso  

    ¿Y Por qué abres y cierras literales entre "" y los añades unos con otros, si no estás usando variables, sino constantes?

    Me explico:

    por qué:     IF (Agenda.idHrs < " + "13" + " ," + "OCUPADO" + " ," + "FREE" + ") As Caso  

    y no:          IF (Agenda.idHrs <  13 , 'OCUPADO' , 'FREE' ) As Caso   

    porque "13",  "OCUPADO" y "FREE" son literales y no variables, para qué usar tantas comillas?.

    Si no se trata de ese error, dinos de qué error se trata.

    Saludos.

    • Marcado como respuesta Dann_44 martes, 15 de mayo de 2018 18:45
    miércoles, 11 de abril de 2018 22:04
  • Hola Dann_44:

    No veo la manera de implementar if en sql server dentro de una select

    http://www.latindevelopers.com/articulo/if-iif-en-sql-server/

    En la sentencia, si la mandas como tal al Sql debes de sustituir el if por un case, sin menoscabar lo que te hayan indicado, sobre comillas, etc...

    https://docs.microsoft.com/es-es/sql/t-sql/language-elements/case-transact-sql

    Un saludo

    jueves, 12 de abril de 2018 5:23
  • Además te recomendaría que lo hicieses dentro de un procedimiento almacenado, al cual le mandas como parametros los valores de las propiedades de tu objeto Agenda, y demás causisticas, que te interesen, para que el te regrese lo esperado. Será más rápido, mejor porque separas las cosas que tiene que hacer cada uno (al César lo que es del Cesar....), y mucho más seguro.

    https://support.microsoft.com/es-es/help/308049/how-to-call-a-parameterized-stored-procedure-by-using-ado-net-and-visu

    Un saludo

    jueves, 12 de abril de 2018 5:30
  • Buenas tardes:

    Efectivamente yo había pensado que en SQL Server yo nunca había usado IF, pero no me atreví a decirlo, vaya a ser que haya una versión de SQL Server que sí lo admita, como en Access sí se usa...

    Pero lo que más me ha hecho no hacer comentario sobre ello es que DAnn dice que esa sentencia le funciona perfectamente en SQL.

    Ya nos contará.

    Saludos.

    jueves, 12 de abril de 2018 13:10
  • Hola

    El error es que te faltan comillas simples al principio y al final de OCUPADO y de FREE:

    Efectivamente ppito68 el error es de comillas y asi lo resolvi gracias a todos

    "SELECT Agenda
       From horario_atencion 
       LEFT OUTER JOIN
      (SELECT agenda.idHrs AS Detalle,
       IF (agenda.idHrs < @idHrs ,  ""OCUPADO"" ,  """" ) As Agenda
       From agenda
        Where IdSuc = @Suc 
        And FechaCita = @Fecha 
        ) AS Proc
       On horario_atencion.idHorario = Proc.Detalle 
       WHERE idHorario < @idHorario
       ORDER BY Horario
        "


    martes, 15 de mayo de 2018 18:48