Discussion:
Problemas con fechas, acces invierte el mes por el dia!!!
(demasiado antiguo para responder)
Jorge Novoa
2007-07-03 02:59:21 UTC
Permalink
Estimados todos,

Tengo un problema con las fechas en access, y me gustaría me ayudasen.

Resulta ser que. como muchos han de saber ya, access invierte de vez en
cuando el mes y día en las fechas.

Antes de continuar les comento mi configuración:
-Windows XP Professional SP2 en español
- Office 2003 Professional en español
- Configuración regional: formatos EL SALVADOR, ubicación: EL SALVADOR, (se
entiende que nosotros usamos el formato: dia/mes/año.)
- Formato de fecha corta: dd/MM/aaaa
- Los campos de fechas en mi aplicación en access tienen el formato de fecha
corta.

PERO cuando se introducen las fechas, access hace 'lo que quiere' con ellas.
Durante el mes de Junio, las fechas ingresadas, por ej. el 25 de Junio, es
decir 25/06/2007 se almacenaban sin problemas, pero al llegar Julio, el 1 de
julio (01/07/2007), es almacenado como 7 de Enero (07/01/2007), por ejemplo.

He revisado, y re-revisado las configuraciones, y además cuando inserto los
datos en las tablas, a pesar de tratar de forzar el dato y yo le indique el
formato, por ej. Format(date,"dd/mm/yyyy"), siempre ingresa las fechas como
1 de Enero de 2007.

Voy a ver los datos a las tablas, y en efecto el día y mes están invertidos.
Y no se trata de un problema de display de los datos, pues cuando hago una
consulta para el "01/07/2007" (uno de julio), simplemente no me devuelve
datos, pero sí cuando es para el "07/01/2007", osea: 7 de enero.

¿Qué puedo hacer para resolver esta situación? ¿Cómo puedo controlar esto?

Sé que más de unas decenas de uds. han tenido esta situación y saben cómo
resolverla.

Les agradeceré infinitamente su ayuda.

Saludo cordiales,
Jorge Novoa
unknown
2007-07-03 14:08:33 UTC
Permalink
Que raro... generalmente el problema viene de la configuración regional de
Windows. Prueba poner como más cara de entrada 99/99/9999 y formato fecha en
el campo del formulario. Asegurate que en la tabla el formato esté tambien
formato fecha corta y la máscara. Comprueba una vez más la configuración
regional.-
Alfonso Martinez HERNANDEZ
2007-07-05 07:26:21 UTC
Permalink
"José A. Giménez [Py]" <gimenezj(arroba)hotmail(punto)com> escribió en el
Post by unknown
Que raro... generalmente el problema viene de la configuración regional de
Windows. Prueba poner como más cara de entrada 99/99/9999 y formato fecha en
el campo del formulario. Asegurate que en la tabla el formato esté tambien
formato fecha corta y la máscara. Comprueba una vez más la configuración
regional.-
Cuando se usa VBA (codigo) el formato de las fechas es el Americano
Patxi Sanz
2007-07-03 15:45:12 UTC
Permalink
Hola Jorge:

Las fechas, ¿las introduce el usuario tecleando o se introducen mediante
código o consultas?
--
Un saludo,


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
Tudela (NA)
Chea
2007-07-03 16:26:48 UTC
Permalink
Access no trata caprichosamente las fechas. Lo que ocurre es que puede
utilizar o entender distintos formatos dependiende del contexto: En la parte
más profunda, en VB y SQL, sólo entiende el formato americano, "mm/dd/yy",
mientras que en la interfaz de usuario utiliza el formato regional de
nuestro PC o, incluso, el que nosotros le indiquemos en la propiedad
Formato.

Es fácil equivocarse y se pueden producir errores por no hablarle a Access
en el idioma adecuado o por no saber en qué idioma nos está hablando.

Naturalmente, cabe que se deba a un error de tu instalación, pero también es
bastante probable que se deba a un error tuyo y,para discriminar,
necesitamos saber cómo introduces esas fechas ¿En código? ¿En un formulario?
¿Directamente en la tabla?, cómo verificas sus valores y cómo haces esas
consultas de comprobación.

Yo apostaría a que, o tienes una instalación muy rara en tu PC, o se debe a
un error tuyo.
--
Saludos

José Bengoechea Ibaceta [MS-MVP Access]
http://jbengoechea.com/
Post by Jorge Novoa
Estimados todos,
Tengo un problema con las fechas en access, y me gustaría me ayudasen.
Resulta ser que. como muchos han de saber ya, access invierte de vez en
cuando el mes y día en las fechas.
-Windows XP Professional SP2 en español
- Office 2003 Professional en español
- Configuración regional: formatos EL SALVADOR, ubicación: EL SALVADOR, (se
entiende que nosotros usamos el formato: dia/mes/año.)
- Formato de fecha corta: dd/MM/aaaa
- Los campos de fechas en mi aplicación en access tienen el formato de fecha
corta.
PERO cuando se introducen las fechas, access hace 'lo que quiere' con ellas.
Durante el mes de Junio, las fechas ingresadas, por ej. el 25 de Junio, es
decir 25/06/2007 se almacenaban sin problemas, pero al llegar Julio, el 1 de
julio (01/07/2007), es almacenado como 7 de Enero (07/01/2007), por ejemplo.
He revisado, y re-revisado las configuraciones, y además cuando inserto los
datos en las tablas, a pesar de tratar de forzar el dato y yo le indique el
formato, por ej. Format(date,"dd/mm/yyyy"), siempre ingresa las fechas como
1 de Enero de 2007.
Voy a ver los datos a las tablas, y en efecto el día y mes están invertidos.
Y no se trata de un problema de display de los datos, pues cuando hago una
consulta para el "01/07/2007" (uno de julio), simplemente no me devuelve
datos, pero sí cuando es para el "07/01/2007", osea: 7 de enero.
¿Qué puedo hacer para resolver esta situación? ¿Cómo puedo controlar esto?
Sé que más de unas decenas de uds. han tenido esta situación y saben cómo
resolverla.
Les agradeceré infinitamente su ayuda.
Saludo cordiales,
Jorge Novoa
Jorge Novoa
2007-07-03 22:58:20 UTC
Permalink
Hola amigos,

En realidad he descubierto que el formato de fecha corta es más para display
que para input. Excepto para un control dependiente. Es decir que si yo le
defino a la tabla que ese campo tiene el formato fecha corta, en los
formularios estará todo bien para el bound control de ese campo fecha.

PERO cuando se trata de introducir las fechas en un control independiente
(unbound control).... para luego hacer un docmd.runsql "update..." o
insert.... entonces es cuando access usa el formato mm/dd/yyyy, por lo que
hay que especificar la fecha como cadena, no como fecha, por ej para el 2 de
julio: "....SET Fecha ='02/07/2007' " nada de "SET Fecha = #02/07/2007#"

Muchas gracias!

Jorge Novoa
Post by Chea
Access no trata caprichosamente las fechas. Lo que ocurre es que puede
utilizar o entender distintos formatos dependiende del contexto: En la
parte más profunda, en VB y SQL, sólo entiende el formato americano,
"mm/dd/yy", mientras que en la interfaz de usuario utiliza el formato
regional de nuestro PC o, incluso, el que nosotros le indiquemos en la
propiedad Formato.
Es fácil equivocarse y se pueden producir errores por no hablarle a Access
en el idioma adecuado o por no saber en qué idioma nos está hablando.
Naturalmente, cabe que se deba a un error de tu instalación, pero también
es bastante probable que se deba a un error tuyo y,para discriminar,
necesitamos saber cómo introduces esas fechas ¿En código? ¿En un
formulario? ¿Directamente en la tabla?, cómo verificas sus valores y cómo
haces esas consultas de comprobación.
Yo apostaría a que, o tienes una instalación muy rara en tu PC, o se debe
a un error tuyo.
--
Saludos
José Bengoechea Ibaceta [MS-MVP Access]
http://jbengoechea.com/
Post by Jorge Novoa
Estimados todos,
Tengo un problema con las fechas en access, y me gustaría me ayudasen.
Resulta ser que. como muchos han de saber ya, access invierte de vez en
cuando el mes y día en las fechas.
-Windows XP Professional SP2 en español
- Office 2003 Professional en español
- Configuración regional: formatos EL SALVADOR, ubicación: EL SALVADOR, (se
entiende que nosotros usamos el formato: dia/mes/año.)
- Formato de fecha corta: dd/MM/aaaa
- Los campos de fechas en mi aplicación en access tienen el formato de fecha
corta.
PERO cuando se introducen las fechas, access hace 'lo que quiere' con ellas.
Durante el mes de Junio, las fechas ingresadas, por ej. el 25 de Junio, es
decir 25/06/2007 se almacenaban sin problemas, pero al llegar Julio, el 1 de
julio (01/07/2007), es almacenado como 7 de Enero (07/01/2007), por ejemplo.
He revisado, y re-revisado las configuraciones, y además cuando inserto los
datos en las tablas, a pesar de tratar de forzar el dato y yo le indique el
formato, por ej. Format(date,"dd/mm/yyyy"), siempre ingresa las fechas como
1 de Enero de 2007.
Voy a ver los datos a las tablas, y en efecto el día y mes están invertidos.
Y no se trata de un problema de display de los datos, pues cuando hago una
consulta para el "01/07/2007" (uno de julio), simplemente no me devuelve
datos, pero sí cuando es para el "07/01/2007", osea: 7 de enero.
¿Qué puedo hacer para resolver esta situación? ¿Cómo puedo controlar esto?
Sé que más de unas decenas de uds. han tenido esta situación y saben cómo
resolverla.
Les agradeceré infinitamente su ayuda.
Saludo cordiales,
Jorge Novoa
unknown
2007-07-04 13:20:11 UTC
Permalink
Interesante, apra tener en cuenta....
Chea
2007-07-04 13:49:43 UTC
Permalink
Pienso que es un planteamiento inadecuado.

