Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Busqueda Filtrada
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Busqueda Filtrada 
 
Hola muy buenas noches como estan, espero que bien y grandes abrazos en este nuevo año, saludos.

El tema que quiero tratar es sobre busquedas filtradas en base de datos en este caso pues se trata de fechas, resulta que en un sistema me mandaron a hacer una consulta en tabla por fechas pero estas fechas deben estar comprendidas entre xxx y yyy de diferentes registros digamos que se puede hacer con una consulta where=fecha perfecto puedo traer la fecha siempre y cuando pertenezcan a un mismo registro pero si me pongo a ver no creo que exista una consulta de una determinada fecha del primer registro con el segundo pienso que eso es imposible a menos que haga dos gridviews y les haga una consulta where a cada uno y alli si mostraria fechas de diferentes registros, nose si me explique bien quiza ustedes si sepan del asunto porque no le veo logica hacer un gridview con una consulta de dos registros diferentes osea del registro [1-codigo,nombre, apellido, fecha] y haya otro [2.codigo, nombre, apellido, fecha] y que se puede hacer una consulta del año (d/m/y al d/m/y), disculpen yo quiero es que me digan si existe una consulta asi o hay que hacer dos gridviews para hacer cada consulta gracias.
 



 
jousseph - Ver perfil del usuarioEnviar mensaje privadoVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
No entendí nada.
   
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
Si seguro fue el año anterior que te cayo mal señor shordi, mucha cerveza y brindis los ojos estan="" y las variables mentales quedaron=null jajajaja, hasta a mi jajajaj, saludos

Voy al grano si tenemos dos registros el primero  (1) QUE TIENE CAMPOS (CODIGO, NOMBRE, FECHA) LUEGO METO OOOOOTRO REGISTRO, (2) QUE TAMBIEN TIENE (CODIGO, NOMBRE, FECHA) DEBO BUSCAR ENTRE ESOS 2 REGISTROS FECHAS ENTRE (00/00/0000) Y (00/00/0000) o digamos (22/01/2013) y (01/10/2014) que me haga una consulta de esa manera digamos el indice de delitos entre esos años o cualesquiera a eso me refiero pero de dos registros diferentes.
 



 
última edición por jousseph el Sabado, 11 Enero 2014, 03:01; editado 1 vez 
jousseph - Ver perfil del usuarioEnviar mensaje privadoVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
select * from tabla where fecha <= fecha_maxima and fecha >= fecha_minima

Con eso pillas el rango que busca, si es que he entendido lo que quieres.
 



 
última edición por shordi el Sabado, 11 Enero 2014, 03:58; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
Citar:
select * from tabla where fecha <= fecha_maxima and fecha >= fecha_minima


Señor estoy intentando probar asi parecido como ud la menciona pero me lanza un error de sintaxis:

conexion.hresul = conexion.hconn.Exec("Select *from delitos where fecha_delito='" & TextBox_codigo_delito_expediente1.Text & "'" And "'fecha_delito = '" & TextBox_codigo_delito_expediente2.Text & "'")

Que podria estar sucediendo.
 



 
jousseph - Ver perfil del usuarioEnviar mensaje privadoVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
Hola

Creo que el problema lo tienes en tratar fechas como si fueran texto. Me explico: supongo que fecha_delito es de tipo date en la base de datos y tú lo estás igualando con un tipo string (TextBox.Text).

Tendrías que realizar una conversión de tipos, por ejemplo:
Citar:
... where date_format(fecha_delito, '%Y/%m/%d') = '" & Format$(TextBox_codigo_delito_expediente1.Text, "yyyy/mm/dd") & "'"

 



 
gatoviejo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
Además no pones los operadores correctos son <= (no menor que) y >= (no mayor que). Tú pones = en ambos casos, lo cual es imposible (A no puede ser igual a B e igual a C si B y C son distintos).
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
depende de la base de datos y la configuarcion   regional
a veces se cambia el mes por el año o el dia y por eso no funcionan las consultas


afortunadamente  existe unas normas
ansi o iso 8661

la fecha la colocas en un formato
 'YYYY-MM-DD'  o  'YYYYMMDD'  
algunas bases usan la fecha con  % y otras con  '

de seguro en la documentacion hay algun ejemplo

como sea si las fechas las ingresas  como texto
dd-mm-aaaa   solo creas una funcion que reordene a la fecha a un formato estandar
y asi no falla
 



 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
Hola Jousseph

Creo que deberías esforzarte más en llamar a las cosas por su nombre. Hablas de registros cuando  te refieres a tablas y otras cosas que sinceramente cuesta mucho entender. Tómate mas tiempo en redactar tus mensajes del foro con explicaciones más elaboradas y que los demás podamos entender. También trata de investigar y leer en otros lugares sobre el problema que tienes. Si buscas en google "buscar entre dos fechas en sql" vas a encontrar un montón de información al respecto, lo que ocurre es que si no tienes una mínima base de conocimiento para comprenderlo, pues te va a resultar difícil. Otra cosa importante es nombrar los controles por lo que realmente van a ser, es decir, si vas a manejar fechas, usa un control para manejar fechas (y no texto) y además dale un nombre significativo como dtcFechaInicio, donde dtc es una abreviatura del tipo de control, en este caso datechooser. Lo que es incomprensible es que un control que se supone que va a manejar fechas se llame TextBox_codigo_delito_expediente1 y además siendo un textbox lo uses para manejar fechas. Al menos eso es lo que parece al leer tu código...

Bueno, después de este pequeño rapapolvos de año nuevo que venías buscando, voy a explicar un par de detalles que te van a facilitar la vida en gambas, cuando tratamos con fechas en las bases de datos:

Es muy importante trabajar con controles de gambas que manejen las fechas nativamente, como datebox o datechooser, cuya propiedad Value recibe o establece su valor como tipo Date (de gambas). Es decir, vas siempre a manejar una variable de tipo Date para almacenar fechas y NUNCA debes convertirlas a String para trabajar con fechas, de acuerdo?

Cuando vayamos a usar esos valores de tipo date en una consulta sql, vamos a emplear una sintaxis de gambas que internamente usa Subst() que es una función que sustituye las variables dentro de la cadena sql usando comodines. Ya sea que almacenes una fecha en una variable de tipo Date o directamente uses el valor de un control que maneje fechas, no tendrás que hacer conversiones excepto para representar esa fecha en un control de texto. Un ejemplo vale más que mil palabras:

conexion.hconn.Exec("Select * from delitos where fecha_delito between &1 and &2", fecha_inicio, fecha_fin)


Vamos a explicar ese código:

Lo que vemos es que hemos empleado los caracteres &1 y &2 como comodines para que la función Exec los sustituya posteriormente por los argumentos que van a continuación de la consulta sql. En este caso hemos usado unas variables (que me he inventado) que representan la fecha de inicio y la fecha final sobre la que quieres hacer la consulta. También podrías haber empleado directamente los valores de los controles, como por ejemplo datechooser_inicio.Value  y  datechooser_final.Value. Esta sintaxis nos asegura que siempre funcione la consulta ya que las conversiones las hace gambas internamente, evitando que tengas que poner comillas, concatenar, etc... lo cual siempre es bastante confuso.

Lo segundo es conocer un poco de sql para emplear la sintaxis más sencilla o más efectiva, dependiendo de lo que queramos hacer. En este caso he usado el operador BETWEEN que busca entre dos valores máximo y mínimo o viceversa. ( http://www.w3schools.com/sql/sql_between.asp ). También podríamos haber usado la sintaxis propuesta más arriba por shordi, la cual quedaría así:

conexion.hconn.Exec("select * from tabla where fecha_delito >= &1 and fecha_delito <= &2", fecha_inicio, fecha_fin)


En ambos casos, independientemente del motor de bases de datos que uses, esto funcionaría. No hay conversiones, no hay comillas, no hay concatenaciones de cadenas y variables, por lo tanto hay menos posibilidades de cometer errores, el código es mucho más limpio y comprensible y además más sencillo de mantener.

Resumiendo un poco, no hay que preocuparse mucho por las fechas y su formato siempre que usemos controles diseñados para tal fin, porque internamente van a representar un objeto de tipo fecha en el formato de nuestro idioma. Por lo tanto, si no rompemos la cadena, no tendremos problemas. Las bases de datos como mysql, tienen un tipo de campo DATE o DATETIME, que podemos extraer en gambas como un objeto de tipo date de gambas, pero si lo hacemos como cadena, empezarán nuestros problemas. En sqlite3 aunque no tiene realmente tipos de datos (todo son strings) si usamos objetos date para guardar y consultar de la manera que he explicado, gambas hará las conversiones por nosotros y sólo en casos muy concretos tendremos que formatear una fecha para representarla en un control de texto, pero repito, nunca para guardarla en la BD.

Jousseph, espero que este post sea de ayuda y puedas finalmente concluir tu trabajo. Si tienes dudas pregunta, pero recuerda los consejos de arriba y ordena tus ideas antes de preguntar.  

Ánimo y 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"
 
última edición por jguardon el Sabado, 11 Enero 2014, 19:36; editado 1 vez 
Editado por jguardon, Sabado, 11 Enero 2014, 19:36: Segundo bloque de código no se mostraba correctamente
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Busqueda Filtrada 
 
Citar:
Además no pones los operadores correctos son <= (no menor que) y >= (no mayor que). Tú pones = en ambos casos, lo cual es imposible (A no puede ser igual a B e igual a C si B y C son distintos).


A claro señor Shordi si porque no tiene logica buscar dos fechas iguales la logica es buscar fechas diferentes, pero esta bien asi? entonces lo que tengo es cambiarle los signos verdad?.


Citar:
Creo que el problema lo tienes en tratar fechas como si fueran texto. Me explico: supongo que fecha_delito es de tipo date en la base de datos y tú lo estás igualando con un tipo string (TextBox.Text).

Tendrías que realizar una conversión de tipos, por ejemplo:

    Citar:
    ... where date_format(fecha_delito, '%Y/%m/%d') = '" & Format$(TextBox_codigo_delito_expediente1.Text, "yyyy/mm/dd") & "'"


Señor gatoviejo
Me parece interesante eso de verdad que no sabia nada de lo de la conversion yo ssi note anoche que las fechas tenian un problema.


Citar:
Off topic
depende de la base de datos y la configuarcion regional
a veces se cambia el mes por el año o el dia y por eso no funcionan las consultas


afortunadamente existe unas normas
ansi o iso 8661

la fecha la colocas en un formato
'YYYY-MM-DD' o 'YYYYMMDD'
algunas bases usan la fecha con % y otras con '

de seguro en la documentacion hay algun ejemplo

como sea si las fechas las ingresas como texto
dd-mm-aaaa solo creas una funcion que reordene a la fecha a un formato estandar
y asi no falla


Señor codificador fijese que anoche note que las fechas tenian un problema al almacenarse tanto en sqlite como en mysql en sqlite son por ejemplo hoy es 11/01/2014 y en la bd es sqlite: 01/11/2014 cosa que no comprendia en mysql es al reves 2014-01-11 pero el que realmente me la ponia mal es en el bendito gridview que me salia 01/11/2013 entonces dije mejor voy a cambiar el datebox por textbox y el campo de la bd en text y se guardo bien porque no me cuadraban las consultas, miren la imagen:

 problemas_con_las_fechas

Si notan el problema con las fechas? una cosa es en mysql otra es en sqlite y otra es en el gridview.
 



 
jousseph - Ver perfil del usuarioEnviar mensaje privadoVer la galería personal del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Busqueda En Sqlite3 Guizans Bases de Datos 7 Martes, 11 Septiembre 2012, 21:00 Ver último mensaje
Guizans
No hay nuevos mensajes Busqueda Por Autor En La Granja!!! v3ctor General 2 Viernes, 07 Agosto 2015, 00:43 Ver último mensaje
v3ctor
No hay nuevos mensajes Problema Con Indice De Busqueda Mysql desoljor Aplicaciones/Fragmentos de Código 4 Lunes, 11 Enero 2016, 20:16 Ver último mensaje
desoljor
No hay nuevos mensajes Busqueda En Bases De Datos Mediante Yaz Y ... tincho Mundo Linux 5 Viernes, 12 Octobre 2018, 00:34 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

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