¿Consulta Anidada O Subconsulta? Sqlite


Subject: ¿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.

Subject: 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

Profile PM  
Subject: 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

Subject: 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

Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.2729s (PHP: -72% SQL: 172%)
SQL queries: 23 - Debug Off - GZIP Enabled