El delimitador ' puede ser apropiado para otras bases de datos (si mal no
recuerdo, p. ej. SQL Server), pero el delimitador de fechas en Access y en
el SQL de Access es #

En ambos casos, construir una sentencia directamente en SQL sin usar el
formato "mm/dd/yy", nos dará un error.

Lo correcto es usar el formato de fecha corta (o larga) de nuestra
configuración regional para todas las entradas y salidas que se hagan a
través de la interfaz del usuario (formularios, informes) y el formato
"mm/dd/yy" cuando trabajamos en VB o en SQL. Si desde VB o SQL hacemos una
referencia a un control de la intervaz del usuario, por ejemplo, un cuadro
de texto mostrando un fecha, debemos convertirlo usando Format (miControl,
"mm/dd/yy")

Hay que tener en cuenta que un control contiene un valor Variant. Si es un
Variant tipo fecha, al asignar un valor a un campo o variable de fecha
directamente, lo hará correctamente:

MiFecha = MiControlFecha

Pero si queremos hacer una concatenación para representar su valor, por
ejemplo, para una consulta, debemos formatear adecuadamente, porque en la
concatenación lo que se mostrará será el valor textual del control

Mifecha = "#" & format (MicontrolFecha, "mm/dd/yy") & "#"
--
Saludos

José Bengoechea Ibaceta [MS-MVP Access]
http://jbengoechea.com/


"José A. Giménez [Py]" <gimenezj(arroba)hotmail(punto)com> escribió en el
Post by unknown
Interesante, apra tener en cuenta....
estufa
2007-07-07 14:22:14 UTC
Permalink
Veo que no es lo mismo esto:
CurrentDb.Execute ("INSERT INTO Tabla1 (Fecha1) values('" + CStr(Now)
+ "')")
Que esto:
CurrentDb.Execute ("INSERT INTO Tabla1 (Fecha1) values(#" + CStr(Now)
+ "#)")

El primero (con comilla simple) lo hace bien y el segundo (con #) mal.
Si hoy es 06/07/2007 (dd/mm/aaaa), el primero inserta bien el dato y
el segundo me cambia el día por el mes quedando 07/06/2007.
Veo que si el valor lo inserto desde un RecordSet, lo hace bien.
p.ej:
DAORS!Fecha1 = now
DAORS!Fecha1 = #6/7/2007#
DAORS!Fecha1 = "6/7/2007"
En los tres casos la fecha queda como 6/julio/2007.

En resumen, la solución parece estar en usar ' en lugar de # para
insertar fechas mediante consulta SQL y que queden bien.
Supongo que la parte SQL interpreta la fecha si le viene entre # y en
cambio, si le viene con ' sencillamente mete el valor sin darle
formato.
Espero haber aportado algo.
Patxi Sanz
2007-07-06 15:08:43 UTC
Permalink
Hola Estufa:

¡Ahora voy y lo casco, que dirían Cruz y Raya! Prueba a cambiar la
configuración regional de la fecha en tu PC: por ejemplo, al formato
MM/dd/aaaa (mes/día/año), y vuelve a hacer tu prueba: ¿qué ocurre? que las
fechas se insertan igual de bien, independientemente de como lo hagas. Haz
pruebas con otras configuraciones regionales de fecha, y te encontrarás que
si la configuración es, por ejemplo, aaaa/MM/dd (año/mes/día), también da
igual como lo hagas, la fecha se inserta bien. Pero si la configuración es
aaaa/dd/MM (año/día/mes), da igual como insertes la fecha, se inserta mal
(el 6 de julio lo convierte en 7 de junio).

¿Por qué ocurre esto? Porque la comilla (') es un delimitador de texto,
mientras que la almohadilla (#) es un delimitador de fecha y hora. Entonces,
al usar la comilla en:

CurrentDb.Execute ("INSERT INTO Tabla1 (Fecha1) values('" + CStr(Now) +
"')")

Lo que estás indicando es: inserta la fecha y hora, que te doy en un formato
que desconozco, en la tabla. Access, va a la configuración regional, e
intenta convertir la fecha y hora que le has dado, según la configuración
regional, a un formato que el conoce (mes/día/año o año/mes/día). Si lo que
le has pasado, se puede considerar que está en el formato adecuado, no
cambia nada y lo inserta. Si no es así, hace los cambios que cree oportunos,
e inserta la fecha que le da la gana.

En cambio, cuando usas la almohadilla en:

CurrentDb.Execute ("INSERT INTO Tabla1 (Fecha1) values(#" + CStr(Now) +
"#)")

Le dices a Access: inserta la fecha y hora en la tabla, teniendo en cuenta
que está en el formato mm/dd/aaaa (mes/día/año) o en el formato aaaa/mm/dd
(año/mes/día). Y Access lo hace así. Pero entonces, ¿por qué nos inserta la
fecha al revés (día y mes)? Porque antes de pasar la fecha, estás usando
CStr(), que convierte la fecha a una cadena de texto con el formato que se
ha indicado en la configuración regional. Entonces, aunque tú crees que
estás pasando la fecha 07/06/2007 (seis de julio), en realidad le estás
pasando la fecha 06/07/2007 (siete de junio), porque al usar el delimitador
almohadilla, Access espera uno de los 2 formatos indicados: americano
(mm/dd/aaaa) o ISO (aaaa/mm/dd).

Pero a lo que iba: ¿cómo pasar bien una fecha? Pues como dice el maestro
Chea: usando la almohadilla y la función Format, para pasar la fecha en un
formato que Access entienda bien y sin ambigüedades:

CurrentDb.Execute ("INSERT INTO Tabla1 (Fecha1) values(#" & Format(Now,
"mm/dd/yyyy") & "#)")
CurrentDb.Execute ("INSERT INTO Tabla1 (Fecha1) values(#" & Format(Now,
"yyyy/mm/dd") & "#)")

P.D.: Auque el + puede concatenar texto, el símbolo & es el que realmente
une texto y devuelve un texto. El símbolo + te puede sumar textos (1 + 2 =
3; 1 & 2 = 12).
--
Un saludo,


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
Tudela (NA)
estufa
2007-07-08 17:02:29 UTC
Permalink
Desde luego, veo que hay que hacer algunas pruebas antes de dar algo
por acabado con esto de las fechas.
Con RecordSets funciona de una manera, con SQL de otra, y seguro que
hay más maneras.

Y la verdad, no se puede culpar a nadie pues imagino que debe ser
realmente difícil si no imposible saber qué demonios significa:
01/06/07, por ejemplo.
Y para eso imagino que inventaron el Format que dices.

Un saludo.
Patxi Sanz
2007-07-09 09:34:04 UTC
Permalink
Hola Estufa:

Pues sí, las fechas son un poquitín "asquerosillas" para tratarlas. Pero con
un poco de estudio, se hacen bastante sencillas de entender:

- http://support.microsoft.com/kb/826766/es
- http://support.microsoft.com/kb/210276/es
- http://support.microsoft.com/kb/130514/es
- http://support.microsoft.com/kb/88657/es
- http://support.microsoft.com/kb/210249/es
--
Un saludo,


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
Tudela (NA)
Continúe leyendo en narkive:
Loading...