Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Fechas cruzadas

Estas en el tema de Fechas cruzadas en el foro de Visual Basic clásico en Foros del Web. Hola amigos: Tengo un serio problema con las fechas. Paso a explicar en un form escribo una fecha en un cuadro de texto y esta ...
  #1 (permalink)  
Antiguo 21/05/2005, 19:52
 
Fecha de Ingreso: abril-2004
Ubicación: Añatuya
Mensajes: 95
Antigüedad: 20 años
Puntos: 0
Pregunta Fechas cruzadas

Hola amigos:

Tengo un serio problema con las fechas. Paso a explicar

en un form escribo una fecha en un cuadro de texto y esta es almacenada en una base de datos de Access, el problema es que algunas fechas las conserve en el formato que yo utilizo que es DD/MM/YYYY, pero otras fechas me las cambia de formato a MM/DD/YYYY.
Por ejemplo si ingreso la fecha 20/05/05 [B]la guarda bien, pero si le ingreso 12/05/05 la da vueltas y queda almacenado 05/12/05

¿¿Que es lo que pasa?? ¿¿Como lo puedo solucionar??

Desde ya muchas gracias

Mi pagina personal

PeriodicaWeb
__________________
Un angel le dice a Dios - Señor han descifrado el genoma humano - a lo que Dios contesta - Condenados hackers, voy a tener que cambiar la contraseña
  #2 (permalink)  
Antiguo 22/05/2005, 08:24
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
roortiz:
¿Qué es lo que pasa?
Tienen un enfoque erróneo con el asunto de guardar las fechas. Para access, el formato date-time es guardado del mismo modo en que se guarda un double. La parte entera de dicho double corresponde a la fecha, mientras que la parte decimal corresponde a la hora.
El formato de fecha guardado, es el mismo siempre, independientemente de que tu sistema muestre la fecha como dd/mm/yyyy, mm/dd/yyyy o cualquier otro. Bueno, siempre que no hayas puesto un campo de tipo texto en lugar de uno tipo fecha.

¿Como lo puedo solucionar?
Si sólo te interesa realizar operaciones sobre la fecha, puedes convertirla a un long antes de realizar operaciones en la base. Convertirla a double mantendrá fecha y hora.
Por ejemplo, posibles cadenas de comando a ejecutar podrían ser:
Código:
'Solo la fecha
strCommand = "UPDATE tabla SET fecha = " & CLng(Now) & " WHERE Id=4"

'Fecha y hora
strCommand = "UPDATE tabla SET fecha = " & CDbl(Now) & " WHERE Id=4"

'Nota que los valores se pasan cómo números (sin comillas).
Lo anterior resulta muy fácil de recordar, pero cómo hay muchas formas de solucionar un problema, puedes pasar la fecha en formato ISO.
Código:
strCommand = "UPDATE tabla SET fecha = '" & Format(Now, "yyyy-mm-dd") & "' WHERE Id=4"
Cuestión de que experimentes.

Última edición por Beakdan; 22/05/2005 a las 08:37
  #3 (permalink)  
Antiguo 23/05/2005, 12:52
 
Fecha de Ingreso: abril-2005
Mensajes: 137
Antigüedad: 19 años
Puntos: 0
para generalizar tu codigo podrias utilizarlo asi no?

strCommand = "UPDATE tabla SET fecha = '" & Format(textbox.text, "yyyy-mm-dd") & "' WHERE Id=4"
  #4 (permalink)  
Antiguo 23/05/2005, 15:57
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
No necesariamente es correcto.
El campo de texto contiene una String. Lo que está siendo usado en los ejemplos son Date.
No es lo mismo. Por ejemplo, en mi sistema la fecha corta tiene el formato MM/dd/yyyy configurado en las opciones regionales. Si introduzco una fecha con tu formato en el textbox, por ejemplo 11/06/2005 (11 de junio de 2005 en tu formato), la string que obtengo es 2005-11-06. Esto por supuesto no es lo que se desea.
Para obtener la fecha correcta, debo hacer una validación con los datos introducidos en el campo de texto, para obtener una variable de fecha válida con el formato que usas... Podría ser algo como:
Código:
Dim tmpArr As Variant
	tmpArr = Split(Text1.Text, "/")
	If UBound(tmpArr) = 2 Then
		stringFechaISO =  Format(DateSerial(tmpArr(2), tmpArr(1), tmpArr(0)), "yyyy-mm-dd")
	End If
Obviamente esta validación está incompleta, pero seguramente entiendes la idea. El punto importante, es que antes de pasar a tu base de datos la variable de fecha, debes de estar seguro de que se trata de una. El formato en memoria en tu sistema para una misma fecha es igual en tu sistema o en el mío, las opciones regionales de nuestros sistemas. Al poner un formato neutral como el ISO, se da por sentado que lo se está convirtiendo a String es una variable Date. No el string que la representa, sino lo que tu sistema o tu base de datos utilizan como Date.
Tal vez lo mejor sea que todas las fechas se ingresen con un control Date o DateTimePicker así no habría confusiones...
  #5 (permalink)  
Antiguo 24/05/2005, 14:20
 
Fecha de Ingreso: abril-2005
Mensajes: 137
Antigüedad: 19 años
Puntos: 0
en primer lugar el formato de fecha del sistema operativo no interesa, porque el motor de BD maneja su propio formato en este caso, ya que se trata de ACCESS siempre busca el format mes/dia/año y mejor aun si es acompañado de # para su reconocimiento inmediato.
No se raye compañero pero en este caso el sistema no afecta al motor de Base de Datos si estuvieramos hablando de un Servidor Tipo SQL Server u Oracle pues ahi si es necesario tomar en cuenta el formato de fecha del sistema
peroe sta vez no
  #6 (permalink)  
Antiguo 18/09/2009, 05:29
 
Fecha de Ingreso: julio-2009
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Fechas cruzadas

Gracias por colocar que los datos de tipo double al actualizar hay que ponerles ' ' para que acepten las modificaciones, me ha venido de escandalo, estaba peleandome con la bd.
PD: ah!, si se que el tema es del 2005 y estamos a 2009
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:07.