Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 585
Poder: 23
santiago14 Va por buen camino
Thumbs up

Acabo de encontrar una forma, está buena...

Código SQL [-]
Select s.fecha_sumario, LPAD(s.nro_op, 9, '0') AS nro_op,
LPAD(ec.pto_vta_fact, 4, '0') || ' - ' || LPAD(ec.nro_fact, 8, '0') AS nro_factura,
ts.nombre_tit,
(Select LIST(LPAD(EXTRACT(DAY FROM fs.fecha_sumario), 2, '0') || '/' ||
      LPAD(EXTRACT(MONTH FROM fs.fecha_sumario), 2, '0') || '/' ||
      LPAD(EXTRACT(YEAR FROM fs.fecha_sumario), 4, '0'), ', ')
From fechas_sumario fs
Where fs.nro_op = s.nro_op) AS fechas_sumarios
From sumarios s, enc_factura ec, titulos_sec ts
Where s.cod_fact = ec.cod_factura
and s.cod_sec = ts.cod_sec
and s.renglon_tit = ts.renglon_tit
and CAST(s.fecha_sumario AS DATE) BETWEEN '01/01/2011' AND '12/31/2011'
and ec.cod_sucursal = 1

Con esto se me soluciona un drama, por lo menos en el LIST, bastante grande. Todos mis clientes me andan reclamando que tienen que "mirar la fecha de atrás para adelante". Envío el adjunto con el resultado.

Gracias a todos por su atención.

Santiago.
Imágenes Adjuntas
Tipo de Archivo: jpg sql.jpg (37,2 KB, 7 visitas)
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 28-01-2013
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Pero es que eso se soluciona muy fácil con la propiedad DisplayFormat tal como te lo han recomendado antes. Se ve que no has prestado atención al hilo.

En como interprete internamente las fechas firebird déjalos a los componentes, que bien saben hacer su trabajo. Ese esfuerzo inútil en hacer una consulta para "armar" la fecha como gustas se puede ahorrar.
Tu error está en concebir que las fechas se ingresan a tu forma. No... cada motor tiene la propia y si no la respetas allí tu.
Es por eso que los componentes ya disponen de las funcionalidades para solventar todo esto. Por ejemplo, quieres pasar una fecha pues basta con un:

Código Delphi [-]
MiDataSet.FieldByName('CampoFechaHora').asDateTime := MiFechaHora;

Siendo MiFechaHora una variable del tipo TDateTime, o si quieres algo directo le puedes pasar desde un TDtateTimePicker por ejemplo:

Código Delphi [-]
MiDataSet.FieldByName('CampoFechaHora').asDateTime := MiDTP.DateTime;

Ahora no interesa el formato de presentación que tengas... si es mm/dd/yyyy o yyyy/aa/mm o el que fuese. Los componentes se encargan del trabajo sucio y traducen este formato al interno que espera la base de datos.

A la inversa, al momento de presentar o leer los datos hay varias posibilidades de como encararlo. Puedes aprovechar el evento OnGetText o más fácil aún la propiedad DisplayFormat.

También esto aplica a los parámetros. En tu consulta se ve en el where un Between. ¡Pasa los datos como parámetros!

Código SQL [-]
BETWEEN :Fecha1 AND :Fecha2

Luego en tus parámetros les asignas los valores. Los parámetros harán el trabajo sucio y al final traduciran al formato adecuado que interprete Firebird.

Y si dicha evaluación con las fechas será fija, aprende y comprende que debes ceñirte al formato interno (que en el caso de Firebird es: dd.mm.yyyy hh:mm:ss.nnnn) en lo más posible ya que no obligas al motor que interprete, o mejor dicho intente, reconocer si lo escrito cumple con alguno de los formatos (véase la tabla 10-2) que es capaz de aceptar ya que con eso pierdes tiempo.

Esa consulta tarde o temprano será lentísima.
Ha decir verdad no se comprende ni hay una razón fundada que te impida seguir las recomendaciones que te han dado. No me queda otra explicación más que tu ignorancia sobre el tema y el desconocimiento, y asombro de tu parte, al notar el porqué firebird guarda "una fecha extraña" y en una cerradez de que "debe almacenar siempre como y lo que ingreso". No sabía que los campos de un motor de base de datos deban ser WYSIWYG. ¿O acaso tienes alguna explicación al respecto?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 28-01-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 585
Poder: 23
santiago14 Va por buen camino
Wink

