Visual Basic - Problema urgentisimo de fechas... ¡¡¡HELP!!!

Life is soft - evento anual de software empresarial
 
Vista:

Problema urgentisimo de fechas... ¡¡¡HELP!!!

Publicado por kikecg (352 intervenciones) el 14/03/2003 19:13:45
Hola a tod@s.
Tengo un problema que me está volviendo medio loco.
Tengo una DateTimePicker con formato de fecha corta y una base de datos Access con un campo de tipo fecha corta (dd/mm/yyyy).
Conecto con ella por ADO 2.5 mediante código.
Al insertar el valor de la fecha mediante sql, ocurre lo siguiente:
Si la fecha es la misma del sistema, la guarda con formato dd/mm/yyyy. Si por el contrario selecciono otra fecha en el control, la guarda con formato mm/dd/yyyy. La sentencia con que agrego los datos a la tabla es la siguiente:
"INSERT INTO Tabla (Fecha) VALUES (#" & dtpicker1.Value & "#)"
Si delimito el dato de fecha con comilla simple (') en vez de con almohadilla (#), me la guarda bien, pero a la hora de hacer busquedas, no me encuentra datos. Por el contrario, si la guardo con la almohadilla, y despues hago una busqueda seleccionando la fecha en el datetimepicker, tampo me encuentra datos. La sentencia para las consultas es:
"SELECT * FROM Tabla WHERE Fecha=#" & dtpicker1.Value & "#"
¿Alguien me puede ayudar, por favor?. Necesito que todas las fechas se guarden con el mismo formato, por que en otra parte de la aplicación tengo que utilizarlas como cadena cambiando el orden. Si se guardan con formato mm/dd/yyyy, se me descuadra la cadena al operar con ella.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema urgentisimo de fechas... ¡¡¡HELP!!!

Publicado por juan (30 intervenciones) el 14/03/2003 23:00:09
Hola, te cuento que yo también me volví RE-LOCAZO con este tema, y no pude encontrar el problema (Bill...). Te cuento como lo resolví yo:

1 - los campos que heran del tipo fecha hora, los pase a numéricos.
2 - en VB creé una función que reciba una fecha (desde los controles VB), y que me transforme a integer (ahora te explico de que forma lo hace)
3 - en VB creé una función que reciba el dato numérico del campo de la tabla de la base de datos, y lo transforme a fecha...

bueno, el tema es que tuve que crear una función (las pego al final del mensaje) para convertir las fechas a números descomponiendo las mismas y guardando el año en una variable, el mes en otra y el día en otra, luego concatenando en este orden (año & mes & dia), lo grabo en el campo.
Para transformarlo a fecha, creé otra función (devuelve un date) que hace lo inverso levantando el valor del campo, y lo armo como una fecha, tomando los primeros 4 números (de izq. a der.), para el año, los segundos dos para el mes, y los ultimos dos (o uno) para el día.
En el sistema, todo lo que tenga que utilizar fechas y consultar / modificar la base, pasan por estas dos funciones.
De esta forma solucioné mi problema, y el por que Access (Excel tambien) se comporta de esta forma, sigue siendo un misterio sin resolver.

Te paso las funciones que creé, y espero que te sirvan, cualquier duda posteala.

Suerte.

Public Function DoubleToDate(dFecha As Double) As Date
'/* ***************************************************** */
'/* Esta función se encarga de convertir el double recibi-*%2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema urgentisimo de fechas... ¡¡¡HELP!!!

Publicado por juan (30 intervenciones) el 14/03/2003 23:05:10
no alcanzo el campo de la base del foro, por eso, te lo paso solo...

Public Function DoubleToDate(dFecha As Double) As Date
'/* ***************************************************** */
'/* Esta función se encarga de convertir el double recibi-*/
'/* do a un date (tengo que hacer esto por que Access se */
'/* empecina en guardarme la fecha así: MM/dd/yyyy, y esto*/
'/* me esta trayendo problemas, por que en VB manejo las */
'/* fechas como lo tengo en la config. regional). */
'/* Creado por: Juan Carlos Benítez */
'/* F. Creación: 12/02/2003 */
'/* F. U. Modif.: 12/02/2003 */
'/* ***************************************************** */

Dim sDia As String
Dim sMes As String
Dim sAnio As String
Dim iLongitud As Integer

' Consigo la cantidad de dígitos...
iLongitud = Len(Trim(Str(dFecha)))

' Descompongo la fecha en dia, mes y año...
If iLongitud = 8 Then
sDia = Mid(dFecha, iLongitud - 1, 2)
sMes = Mid(dFecha, iLongitud - 3, 2)
sAnio = Mid(dFecha, iLongitud - 7, 4)
Else
sDia = Left(dFecha, 1)
sMes = Mid(dFecha, 2, 2)
sAnio = Mid(dFecha, 4, 4)
End If

' Devuelvo el resultado de la "conversión"...
DoubleToDate = CDate(sDia & "/" & sMes & "/" & sAnio)
End Function

Public Function DateToDouble(dFecha As Date) As Double
'/* ********************
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema urgentisimo de fechas... ¡¡¡HELP!!!

Publicado por juan (30 intervenciones) el 14/03/2003 23:07:46
y bue!, sigue sin alcanzar, ahora te mando la que convierte la fecha a número...

Public Function DateToDouble(dFecha As Date) As Double
'/* ***************************************************** */
'/* Esta función se encarga de convertir la fecha recibida*/
'/* a un double (tengo que hacer esto por que Access se */
'/* empecina en guardarme la fecha así: MM/dd/yyyy, y esto*/
'/* me esta trayendo problemas, por que en VB manejo las */
'/* fechas como lo tengo en la config. regional). */
'/* Creado por: Juan Carlos Benítez */
'/* F. Creación: 12/02/2003 */
'/* F. U. Modif.: 01/03/2003 */
'/* ***************************************************** */

Dim sDia As String
Dim sMes As String
Dim sAnio As String

' Descompongo la fecha en dia, mes y año...
sDia = Mid(dFecha, 1, 2)
sMes = Mid(dFecha, 4, 2)
sAnio = Mid(dFecha, 7, 4)

' Devuelvo el resultado de la "conversión", en formato yyyymmdd...
DateToDouble = Val(sAnio & sMes & sDia)
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema urgentisimo de fechas... ¡¡¡HELP!!!

Publicado por kikecg (352 intervenciones) el 16/03/2003 15:13:12
Hola!.
Muchas gracias por tu ayuda. Tomo nota de las funciones y mañana me pongo a probarlo. Ahora estaba buscando alguna otra forma de hacerlo, y creo haber dado con una, utilizando la función DateValue en las sentencias SQL, y guardando la fecha en una campo de tipo Date, pero sin poner en la sentencia sql las #. Es una cosa rara, pero por el momento parece que funciona.
No obstante, ya te digo, probaré tus funciones y si tengo algún problema te lo haré saber.
Muchas gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar