27 de junio de 2006

Modificar la conexion de nuestro DBC "on the fly"

Autor: Ricardo Fynn Reissig

Muchos programadores usan ambas técnicas de acceso a datos remotos, SQL pass through y vistas remotas. No discutiremos cual es mejor, solamente mostraremos como utilizar el mismo origen de datos y cuando este cambie, como modificar automáticamente la conexión de nuestro contenedor de base de datos de VFP (DBC).

Partimos de un ejemplo que nuestra aplicación se conecta a una base de datos remota y usa ambas tecnologías.

Lo primer que hacemos es leer algún archivo de configuración y obtenemos el string de conexión.
Este archivo puede ser un .INI o un XML o lo que prefieran.

Guardando la configuración de acceso a los datos remotos

Una opción que usamos es crear una tabla DBF free o sea, que no esta asociada a ningún contenedor de base de datos. Con una estructura de este estilo:
USER C(50)
PWD C(50)
SOURCENAME C(128)
DRIVER C(128)
SERVER C(128)
ROLEAPP C(50)
ROLEPWD C(50)
Aquí guardamos en un único registro encriptados los datos necesarios para armar el string de conexión.

Un truco muy simple es cambiarle el nombre al archivo DBF, por ejemplo renombrarlo a config.cnx (le pueden poner la exención que quieran).

Desde nuestra aplicación lo único que hacemos es USE config.cnx y desencriptamos los datos para armar el string de conexión. Este archivo lo distribuimos con nuestro ejecutable.

Esta sencilla práctica se puede aplicar al archivos de configuración de nuestras aplicaciones que queden fuera de los ojos de usuarios curiosos, ya que no tiene una aplicación por defecto asociada para abrirlos y el Notepad o Excel mostraran datos ilegibles.

En el siguiente paso leemos el archivo configuración y armamos el string de conexión.
Primero nos conectamos mediante DSN-less a nuestra base de datos remota.

Luego abrimos el contenedor de base de datos de VFP y obtenemos sus datos de conexión remota.
Comparamos ambos y si el archivo de configuración cambió, lo eliminamos y lo volvemos a crear.

lcStrCnx = leerConfiguracion() && llamamos a la función que nos arma el string de conexión
*[ creamos la conexión DSN-less
lnHandle = SQLSTRINGCONNECT(lcStrCnx)
IF lnHandle > 0 && nos conectamos sin problema
  *[ Abrimos nustra base de datos local con sus vistas remotas
  OPEN DATABASE myDataLocal
  SET DATABASE TO myDataLocal
  *[ obtengo los datos de la conexión de mi base de datos VFP
  *[ nuestra conexión se llama, por ejemplo, myCnx
  lcStrCnxDBC = ALLTRIM(DBGetProp("myCnx","CONNECTION","ConnectString"))
  *[ Si nuestro archivo de configuración cambió el acceso a los datos remotos
  *[ borra y crea el string de conexión de la BD local nuevamente
  IF UPPER(lcStrCnx) != UPPER(lcStrCnxDBC)
    DELETE CONNECTION myCnx
    CREATE CONNECTION myCnx CONNSTRING lcStrCnx
  ENDIF
ELSE
  *[ Error al conectar con server remoto
ENDIF


Cuando usar esta técnica ?


Nuestras aplicaciones en general son client-server y guardamos, como mostramos anteriormente, los datos de conexión en un archivo de configuración externo a nuestra aplicación. En algunos casos también usamos un base de datos local VFP para usarla con vistas remotas y ambas técnicas tienen en común el mismo origen de datos.

Por ejemplo, nuestra aplicación apunta a un server SQL Server que residen en un servidor con la IP 200.40.1.1 en el puerto 1433 y el administrador de red de la empresa en que está nuestra aplicación decide migrar el motor de base de datos a otros servidor, por ejemplo \\SERVERBD y cambia el puerto a otros número. Lo único que debemos hacer es cambiar el archivo de configuración.

En otra entrega mostraremos como crear una aplicación que administre este archivo de configuración y permita manejar múltiples orígenes de datos.

No hay comentarios. :

Publicar un comentario