Autor Tema: Sentencia SQL  (Leído 5444 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Ever Cerna

  • Megabyte
  • ***
  • Mensajes: 113
  • Reputación: +1/-1
  • anarkia99-Soft.
    • Ver Perfil
Sentencia SQL
« en: Septiembre 05, 2015, 03:40:17 pm »
 Buenas tardes amigos...

Consulta estoy tratando de ejecutar esta sentencia SQL, lo que estoy haciendo es filtrar unos datos, con la condicion, del Nombre del cliente, hasta alli todo bien, ademas queria agregarle con este campo de la tabla Presupuesto.ACEPTADO = 4, pero me me sale error, como haria para que me filtrara con dos condiciones ala vez por nombre y Aceptado = 4.

Código: [Seleccionar]
Sub CARGAR_INFO_REPUESTOS()

    If lblIDCliente.Caption = "" Then
   
        MsgBox "Debe seleccionar un Cliente.", vbExclamation, "Advertencia"
        CmdSearch.SetFocus
       
        Exit Sub
       
    End If
   
    StrSQL = "SELECT ArticuloNPre.NPRE, ArticuloNPre.ARTICULO, Presupuesto.FECHA, Presupuesto.FECHA_ENTREGADO, ArticuloNPre.PRECIO"
    StrSQL = StrSQL & " FROM Presupuesto INNER JOIN ArticuloNPre ON Presupuesto.NPRE = ArticuloNPre.NPRE"
    StrSQL = StrSQL & " WHERE Presupuesto.NCLI =" & lblIDCliente.Caption & Presupuesto.ACEPTADO = 4 ' En esta parte me muestra el error, pero si borro & Presupuesto.ACEPTADO = 4, filtra con normalidad
   
    Call CARGAR_DATOS_SEGUN_NOMBRE(StrSQL)
         
End Sub

Gracias por su atencion...

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Sentencia SQL
« Respuesta #1 en: Septiembre 05, 2015, 08:08:21 pm »
Hola, jack06.
Se me ocurre que podés probar lo siguiente (copio solamente la última línea de tu consulta SQL, que es la que modificaría):
Código: (SQL) [Seleccionar]
StrSQL = StrSQL & " WHERE Presupuesto.NCLI =" & lblIDCliente.Caption & " AND Presupuesto.ACEPTADO = 4"A ver si anda...

Jerónimo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Sentencia SQL
« Respuesta #2 en: Septiembre 06, 2015, 03:28:49 pm »
Por eso es importante ir viendo como se construye tu consulta sql y de ser posible ejecutarla en tu gestor de base de datos. Te hubieras dado cuenta del error que muy bien corrige Jerónimo si es que usabas la ventana Inmediato.

¿Como se hace? te suelto el cursillo tip aqui. Tu tienes este código (solo lo aplicare a la variable) y antes de entrar al procedimiento CARGAR_DATOS_SEGUN_NOMBRE has un punto de interrupción alli:



Si presionas Ctrl G te saldrá la ventana inmediato, alli escribes ?StrSQL y presionas ENTER.
EL signo de interrogación servirá para que podamos obtener lo que contiene la variable StrSQL
y de esa forma podemos saber como se esta construyendo nuestra cadena:



Para que te quede mas chulo puedes darle Ctrl + Enter cada cierto tramo de la cadena para que te quede asi:



Vemos entonces que hasta allí esta bien, no ejecuto la tercera linea de tu string porque le estamos diciendo al ide que concatene la propiedad ACEPTADO del objeto Presupuesto cosa que NO EXISTE porque no es algo declarado ni creado en VB6, eso es parte del SQL y notamos que no se está tratando como tal, haciendo la corrección debida (como indica Jerónimo) y usando la ventana Inmediato y tabulando nos queda asi:



Vemos entonces que el contenido del string es correcto, lo que no estamos seguros es si nos entregara los registros esperados, o sea error de sintaxis no hay (como si lo hubo) y para estar seguros y de paso verificar los registros esperados copiamos ese contenido...



... a nuestro gestor de base de datos y listo.

Espero que este tip te sirva y si la sabias solo te faltaba analizar un poquito como estabas concatenando.

Saludos
 
« última modificación: Septiembre 07, 2015, 12:30:00 pm por YAcosta »
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Sentencia SQL
« Respuesta #3 en: Septiembre 06, 2015, 08:18:42 pm »
Yván: No sabía eso de "?...". ¡Muy bueno! ¡Es de mucha utilidad!
Hasta ahora solo veía en la ventana Inmediato el contenido de variables escribiendo "Debug.Print StrSQL" (para seguir con este ejemplo) en el código. Es bueno saber esto que explicás. De esta manera imagino que con la ejecución en pausa puedo ver el contenido de cualquier variable (me restaría ver si son solo las declaradas a nivel de procedimiento, o cualquiera).
¡Muchas gracias!

Jerónimo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Sentencia SQL
« Respuesta #4 en: Septiembre 06, 2015, 08:59:06 pm »
Hola doc

Respuesta: Depende del alcance de la declaración. Si está declarado en el módulo podrás verlo en cualquier punto de interrupción de todo tu proyecto, pero si lo declaras en un evento solo podrás verlo dentro de ese evento (o sea, si ejecutas la interrupción dentro de ese evento)...lo mismo si lo declaraste en el área de declaraciones del form tendrás alcance en cualquier evento de cualquier control dentro de ese form pero no en otro.

Ojo que esto también sirve para ver los valores o estados de ciertos controles.
Fíjate, si dentro del Form1 tengo el control LblNombre y en su propiedad caption a Jerónimo me sirve hacer:

?LblNombre.Caption (enter) y veré Jerónimo, aunque en el caso del control intrínseco Label basta y sobra con
?LblNombre pero esto no te funcionará si estas en el Form2 SALVO QUE estando dentro del form2 pongas esto:
?Form1.LblNombre.Caption (enter)

Y lo veras.

Saludos
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Sentencia SQL
« Respuesta #5 en: Septiembre 06, 2015, 11:38:11 pm »
Excelente. Como siempre, muy claro y didáctico.
¡Muchas gracias!

Jerónimo

Ever Cerna

  • Megabyte
  • ***
  • Mensajes: 113
  • Reputación: +1/-1
  • anarkia99-Soft.
    • Ver Perfil
Re:Sentencia SQL
« Respuesta #6 en: Septiembre 07, 2015, 02:25:32 am »
@Jeronimo, muchísimas gracias, me funciono a la perfección.

@Yvan Gracias, gracias maestro muy buena explicación, hay tantísimas cosas que aprender con ustedes.

Nuevamente mil gracias a los dos  :D