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 16-07-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 26
vtdeleon Va por buen camino
Cita:
Empezado por lbuelvas
Por eso diseñe una funcioncita que me convierta los TDateTime en una cadena con la fecha en el formato mm/dd/yyyy.
Y esta?
Código Delphi [-]
//***No tengo delphi a mano y lo hare de memoria.***

function FechaD (Fecha:TDateTime; Format:Integer=0): String;
begin
  Case Format of
   0: result:=FormatDate('dd/mm/yy', Fecha);
   1: result:=FormatDate('mm/dd/yy', Fecha);
   2: result:=FormatDate('yy/mm/dd', Fecha);
  End;
end;
Espero que funcione, pues no lo he probado.

Pero como he dicho en otros hilos, es mejor utilizar parametros para asignar cualquier fecha. Asi el componente y la BBDD se encargan del trabajo sucio de conversion.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #2  
Antiguo 17-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Pues como ha dicho ya Mick prefiero delegar en Delphi:

Código Delphi [-]
query1.sql.text:= 'select * from tabla where fecha between :ini and :fin';
query1.parambyname('ini').AsDate := datetimepicker1.date;
query1.parambyname('fin').AsDate := datetimepicker2.date;
query1.Open;

Hacerlo de otra forma ensucia mucho el código; tampoco nos asegura de que ese motor espere una fecha en formato mm/dd/yyyy, y en último caso, una fecha del tipo 01/02/2006 puede ser interpretada tanto el 2 de Enero, como de el 1 de Febrero.

Os remito mi experiencia: trabajando con Oracle y usando un rango de fechas desde 01/02/2005 al 23/02/2005 la primera fecha la encajaba en el formato mm/dd/yyyy y la segunda fecha en dd/mm/yyyy; funcionar.... funcionaba, pero realmente no hacía lo que esperaba.

Moraleja: Parámetros pepe, siempre parámetros

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 17-07-2006
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 24
joanajj Va por buen camino
No hago nada extraño

Buenas a todos, vtdeleton me pregunta que como lo hago, y ciertamente no hago nada raro.
Con la fecha de un datetimepicker y se la paso a la sentencia SELECT como parametro.

Algo así, por ej:

Código SQL [-]
SELECT FECHAT,CODIGOT,NOMBREY FROM TABLA1 WHERE FECHAT=:FECH1

donde fech1 es el parámetro que recoge el valor que le paso desde el datetimepicker, y al hacer activa la consulta(Si uso FBIplus) lanza el error de conversión de fecha, y es porque al pasar por ej. 21/12/2002 el considera que 21 es el mes, y evidentemente solo hay 12 meses, en cambio lo mismo lo hago con Mercury components o los de Interbase de Delphi y la consulta la hace perfecta(21 sería el día, y no el mes), y he hecho montón de pruebas.

Lo que digo: el problema se presenta solo con FBIplus, y haciendo lo mismo con otros componentes todo va bien, sin tocar nada.

Un saludo...
Responder Con Cita
  #4  
Antiguo 17-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Por curiosidad, ¿como tienes el formato de fecha definido en Windows? ¿el idioma de windows cual es?

Lo pregunto porque me resulta extraño que FIBPlus, uno de los más aclamados componentes, tengan ese tipo de "bug" (por llamarlo de alguna forma). ¿usas una versión beta o alpha de esos componentes?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 17-07-2006
Avatar de Hagen
Hagen Hagen is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 23
Hagen Va por buen camino
Con IBX y FIBPlus me funcionan igual las fechas

Hola

Estuve haciendo pruebas con respecto a tu problema.

Estoy usando dialecto 3 con Firebird 1.5.3, Delphi 7, FIBPlus 6.3 (NO la trial),
IBX 7.06, el tipo de dato para la fecha DATE.


Al pasar la fecha con separadores '/' o con '-' lo hice
de la forma mm/dd/yyyy ó mm-dd-yyyy

Al pasar la fecha con separadores '.' lo hice
de la forma dd.mm.yyyy

De acuerdo a esto si quiero pasar el 1 de Febrero de 2006
tengo que poner 02/01/2006 ó 01.02.2006


De esta manera NO obtuve NINGUN ERROR, usando los 2 componentes de acceso
a base de datos (IBX y FIBPlus). Al decir ningun error me refiero a que
no obtenia errores de conversion y a que me devolvia el registros con la
fecha (correcta) que yo le indicaba.


Con AMBOS componentes obtuve ERROR al pasar la fecha en esta forma

30/04/2006

ó sea que en ningun caso me acepto la fecha 30/04/2006 COMO VALIDA; pero tu
dices que con IBX si te funciona?

Que version de Firebird, IBX, FibPlus, usas?

Estas usando el tipo de dato DATE o el TIMESTAMP?


PD.- Cuando dices que lo tienes configurado como dd/mm/yyyy, supongo
que te refieres a la propiedad DefaulFormats del TpFIBDataSet.
Te dire que esta propiedad SOLO sirve para indicar la forma en que
se mostrara la fecha y no tiene nada que ver con los parametros que
le pases al TpFIBDataSet
Responder Con Cita
  #6  
Antiguo 17-07-2006
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 24
joanajj Va por buen camino
Más datos

Saludos, añado más información al respecto.

Los FIBPlus son los 6.4
Los Mercury son la ultima RC2
Los de Interbase, son los que vienen en Delphi 7 por defecto.

dialect 3

y la ISO Española

Tipo de dato es DATE

En los tres casos, el formato de fecha que utilizo es dd/mm/yyyy, no uso dd.mm.yyyy.

Si es cierto lo del formato en el dataset, es como se muestran los datos al usuario.No tiene nada que ver.

El Firebird que uso es el 2.0(no sé hasta que punto tendrá algo que ver)

Y en los tres casos todo ha sucedido sin cambiar nada, usando las mismas sentencias SQL, que como indiqué más arriba no son nada del otro mundo, lo único que modifico son los componentes que uso, y las sentencias SQL las copio y pego de un componente a otro.

Pruebo 21/12/2003 y en:

FIBplus error(toma 21 como mes)
Mercury ok, y opero sin problemas. fecha 21 de diciembre de 2003
Paleta Interbase Delphi ok, sin problemas. fecha 21 de diciembre de 2003

No sé, yo por lo menos no doy con el problema. Es cierto que el problema es extraño y no consigo solucionarlo... Si alguien da con el problema y lo comenta aquí sería bueno para todos. Yo ya he decidido seguir con los Mercury que son los de Interbase mejorados y gratis.

Un saludo...
Responder Con Cita
  #7  
Antiguo 22-07-2006
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Hay algo que no estas haciendo bien. Usando parametros de la forma correcta, como el ejemplo de Lepe:

query1.parambyname('fin').AsDate := datetimepicker2.date;

No hay nunca la posibilidad de error.

La fecha no se pasa en ningun formato de cadena, sea mm/dd/YY o dd/mm/YY, se pasa en forma de variable datetime nativa de delphi (Fijarse en el AsDate ), que no es mas que un numero en punto flotante, que indica el numero de dias que han pasado desde el año 1900.
Eso significa que no puede haber nunca ningun problema de interpretacion ni de formato:

Es decir la fecha de hoy en una variable de fecha de delphi tiene el valor:

38920

Que significa simplemente que han pasado 38920 dias desde el 31 de diciembre de 1899.

Y este valor es el que se le asigna al parametro de la query, despues el componente ya se encargara de convertir ese numero al formato que sea y que necesite la base de datos. Lo que implica que no puede haber nunca ningun tipo de error en los formatos.

Da la impresion de que a pesar de usar parametros, en lugar de usar .AsDate para asignarlos se estuviese usando .AsString y pasando la interpretacion en forma de cadena en lugar de la variable Date nativa de delphi que al ser un simple numero no puede dar lugar a confusion.

Saludos
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
Guardar null (nolo) en un campo fecha en Firebird cahosoft Conexión con bases de datos 3 19-04-2014 09:54:17
Error al hacer insert (campo fecha) en firebird con fibplus Acanol Firebird e Interbase 7 15-06-2006 09:05:07
Problema con la Fecha ramonibk Varios 1 28-02-2005 19:30:29
Formato fecha en Firebird 1.5.1 mosorio Firebird e Interbase 1 05-11-2004 17:23:46
Formato fecha en FireBird HombreSigma Firebird e Interbase 2 22-06-2003 22:18:00


La franja horaria es GMT +2. Ahora son las 01:09:44.


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