|
Página 1 de 2
|
Como Hacer Una Subconsulta En Sqlite?
Autor |
Mensaje |
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Como Hacer Una Subconsulta En Sqlite?
buenas,
estoy trabajando duro en el programa Taller2015....
y como es el programa de mi trabajo esta a prueba constantemente.....
a medida que se van sumando los registros surge crear un nuevo tipo de fitro....
es decir por ejemplo:
necesito hacer un like para buscar en el campo nombre de cliente y que a su vez tenga la fecha de un determinado año (la idea es usar el año actual para no mostrar ordenes viejas)
esta es la sentencia normal a la cual hay que agregarle una subconsulta que filtre por año....
Conectar1.Exec("Select * from tablataller where " & TipoDato & " like '%" & filtro & "%'")
algo así seria no se....
Conectar1.Exec("Select * from tablataller where " & TipoDato & " like '%" & filtro & "%'" in (subconsulta)
alguna orientación??
editado:
Select * from tablataller where nombre like '%jorge%' and (select * from tablataller where ingreso like '%2014%') algo asi
estas sentencias por separado funcionan pero no se como anidarlas....
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
última edición por v3ctor el Jueves, 24 Diciembre 2015, 19:27; editado 1 vez
|
#1 Jueves, 24 Diciembre 2015, 19:13 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Como Hacer Una Subconsulta En Sqlite?
v3ctor:
Prueba esto:
Citar: Select * from (select * from tablataller where ingreso like '%2014%') where nombre like '%jorge%'
|
#2 Jueves, 24 Diciembre 2015, 19:31 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Hacer Una Subconsulta En Sqlite?
no funciono, estoy haciendo las pruebas desde la consola sql de gambas, como siempre...
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#3 Jueves, 24 Diciembre 2015, 19:36 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Como Hacer Una Subconsulta En Sqlite?
v3ctor:
Citar: no funciono, estoy haciendo las pruebas desde la consola sql de gambas, como siempre...
Te debería funcionar, yo las hago asi...
Tambien podrias hacer esto:
Select * from tablataller where (nombre like '%jorge%' and ingreso like '%2014%')
última edición por jsbsan el Jueves, 24 Diciembre 2015, 19:39; editado 1 vez
|
#4 Jueves, 24 Diciembre 2015, 19:39 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Hacer Una Subconsulta En Sqlite?
la ultima que pusiste funciono...
ahora si me pongo a laburar con eso, voy a poner un combobox con años y tal vez una opción para dejar el combobox en el año actual.
la anterior no se porque no función veré si soy yo que hago algo mal..
gracias julio como siempre un grande.
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#5 Jueves, 24 Diciembre 2015, 19:50 |
|
|
ahtonio
Programador
Registrado: Octobre 2009
Mensajes: 144
Edad: 58 Ubicación: Zaragoza
|
Re: Como Hacer Una Subconsulta En Sqlite?
Si el campo fecha es date y solo quieres actuar sobre una tabla, tienes dos formas de hacerlo.
Mediante Exec yo usaría la función strftime() de Sqlite3 para filtrar el año y con AND añades la condición de LIKE del nombre. Si es una tabla no deberías tener más problema.
Mediante Find. He visto que seleccionas todos los campos de la tabla. Puedes emplear el método Find("tabla", ----condiciones y argumentos a sustitur---) y te devolverá un Result con los registros seleccionados.
De todos modos he hecho una consulta en mi base de datos con un campo fecha y otro string y quedaría así:
select * from contratos where dirctr like('%Lagos%') and strftime('%Y', fecctr) = '2015'
y a mi me funciona, espero te ayude
Un saludo
|
#6 Jueves, 24 Diciembre 2015, 19:59 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Hacer Una Subconsulta En Sqlite?
ahtonio, hola
lo voy a probar,
julio así me quedo el código y funciona de lujo:
Public Sub txtBuscar_KeyRelease()
Dim hresul As Result
Dim filtro As String
filtro = txtBuscar.Text
QueFiltro()
Select Case TipoDato
Case "ingreso"
hresul = Conectar1.Exec("Select * from tablataller where " & TipoDato & " like '%" & filtro & "%'")
Case "pendiente"
hresul = Conectar1.Exec("Select * from tablataller where " & TipoDato & " like '%si%'")
Case Else
If bAnio = False Then
hresul = Conectar1.Exec("Select * from tablataller where " & TipoDato & " like '%" & filtro & "%'") 'original
Else
hresul = Conectar1.Exec("Select * From tablataller where(" & TipoDato & " Like '%" & filtro & "%' and ingreso like '%" & sAnio & "%')") 'filtro por año
Endif
End Select
If hresul.Available = False Then
' Me.Refresh
vBoxSuma.Text = "0"
txtTotalClientes.Text = "0"
txtTotalOrdenes.Text = "0"
txtCN.Text = "0"
txtOPE.Text = "0"
vBoxNP.Text = "0"
tvTaller.Clear
tvTaller.Grid = False
Else
tvTaller.Grid = True
MostrarDatos(hresul)
Endif
End
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#7 Jueves, 24 Diciembre 2015, 20:09 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Como Hacer Una Subconsulta En Sqlite?
La forma correcta no necesita paréntesis. Además las fecha no se comparan con comodines, porque un año es un integer y así se debió declarar ese campo en la tabla.
Con lo cual, la consulta más correcta podría ser así:
SELECT * FROM tablataller WHERE nombre LIKE '%jorge%' AND ingreso = 2014;
En gambas se puede hacer con código nativo igualmente, pero si usas sentencias sql es preferible usar sustituciones usando los parámetros del procedimiento Exec:
resultado = Conectar1.Exec("Select * from tablataller where nombre like %&1% and ingreso = &2;", sNombre, dFecha)
Como ya he explicado en multitud de ocasiones, los comodines de sustitución &1 y &2 corresponden a las dos variables que se añaden como argumentos a la función Exec que son en este caso sNombre y dFecha. Sólo usa las que correspondan en tu programa, esos nombres son solo ilustrativos. De esta forma no hay que preocuparse de poner comillas ni concatenar variables dentro de la sentencia sql.
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"
|
#8 Jueves, 24 Diciembre 2015, 20:13 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Hacer Una Subconsulta En Sqlite?
jguardon, hola
tu primer planteo me confunde pues las fechas cuando se crea una base de datos de declaran como date o datatime que es mi caso.
sobre lo segundo tenes toda la razón, me falta conducta o disciplina de programador, sin hablar de experiencia.
y ya que me avisaste de mi mala praxis sintáctica.... el nombre de la tabla es incorrecto (ya shordi me ha reprendido varias veces) pues
la tablataller en realidad contiene ordenes de servicios... es decir su nombre natural es "ordenes".
saludos y gracias por los excelentes aportes....seguimos sumando experiencia en gambas.
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#9 Jueves, 24 Diciembre 2015, 20:24 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Como Hacer Una Subconsulta En Sqlite?
v3ctor escribió: jguardon, hola
tu primer planteo me confunde pues las fechas cuando se crea una base de datos de declaran como date o datatime que es mi caso.
Cierto. Al comparar sólo con el año, supuse que en ese campo sólo guardabas el año como un número. Si el campo es datetime, lo correcto es emplear una variable de tipo date para hacer la comparación, pero si el dato a comparar lo obtienes de un control que no sea un valuebox, tendrás convertirlo antes a tipo date para que funcione.
Por lo tanto, la consulta que puse antes creo que es válida. Los nombres de los campos son también confusos, ya que 'ingreso' no se asocia con una fecha, sino con una cantidad. Si puedes, cámbiala por 'fechaingreso' o algo que denote el tipo de campo.
Ten en cuenta que las comparaciones con fechas son más problemáticas por ser un dato complejo, ya sabes, año, mes, día, hora, etc, etc. Si no es exactamente lo que tienes almacenado en la base de datos, la comparación fallará. Para eso, tanto gambas como sql disponen de funciones que extraen uno de los componentes de las fechas.
En gambas, para el año por ejemplo se usa:
Year(Date), donde Date es la variable que contiene la fecha (por ejemplo el Value de tu ValueBox, de tipo Date)
En sql lo ha explicado muy bien ahtonio, se usa la función strftime()
https://www.sqlite.org/lang_datefunc.html
De esa forma, no tendrás errores al buscar sólo por el año.
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"
|
#10 Jueves, 24 Diciembre 2015, 20:46 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|