Fecha sin Hora

580 views
Skip to first unread message

Ronald

unread,
Apr 10, 2012, 6:25:30 PM4/10/12
to Comunidad de Visual Foxpro en Español
Hola,
Gente de la comunidad, espero me puedan ayudar con el siguiente
problema.
Resulta que ejecuto una consulta de selección con sqlexec a una tabla
de Oracle, esta tabla tiene un campo tipo fecha. Pero al momento de
bajarle el cursor resultante este baja con fecha hora.
Porque sucede esto? Necesito que este baje normal tipo fecha, ya que
este cursor lo tengo relacionado con controles de texto.

Gracias colegas.

Victor Espina

unread,
Apr 10, 2012, 6:30:36 PM4/10/12
to publice...@googlegroups.com
Esto sucede porque la columna en Oracle esta definida como DATETIME, o el driver ODBC que estas usando esta mapeando el tipo actual de la columna a DATETIME al momento de recuperar los datos.

La solucion mas sencilla es que anadas una columna tipo D al cursor resultante y hagas un REPLACE:

SQLEXEC(conn,"SELECT ...", "Q1")

ALTER TABLE Q1 ADD COLUMN fecha2 D
UPDATE Q1 SET fecha2 = TTOD(fecha)

Saludos

Victor Espina

ricardo peña

unread,
Apr 10, 2012, 6:33:45 PM4/10/12
to GRUPO-VFP GRUPO-VFP
Antes de usar alter......fíjate en la función TTOD que te convierte
 
un datetime en date.

Ricardo Luis Peña
Analista de Sistemas
BA - Argentina
011-15-4440-7378
 

Date: Tue, 10 Apr 2012 15:30:36 -0700
From: vesp...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: Fecha sin Hora

Ronald

unread,
Apr 10, 2012, 6:40:59 PM4/10/12
to Comunidad de Visual Foxpro en Español
Victor Gracias por tu atención:
Este tipo de problemas es normal? sucede que recién comienzo con
aplicaciones cliente / servidor y no estoy muy familiarizado con el
tema. Esta es la segunda vez que se me presenta este inconveniente.
Por cierto revisé el tipo de dato del campo de la tabla en Oracle y
esta es tipo Date no DateTime así que supongo que el problema debe de
ir por el driver ODBC.

Gracias

Ronald Bartens

Victor Espina

unread,
Apr 10, 2012, 6:54:48 PM4/10/12
to publice...@googlegroups.com
Pues la verdad si.  La mayoria de los gestores de BD no tiene un tipo DATE como el de VFP sino que se manejan con un DATETIME, asi que lo mas sano es evitar el uso de DATE en VFP para asi no tener problemas.

Sin embargo, algo con lo que tienes que tener cuidado, sobre todo en los reportes, es la diferencia fundamental entre un campo DATE y uno DATETIME.

Si tu almacenas la informacion de hora en campo DATETIME y haces algo como esto:

LOCAL dHoy
dHoy = DATE()

SQLEXEC(conn, "SELECT * FROM tabla WHERE fecha = dHoy")

el driver ODBC convertira la fecha 10-04-2012 en el valor '10-04-2012 00:00:00', por lo que el SELECT solo traera aquellos registros donde fecha sea EXACTAMENTE 10-04-2012 00:00:00, dejando POR FUERA transacciones del mismo dia pero con otra ora distinta.

El problema se ve mas claro con un rango de fechas. Digamos que queremos sacar un resumen de ventas del mes:

LOCAL dDesde, dHasta
dDesde = CTOD('01-03-2012')
dHasta = CTOD('31-03-2012')

SQLEXEC(conn, "SELECT SUM(total) FROM facturas WHERE fecha BETWEEN ?dDesde AND ?dHasta")

dado que las fechas se convierten a la hora 00:00:00, el monto total obtenido NO INCLUIRA las facturas hechas el 31-12-2012 DESPUES de las 00:00:00, lo que a todos los efectos practicos significa que no se toman en cuan las ventas del ultimo dia.

La solucion es simple, una vez que estas consciente del problema:

dDesde = DTOT(CTOD('01-03-2012'))
dHasta = DTOT(CTOD('31-12-2012') + 1) - 1

lo que haces es sumarle 1 dia a la fecha hasta (en formato DATE), convertir el valor a DATETIME y luego restarle 1 segundo, con lo que obtienes una fecha que equivale al ultimo dia del mes a las 23:59:59.

El otro punto a tomar en cuenta en el caso de VFP es que algunas bases de datos no soportan directamente el tipo boolean, como es el caso de versiones anteriores de Oracle.  Por esto, la politica mas segura es NO manejar campos boolean sino manejarlos o bien como CHAR(1) o como BIT, TINYINT o SMALLINT, usando 0 para falso y 1 para verdadero.

Saludos

Victor Espina

Ronald

unread,
Apr 10, 2012, 7:06:15 PM4/10/12
to Comunidad de Visual Foxpro en Español
Gracias Victor,
Que te puedo decir...me dejaste sin palabras.

Ronald Bartens
Reply all
Reply to author
Forward
0 new messages