Access - Campos fecha en SQL

   
Vista:

Campos fecha en SQL

Publicado por Sergio sergiodallagata@gmail.com (5 intervenciones) el 15/10/2017 00:32:23
Estoy desarrollando una aplicación con Access 2010 + SQL Server Express 2014. El tema es que de algunas tablas, los campos de tipo fecha en SQL, la tabla vinculada en Access los interpreta como texto. Esto me acarrea muchos problemas al tratar de compararlos/procesarlos desde Access. Alguien que da una mano???
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

Campos fecha en SQL

Publicado por Anonimo (807 intervenciones) el 15/10/2017 00:57:12
Un texto que representa a una fecha "27-ene-2022"

Una función integrada ==> CDate()

Su aplicación:
Cdate("27-ene-2022")

Un resultado
==> una valor de tipo DATE con el que Access puede trabajar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Campos fecha en SQL

Publicado por Sergio (5 intervenciones) el 15/10/2017 01:02:52
Uso esa función para mostrar correctamente la fecha, el tema es cuando quiero hacer una comparación. Por ejemplo: Set xx = Base.openrecordset("select * Fom Creditos where FechaOtorgamiento = " + trim(Date))... Donde FechaOtorgamiento dice Date en SQL pero en Access dice "Texto". Allí tengo problemas.
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

Campos fecha en SQL

Publicado por Anonimo (807 intervenciones) el 15/10/2017 03:20:43
Si ese dato se comporta de igual manera en todos sus registros (algo que se da por supuesto dado que es el tipo de dato del campo) y dado que se conoce (o se deberían conocer que campos no son 'bien trasladados') ¿Qué problema hay en aplicar el tratamiento al campo de la tabla en la misma SQL?.

Se parte del supuesto de que la SQL se ejecutara en el entorno Access.

Y si el entorno es Access hay pequeños detalles que pueden complicarle la vida al motor de Access al momento de analizar la sintaxis en tiempo de ejecución:

La SQL:
Set xx = Base.openrecordset("select * Fom Creditos where FechaOtorgamiento = " + trim(Date))...

.- el signo (+) utilizado como concatenador y asumido por compatibilidad en Access, tiene algún que otro efecto colateral no deseado, su comportamiento es diferente al del signo (&), concatenador utilizado en Access por defecto.

.- No veo cual es la causa para aplicarle a un dato (supuestamente una fecha, básicamente un numero) la función 'TRIM' que es de aplicación en las cadenas de texto para eliminar espacios al principio y final.

Si es una fecha (esto es si es un dato de tipo DATE) ¿Qué se logra con TRIM? .... posiblemente esto cause el problema de la indefinición del tipo de datos de ambos operandos.

En definitiva, que tipo de dato es:
FechaOtorgamiento
y también que tipo de dato es
Date

Ambos deberían ser del mismo tipo (real o convertido) para poder ser comparados de forma correcta:

Campo texto a fecha ==> ... where FechaOtorgamiento = ... ==> ... where CDate(FechaOtorgamiento) = ....

Respetando el tipo de dato como Fecha Access ==> .. = " + trim(Date))... ==> = " & Date() ...


Es complicado (con los datos aportados y probablemente inventados para el ejemplo) aportar una solución en la el problema puede tener diferentes motivos (sea la sintaxis, tipo de datos o tratamiento de los mismos)
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

Campos fecha en SQL

Publicado por Sergio (5 intervenciones) el 16/10/2017 01:18:52
Antes que nada, gracias por la pronta respuesta. Paso a comentarte: a la hora de escribir sintaxis SQL, nunca tuve problemas con usar el signo "+" en vez de "&". Digamos que costumbre. En cuanto el Trim, lo uso siempre por que no tan solo quita los espacios en blanco al comienzo y al final sino que convierte cualquier cosa a string. Teniendo en cuenta que Access me muestra la fecha como un texto con el formato yyyy-mm-dd, resolví el tema haciendo la siguiente función:

1
2
3
Public Function DameFecha(Fecha As Date) As String
        DameFecha = "'" + Trim(Year(Fecha)) + "-" + Trim(Month(Fecha)) + "-" + Trim(Day(Fecha)) + "'"
End Function

Luego el filtro queda así:

1
Set Filtro = CreditosDB.OpenRecordset("Select CreditoFechaLiquidacion From Creditos Where CreditoFechaLiquidacion = " + DameFecha(Date))

Anda bien, solo que temo que no use el índice que en SQL le puse a este atributo.
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

Campos fecha en SQL

Publicado por Anonimo (807 intervenciones) el 16/10/2017 09:51:10
Si es el único método que conoces (o dominas), mientras te funcione o no llegues a un muro insalvable .....

Pero yo 'hablaría' el ruso en Moscú, el castellano en Madrid y el chino en Pequín si desease transmitir bien los conceptos en lugar de esa extraña mescolanza o el intento de generar 'mi propio idioma'.

En fin, incluso entre los 'castellanos parlantes' según su ubicación geográfica hay (para la misma palabra) diferentes significados por ejemplo: 'coger' ..... pues no es lo mismo que te 'cojan' en Madrid a que lo hagan en algunos países sudamericanos.

Espero que quede claro que esa comparación no esta expuesta mas que para señalar las diferencias (se que en algunos países sudamericanos esa expresión les molesta, pero quienes le dieron 'otro sentido' fueron ellos).
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
Revisar política de publicidad