2010-11-19 16 views
5

Estoy actualizando mi aplicación de MS-Access FE y BE a MS-Access FE y SQL Server BE. Utilicé la herramienta de "ampliación" de SSMA Access para convertir todas las tablas de Access a SQL, luego vinculé las tablas SQL en Access FE usando ODBC.MS-Access ve los campos datetime2 de SQL Server como TEXT

En mi base de datos de acceso, algunas tablas tenían columnas DateTime que se convertían en la columna datetime (0) en SQL Server. Después de vincular estas tablas en Access, Access ve estas columnas como columnas de texto, incluso si son columnas datetime2 (0) en el servidor SQL BE.

Esto causa algunos problemas porque las consultas que trabajaban con un formato de fecha no funcionan con el formato de texto. ¿Hay alguna forma de vincular las tablas para que el campo datetime (0) sea tratado como valores de fecha y hora por Access?

+0

qué se refiere con datetime2 (0)? Datetime debería funcionar con MS Access. Necesito hacer un poco más de messing para datetime2. – Fionnuala

+0

@Remou: Sí, quise decir datetime2 (0), corregiré la pregunta. Debo admitir que no sé la diferencia entre datetime y datetime2. ¿Qué tipo de problema tienes que hacer para trabajar con Access? –

+0

Solo quería decir que necesitaba saber más. De acuerdo con http://technet.microsoft.com/en-us/library/cc179181.aspx, solo hay soporte limitado para el nuevo tipo de datos, datetime2. Me gustaría ir con datatime, si puedes. – Fionnuala

Respuesta

7

De acuerdo con TechNet, solo hay soporte limitado para el nuevo tipo de datos, datetime2. Me gustaría ir con datetime, si puedes.

-1

En general, se requiere verificar las fechas ANTES del asistente de conversión. Los usuarios tienden a ingresar fechas "estúpidas" que son aceptadas por los campos de fecha de acceso pero causan un error en SQL Server. Intente consultar sus tablas con fechas fuera de un rango razonable como "ENTRE 1/1/1930 y 1/1/2020" y corrija esas fechas antes de reiniciar el asistente de conversión.
También he encontrado un producto que no he usado, pero que se ve bien: http://www.upsizing.co.uk/features_translate.aspx

+0

Los límites de fecha en su instrucción BETWEEEN no son correctos para SQL Server. Las referencias dicen que 1/1/1753 es el punto de partida. Además, SQL Server 2008 agrega un nuevo tipo de campo de fecha que puede remontarse al año 1. –

+0

@David: por supuesto que no (sería triste para SQL Server). Estaba recomendando hacer un chequeo en cualquier rango de fechas que sea razonable (para los datos de uno), para eliminar fechas estúpidas. –

+0

-1 Esto no responde la pregunta. – Stefan

1

El SSMA para Access convertirá cualquier campo de fecha/hora, con valores que no son válidos en SQL Server en texto. Debe ejecutar el SSMA para probar la conversión y le dirá los problemas, y luego puede limpiar los datos antes de su conversión real.

Tendrá que omitir el asistente de SSMA, ya que realiza la ampliación sin obtener una vista previa de los resultados.

1

Me encontré con el mismo problema que me llevó a esta página, pero descubrí la solución: Problema: las tablas vinculadas desde el acceso al servidor sql muestran las columnas datetime2 como texto, lo que tiene muchas implicaciones como la comparación de fechas. ordenar, etc.

solución: convertir datetime2 en SQL Server para fecha y hora, y el acceso se mostrará la columna como campo de fecha de inmediato

Tenga en cuenta que desde las tablas ya tienen datos, puede no sólo cambiar los tipos de datos, planeo agregar nuevas columnas tipo de fecha y hora, copiar datos, eliminar columna original, cambiar el nombre

Cómo verificar la precisión: Creé una tabla con 3 columnas en el servidor sql, fecha y hora2, fecha y luego me uní a ella desde el acceso, solo datetime mostró como campo de fecha en el acceso, otros 2 mostraron como texto

3

Problema similar: SE RESUELVE

Tengo un servidor SQL con un campo como tipo de datos DATETIME2 y me estoy conectando a través de ODBC como una tabla vinculada en MS Access en Win7.

Cuando se conecta a partir de dos estaciones de trabajo diferentes utilizando la misma db, uno tenía un Data adecuado Tipo de "Fecha/Hora" y el otro tenía un tipo de datos de "texto corto"

Solución: Resulta que el las tablas vinculadas se establecieron usando dos archivos DSN diferentes, uno tenía la lista "DRIVER = SQL Server" y el otro "DRIVER = SQL Server Native Client 11.0". Para tener el tipo de datos "Fecha/Hora" a través del enlace ODBC, necesitaba usar el Cliente 11.0.

para ver qué controladores que ha instalado:

From the start menu search for "ODBC" 
Select "Data Sources (ODBC)". 
Click on the "Drivers" tab 

Verá los controladores que haya instalado. Yo tengo tres.

SQL Server      6.01.7601.17514 
SQL Server Native Client 10.0 2007.100.5500.00 
SQL Server Native Client 11.0 2011.110.6020.00 

Creo que SQL Server versión 6 es instalado por Win7 y actualizado a través de Windows Update. Si esto es todo lo que tiene, solo obtendrá TEXTO de DATETIME2 SQL DataTypes a través de tablas vinculadas.

Los clientes nativos fueron instalados por SQL Server Management Studio 2008 y 2012, respectivamente.

Puede descargar e instalar SQL Server Native Client 11.0 de https://www.microsoft.com/en-us/download/details.aspx?id=36434

+0

Gracias por brindar nueva información a una pregunta anterior, ¡y bienvenido a Stack Overflow! –

+0

Se puede modificar SSMA para convertirla a la fecha de tiempo anterior. Lo recomiendo si uno no va a utilizar y adoptar los 11 controladores nativos más nuevos. Se prefiere el controlador más nuevo, pero requiere que cada estación de trabajo tenga instalados los controladores más nuevos. Por esta razón, actualmente utilizo el controlador SQL más antiguo que se instaló en todas las máquinas de Windows de manera predeterminada. –

Cuestiones relacionadas