Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
¿Consulta Anidada O Subconsulta? Sqlite
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿Consulta Anidada O Subconsulta? Sqlite 
 
Compañeros foristas, tengo una aplicación que hice para mi trabajo diario donde llevo el control de los materiales utilizados, donde, cúando y cuanto se gasta. Saco consultas impresas o por pantalla
segun material, local o período de tiempo. Son unos 50 locales y unos 70 materiales diferentes. He conseguido combinar las consultas por local y material sin problemas, pero no consigo combinar ni local ni material con período de tiempo. He buscado en google, en páginas y blogs de sqlite y nada.
La tabla donde hago las consultas es una sola.Pongo código para que se vea:
hresul = hconn.Exec("Select sum(Cantidad) as suma from gastos where Material like '" & filtro & "' and Lugar like '" & filtro2 & "'")
  If hresul["suma"] = Null Then
    Message("No hay datos que coincidan")
    Else
cantidad = hresul["suma"]
textbox3.text = "Se han usado un total de " & cantidad & " " & filtro & " en " & filtro2 & ""

La anterior consulta me dice cuanto material gasté en determinado lugar. La siguiente es uno de los tantos intentos que hice para combinar material y fecha. Aclaro que el select de fechas por sí solo funciona bien, incluso si hago el Sum(material).

hresul = hconn.Exec("Select sum(Cantidad) as suma From gastos where Material Like '" & filtro & "'", "in" "Select * from gastos where  datetime(fecha) between  " & DesdeSql & "  and " & HastaSql)
         If hresul["suma"] = Null Then

He probado como se ve aquí con "in" que supuestamente hace una consulta sobre el resultado de la consulta, pero me aparece el total del material independientemente del período, con un "and" es exatamente lo mismo. Si hago al revés y hago el sum sobre el período me aparece el total de todos los materiales durante el período.He probado encerrando la "subconsulta" entre paréntesis y me da error de sintaxis. De verdad, no le encuentro la vuelta, a ver si alguno de los que sabéis más me podéis hechar una soga.
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Consulta Anidada O Subconsulta? Sqlite 
 
Hola

La segunda consulta debería darte esos resultados aparentemente, aunque tiene un par de typos. He reescrito la consulta usando el segundo argumento de .Exec que permite sustituir los "comodines" dentro de la sentencia SQL y es mucho más limpio y seguro, puesto que así no nos preocupamos de quotear las variables.

hresul = hconn.Exec("Select sum(Cantidad) as suma From gastos where Material Like &1 in (Select * from gastos where  datetime(fecha) between  &2  and  &3);", filtro, DesdeSql, HastaSql)


Citar:
me aparece el total del material independientemente del período


Entonces el fallo está en la segunda parte de la consulta que es la que se ejecuta primero. Me temo que tu error puede estar relacionado con las fechas y sus formatos. Sin saber exactamente cómo has introducido las fechas en sqlite no puedo decirte más que insertes directamente la fecha como Date y no como String formateado. Lo mismo para los campos DesdeSql y HastaSql, que deberías pasarlos como Date para poder compararlos al campo fecha. Incluso puede que no te haga falta convertir el campo fecha en datetime para compararlo si lo has hecho como digo.

Ya nos cuentas, saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Consulta Anidada O Subconsulta? Sqlite 
 
Jesús, lamentablemente no funciona.Tu código me da error , del tipo "error sql or missing database" (base perdida).
Le he dado vuelta para un lado y para otro y nada, probé la sintaxis que usas como base para las consultas que yo había hecho y nada. Invertí el orden de las consultas y fue peor.. Para las fechas lo hago así, si no recuerdo mal esto lo ví aquí o me lo pasó algún compañero del foro:
Dim Desde As String[]
  Dim DesdeSql As String
  Dim Hasta As String[]
  Dim HastaSql As String
 filtro = cbmaterial.Current.Text
 
  'comprobamos primero que esten las fechas escritas
  If TextBox1.text = "" Or TextBox2.text = "" Then
    Message.Warning("Debe escribir ambas fechas")
  Else

    Desde = Split(TextBox1.Text, "/")
    'ponemos lo guiones en barritas para que el motor sqlite3 lo reconozca
    '----------------------------------------------------------
    DesdeSql = "'" & Desde[2] & "-" & Desde[1] & "-" & Desde[0] & " 00:00:00'"
    Hasta = Split(TextBox2.Text, "/")
    HastaSql = "'" & Hasta[2] & "-" & Hasta[1] & "-" & Hasta[0] & " 00:00:00'"
 hresul = hconn.Exec("Select * from gastos where datetime(fecha) between" & DesdeSql & " and " & HastaSql)


No sé si es la mejor manera de hacerlo, pero recuerdo haber hecho muchas pruebas antes de conseguir esa consulta que es 100 % funcional.
Seguiré probando. Gracias por tu ayuda.
Saludos
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Consulta Anidada O Subconsulta? Sqlite 
 
Dani26 escribió: [Ver mensaje]
Jesús, lamentablemente no funciona.Tu código me da error , del tipo "error sql or missing database" (base perdida).


Qué raro. He usado esa sintaxis muchas veces con éxito.

De todas formas, ¿puedes preparar un programita de prueba para descargar incluyendo la base de datos llena para intentar la consulta que propones? Bastaría con el formulario de la consulta y el archivo sql lleno de datos para realizar pruebas.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Crear Una Consulta En Sqlite lumbanico Bases de Datos 3 Miercoles, 30 Septiembre 2009, 22:49 Ver último mensaje
chaskux
No hay nuevos mensajes Consulta Sum En Sqlite Con Gambas pittusa Bases de Datos 2 Viernes, 29 Octobre 2010, 06:27 Ver último mensaje
pittusa
No hay nuevos mensajes Problema Con Consulta Sqlite Con La Letra ... v3ctor Bases de Datos 5 Martes, 20 Septiembre 2016, 19:03 Ver último mensaje
jsbsan
No hay nuevos mensajes Como Hacer Una Subconsulta En Sqlite? v3ctor Bases de Datos 15 Jueves, 16 Marzo 2017, 18:53 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron