jueves, febrero 08, 2007

Problema ODBC - locale (y anti-soporte gratuíto a MS)

Segundo y como explicaré más adelante último artículo de cómo sacarle las castañas del fuego a Mr Gates.

Primero decir que este artículo es gracias a Yortx. No puedo decir de el nada más que es un autentico crack. Mi compañero en la mayoría de fatigosas prácticas en la facultad, y un amigo.


Problemas con el acceso a bases de datos mediante ODBC y los paquetes de interfaz en idiomas locales en Windows XP


Hace ya un año, me había encontrado con este problema, intentando hacer una pequeña aplicación que accedía a una base de datos de MS Access. Los síntomas son, en algunas cuentas de usuario y en otras no, errores extraños al intentar ejecutar sentencias SQL: No encuentra la tabla que has pedido (que evidentemente existe), o que no encuentras los campos que has pedido (aunque hagas un SELECT * FROM tabla, te dirá que no encuentra el campo 'nombre', que está en la tabla y aunque te dice que no lo encuentra, el ha encontrado en nombre...).
El problema afecta a todas las aplicaciones que usen el mismo método de acceso a base de datos, que son muchas, como por ejemplo, el programa PADRE de ayuda a realizar la declaración de la renta. Estos programas dan errores del estilo: No se encuentra el módulo DAO, o similares (en el mejor de los casos, en el peor nos dará errores que nos despistan más que ayudan).
En su momento no encontré solución alguna, ni reinstalar ADO, ni DAO ni MS Jet ni nada. Solo el formateo y reinstalación ha dado resultado. Pero recientemente me ha vuelto a pasar, y esta vez me decidí a dar con el problema y solucionarlo de verdad. No voy a describir la odisea de rebuscar en las tripas del windows XP, solo diré que he perdido todo un fin de semana para dar con esto - y yo doy fé de que Yortx es un tio eficiente haciendo las cosas - . Así que voy directamente al grano.

El problema surge al instalar el paquete de interfaz en gallego para el windows XP (desconozco si el problema se da en otros idiomas con paquetes similares, supongo que en algunos sí se dará, el que pueda confirmarlo, si me lo dice lo agradeceré). Al instalar el paquete de idioma en gallego, además de ponernos todos los textos del sistema en gallego, hace que la "locale" por defecto del sistema sea también la gallega. Y por alguna razón, tener la "locale" con el valor "gallego" hace que el acceso a bases de datos mediante ODBC no sea posible.
Pero la instalación no cambia la "locale" de las actuales cuentas del sistema, con lo que en estas no habrá ningún problema, si no que cambia la configuración por defecto. Es decir, los usuarios nuevos, creados tras la instalación del paquete de idiomas, tendrán como "locale" el valor "Gallego" y son los que tendrán el problema de acceso a base de datos. Ésto es lo que hace de éste un problema bastante complicado de detectar.

Y ahora la solución: para las cuentas que ya tengan este problema, simplemente cambiaremos de nuevo la locale a "español". Para esto vamos al panel de control y en la "Configuración regional y de idioma" comprobamos que está elegido el valor "Gallego", y lo cambiaremos con el desplegable a "Español". Ésto no nos cambiará el idioma, sólo se refiere a la forma de representar los números, la moneda y la fecha. Sí nos pondrá el nombre de los días de la semana y los meses en español al mostrarnos la fecha. Ahora nuestras aplicaciones de bases de datos deberían funcionar correctamente.

Para que los usuarios creados a partir de este momento no tengan por defecto la locale en "Gallego" si no en "Español", el proceso es un tanto más complicado e igual para la mayoría no les compensa. Puede resultar más fácil cambiar la opción en cada usuario creado. Aún así, ahí van los pasos:

NOTA! - Vamos a modificar el registro de windows. Modificar el registro puede causar que el sistema deje de funcionar o empiece a funcionar mal (mirad si no lo que ha montado la instalación del paquete de idiomas por tocarlo). Seguir los pasos que describo a continuación no debería suponer ningún riesgo, pero aún así no me hago responsable de nada.

  1. Abriremos una cuenta con privilegios de administrador, asegurándonos de que es la única cuenta abierta en el sistema.
  2. Desocultar carpetas y archivos ocultos y de sistema: Abrir el explorador de windows (abriendo MiPC o MisDocumentos) e ir a Herramientas->Opciones de carpeta. Nos vamos en la pestaña "Ver" y en la lista de opciones seleccionamos: "Mostrar todos los archivos y carpetas ocultos" y desseleccionamos "Ocultar archivos protegidos del sistema operativo" y "Ocultar las extensiones de archivos para tipos de archivos conocidos". Aceptamos.
    Ocultar los archivos ocultos y de sistema es buena idea en cuentas de usuario, pero si entramos como el Administrador, estas opciones no nos dejaran "administrar" muchas cosas.
  3. Abrir el editor de registro (el de XP): Pulsamos Inicio->Ejecutar e introducimos "regedt32" (sin las comillas)
  4. En el árbol de la izquierda, seleccionamos la clave "HKEY_USERS" (sólo la seleccionamos) y vamos a Archivo->Cargar Subárbol.
  5. Nos pide un archivo. Seleccionaremos el archivo "C:/Documents and Settings/Default User/NTUSER.DAT", suponiendo que tenemos instalado windows en la unidad C.
  6. Pinchamos abrir y nos pedirá un nombre. Podemos poner cualquiera, por ejemplo: "ConfPorDefecto".
  7. Veremos que se ha creado la subclave "ConfPorDefecto" bajo la clave "HKEY_USERS". Ahora nos moveremos por el árbol hasta la clave: "HKEY_USERS/ConfPorDefecto/Control Panel/International".
  8. A la derecha veremos una lista de valores. El que nos interesa es el que tiene de nombre "Locale". Si teníamos la locale como "Gallego", aparecerá como valor: 00000456. Es el valor asociado a la locale "Gallego". Si hacemos doble click nos permitirá cambiar este valor. Lo sustituiremos por 00000C0A, que es el valor asociado a la locale "Español".
  9. Volvemos a seleccionar la clave "HKEY_USERS/ConfPorDefecto" y vamos a Archivo->Descargar subárbol. Confirmamos que sí queremos hacer lo que le hemos dicho, cerramos el editor del registro y salimos de la cuenta de administrador.

Y ya está, los usuarios que se creen a partir de ahora tendrán por defecto la locale "Español". Este método vale para establecer cualquier configuración para los usuarios que se creen nuevos. Sólo necesitamos saber qué clave del registro modificar y qué valor darle.


Anti-soporte gratuíto a MS

Ahora pasemos con la segunda parte de este post, explicando el por qué de que este sea el último post que pongo sobre M$.
Grácias también a Yortx he visto este post, cuya lectura recomiendo a todo el mundo, y que plantea una idea muy coherente: ya que no estoy de acuerdo con las políticas que tiene M$, vamos a acabar con el cliché de que Windows es fácil. (Ahora es cuando me pongo serio y os trato de usted XD)
A partir de ahora señores, los cuelgues bloqueos pantallazos y demas problemas que tengan con el Sistema Operativo de Bill, comentenselos al servicio técnico de M$, y que ellos paguen a quien se los resuelva. Eso sí. Cualquier duda que tengan con Linux/Unix/BSD/Solaris sólo pregunten

Saludos y hasta la próxima (Mensaje subliminal: Usa SW libre, debian, kubuntu, suse,...)

No hay comentarios: