servidor puede otro equipo ejemplos desde crear conectarse conectar coincidencias buscar sql-server ms-access nullable ms-jet-ace

sql-server - puede - like en sql ejemplos



Campos de Bool anulables en tablas vinculadas con MS Access (2)

ACE es una actualización de Jet (bifurcada desde la base de código de Jet 4.0, mantenida por el equipo de Windows y sin ver ningún desarrollo posterior, mientras que ACE está en pleno desarrollo por parte del equipo de Access). No es significativamente diferente de Jet, excepto en que es una nueva versión del motor de base de datos y tiene características que carecían de Jet.

Los booleanos anulables no son una de las características adicionales. En cualquier caso, si no me equivoco, hay grandes argumentos teóricos sobre si Booleans debe ser Nullable y Jet / ACE se reduce en el lado que dice que no deberían ser.

Los booleanos no anulables causan problemas incluso dentro de Access / Jet / ACE ( Allen Browne ha discutido uno de ellos, con LEFT JOINs ). Mi sugerencia es que cambie el campo a un campo de Nullable Bit, Byte o Integer (no estoy seguro de qué tipos de datos exactos están en SQL Server, ni cuál será más compatible con Access / Jet / ACE).

Alternativamente, puede abordarlo de la misma manera que se trata el problema BIGINT usando una vista para CAST () la booleana del lado del servidor para una INT. Eso lo hace no editable pero (al igual que con BIGINT), puede mantener el campo original en la VISTA y escribirlo con los valores apropiados, mientras que la versión CAST () es sólo para visualización.

Por lo que vale, el SSMA para Access convierte los booleanos de Jet / ACE en campos de bits que aceptan valores nulos (aunque no estoy seguro de por qué son Nullable; es posible que deba verificar algunas de mis aplicaciones para asegurarme de que funcionan correctamente).

Parece que no soy el único con este problema, pero no parece haber un problema.

Estoy trabajando en Access 2010, utilizando una tabla vinculada a una base de datos de SQL Server 2005 (a través de un conducto ODBC de SQL Server). En esa tabla, uno de los campos booleanos está marcado como anulable, y varios registros en esta tabla de hecho tienen un nulo en el campo. Hasta aquí todo bien.

En viene Access, y tan pronto como se abre la tabla vinculada, Access muestra un 0 (falso) en lugar de una celda en blanco (problema n. ° 1). Y si intenta modificar algo en el registro, recibirá un mensaje de error que dice que el registro fue modificado por otra persona y sus cambios no pueden guardarse. Este último problema se debe al hecho de que Access no tolera los campos de bool nullable, y se vuelve un poco loco cuando intenta guardar el valor.

Mi investigación muestra que esto podría tener algo que ver con Access utilizando Jet en segundo plano para conectarse a la base de datos de SQL Server, y Jet aparentemente no admite bools nullable. No parece haber una forma de configurar Jet para que lo admita (aunque tal vez sí, si se está conectando en el código). También pensé que MS estaba reemplazando a Jet con otra tecnología utilizada en Office 2010 (ACE, creo), pero no puedo decir si esto es realmente lo que usa Access. En cualquier caso, no puedo encontrar opciones configurables con respecto a los booleantes nulables.

Finalmente, este problema parece haber sido presentado a MS hace poco tiempo, pero no hay respuesta en su extremo: https://connect.microsoft.com/SQLServer/feedback/details/617339/null-bit-fields-produce -spurious-ms-access-errors-when-using-the-native-odbc-driver? wa = wsignin1.0 # pestañas

Me pregunto si alguien más se encontró con esto y encontró una solución. Y antes de sugerirlo, quitar la opción que no admite nulos y establecer todos los nulos en ''falso'' no es realmente una opción en nuestro caso. Para nosotros, null es en realidad un estado válido y muy diferente de ''falso''.

¡Gracias!


Después del análisis en este Microsoft KB http://support.microsoft.com/kb/318882 aquí está lo que hicimos para resolver este problema. 1) Ejecutamos un script sql para actualizar las filas en esa tabla que tenía nulos en los campos de bit, 2) Luego modificamos la definición de tabla para incluir un valor predeterminado de ''0'' en esos campos de bit.