Cita:
Y si dicha evaluación con las fechas será fija, aprende y comprende que debes ceñirte al formato interno (que en el caso de Firebird es: dd.mm.yyyy hh:mm:ss.nnnn) en lo más posible ya que no obligas al motor que interprete, o mejor dicho intente, reconocer si lo escrito cumple con alguno de los formatos (véase la tabla 10-2) que es capaz de aceptar ya que con eso pierdes tiempo.
La evaluación no será con fechas fijas, uso los parámetros. Nuevamente fue para que la cosa se graficara mejor.

Cita:
Esa consulta tarde o temprano será lentísima.
Ha decir verdad no se comprende ni hay una razón fundada que te impida seguir las recomendaciones que te han dado. No me queda otra explicación más que tu ignorancia sobre el tema y el desconocimiento, y asombro de tu parte, al notar el porqué firebird guarda "una fecha extraña" y en una cerradez de que "debe almacenar siempre como y lo que ingreso". No sabía que los campos de un motor de base de datos deban ser WYSIWYG. ¿O acaso tienes alguna explicación al respecto?

Saludos,
Estoy de acuerdo, por ello es que estoy buscando algo que me ayude a optimizarla. Lo de "fecha extraña" lo puse para que fuera mas gráfico el ejemplo y lo que buscaba, yo se, al igual que uds., que Firebird o cualquier motor guarda sus fecha en un formato adecuado.


Estoy probando el asunto de DisplayFormat, gracias nuevamente.

Un saludo Delphius, desde Salta a otro salteño.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #4  
Antiguo 28-01-2013
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 23
RONPABLO Va por buen camino
El displayFormat tampoco funcionará en esta consulta, ya que el list manda una cadena de texto, en este caso una o más de una fecha separada por comas, o mejor dicho, sí hay una sola fecha se podría tratar el dato como tipo Date y Delphi se encargaría solito de darle el formato según el PC en que se ejecute, pero acá no va a pasar eso ya que existe la pocibilidad (muy alta creo yo) de tener varias fechas sumario, por lo cual el que se encarga de hacer el cast de el campo tipo Date a varchar es Firebird y por lo tanto mandara un texto ordenado por año, mes día separado por guiones... sería bueno ver si Firebird tiene algo similar al DisplayFormat de Delphi aunque en el FAQ recomiendan hacer algo muy similar a extract
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #5  
Antiguo 28-01-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 585
Poder: 23
santiago14 Va por buen camino
Post

Cita:
Empezado por RONPABLO Ver Mensaje
El displayFormat tampoco funcionará en esta consulta, ya que el list manda una cadena de texto, en este caso una o más de una fecha separada por comas, o mejor dicho, sí hay una sola fecha se podría tratar el dato como tipo Date y Delphi se encargaría solito de darle el formato según el PC en que se ejecute, pero acá no va a pasar eso ya que existe la pocibilidad (muy alta creo yo) de tener varias fechas sumario, por lo cual el que se encarga de hacer el cast de el campo tipo Date a varchar es Firebird y por lo tanto mandara un texto ordenado por año, mes día separado por guiones... sería bueno ver si Firebird tiene algo similar al DisplayFormat de Delphi aunque en el FAQ recomiendan hacer algo muy similar a extract
En este caso la consulta que puse mas arriba está mas o menos bien encaminada...
Tengo varios casos en donde debo presentar una lista de fechas.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Manejo de Fechas en Firebird 2.1 Jose Roman SQL 3 17-02-2009 17:15:03
Firebird dialect 3 y fechas IVAND Firebird e Interbase 5 17-09-2008 19:16:48
firebird y fechas jmlifi Varios 4 05-09-2007 09:54:59
Fechas en Firebird Puche Firebird e Interbase 3 27-07-2006 10:09:52
Formato de fechas en FireBird 1.5 defcon1_es Firebird e Interbase 1 02-04-2004 17:02:52


La franja horaria es GMT +2. Ahora son las 16:19:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi