FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
||||
|
||||
Paradox en Red
{
En este articulo intentaremos dejar claro el uso de tablas paradox en red así como alguna característica oculta o no implementada dentro de las VCL. Paradox usa un sistema de Semáforos para informar a otras aplicaciones o instancias de programas que ciertos registros están siendo usados por otro usuario, en contra de otros sistemas como el dBase que marcaba físicamente los registros que estaban en uso, Paradox crea unos ficheros en los que se registran los usuarios en uso, así como los registros bloqueados. En este articulo nos centraremos en el protocolo de bloqueos de la versión 7 y especialmente en el BDE 4.0 que acompaña a Delphi 3. Paradox crea el fichero PDOXUSRS.LCK en cada directorio donde una aplicación este accediendo a tablas, este fichero regula el acceso concurrente a las tablas, este fichero apunta y se registra en el fichero PDOXUSRS.NET que contiene la información de todos los usuarios - aplicaciones que acceden a un directorio. Tambien, para evitar el acceso a las tablas por versiones anteriores del BDE se crea un fichero exclusivo PARADOX.LCK. El BDE necesita un directorio para la creación de tablas temporales y otros usos, para ello en el llamado "Directorio Privado", crea sendos ficheros PDOXUSRS.LCK y PARADOX.LCK evitando que otros programas accedan a ese directorio. Protocolo de Bloqueos Paradox anota los registros bloqueados de las tablas en el fichero de bloqueos PDOXUSRS.LCK, en este fichero se controlan los accesos a diferentes tablas y por distintos usuarios, cuando un usuario intenta bloquear un registro mira en el fichero y comprueba que otro usuario no lo tenga bloqueado ya, en caso de que este libre escribe su bloqueo, impidiendo que otros lo hagan, cuando el registro es liberado, se actualiza su estado en PDOXUSRS.LCK. Cuando varios usuarios intentan leer y escribir en una misma tabla dentro de un entorno de red, todos deben realizar sus bloqueos por medio del fichero PDOXUSRS.NET que a su vez mantiene una relación con los fichero *.LCK. Un error común al realizar aplicaciones multiusuario es que las aplicaciones no apuntan al mismo fichero *.NET, creando un desconcierto en el BDE y como resultado que los bloqueos no se realizan y las actualizaciones son mas bien aleatorias. Dentro del fichero NET, también se guarda otro tipo de información, como número y nombre de usuarios conectados, y otra información menos relevante. Cuando se intenta acceder a una Tabla Paradox el BDE busca el fichero PDOXUSRS.NET, si no lo encuentra crea uno, continuando con el proceso de arranque. Si BDE encuentra un fichero NET pero esta apuntando a otro directorio, nos muestra el mensaje de "Multiple net files in use", generando una excepción impidiendo la carga del BDE. Si no hay errores crea los fichero *.LCK en el directorio privado, si encuentra ficheros, genera la excepción y no se carga el BDE. En resumen podríamos decir que el fichero NET gobierna los directorios, y los ficheros *.LCK los registros. Correcta Inicialización Para evitar errores en la inicialización de nuestra aplicaciones en RED deberemos haber comprendido el mecanismo de bloqueos de paradox y obrar en consecuencia, como este artículo se centra en el uso de Delphi 3, supondremos que nuestras instalaciones se realizan en entornos con Windows 95, o mixtos con Windows NT. En primer lugar en la maquina que usemos como servidor crearemos una estructura de este tipo: ....\Datos ....\Datos\NET \Datos será el directorio en el que crearemos las Tablas y \NET lo usaremos para albergar el fichero PDOXUSRS.NET. Una vez creados los directorios crearemos un recurso compartido de Windows en el directorio \Datos para que el resto de usuarios tengan acceso, por ejemplo , una vez hecho, nos referiremos siempre a este directorio con las normas UNC, así \Datos pasara ha ser \\MiServer\MisDatos y el directorio para el fichero de control de Usuarios será \\MiServer\Misdatos\Net. Si usamos ALIAS de Delphi deberemos actualizar estos datos en cada maquina, estableciendo, por ejemplo, como directorio privado el directorio temporal de Windows, estableciendo el resto de datos como se indica arriba. Si realmente estamos haciendo aplicaciones potentes y profesionales, deberemos por un lado, o bien crear ALIAS, en tiempo de ejecución, o mejor aun, usar componentes Tsession y redirigir los directorios sobre escribiendo los valores del BDE por defecto. Siguiendo con el ejemplo anterior en nuestro DataModule deberemos tener un componente Tsesion y otro TdataBase, cuando se crea el DataModule asignamos los valores, bien manteniéndolos prefijados por programa o leyéndolos de un fichero a nuestro gusto ( un INI?), }
{ Lógicamente todas las tablas del datamodule deberán, hacer referencia a la session y la Database modificada. Con estas sencillas reglas y formas de trabajo estaremos seguros que nuestros programas en red usando Paradox no fallen, y realicen los bloqueos correctamente. Mas cosas Como no todo es perfecto o bien nuestro programa puede colgarse en un momento dado, o un usuario con prisas puede apagar el ordenador sin mas, aveces quedan ficheros *.LCK en el directorio de datos sin que este ningún usuario conectado, en este caso cuando nuestro programa intenta inicializar el BDE, este nos da un error que las tablas están "busy", siendo falso. El remedio es verificar que hay usuarios conectados y antes de abrir las tablas comprobar la existencia de tales ficheros, si no hay usuarios y los ficheros están el directorio nuestra aplicación deberá ser lo suficientemente inteligente para borrarlos y olvidares del tema. Este proceso lo haremos una vez activa la session pero sin tablas abiertas. Limites del BDE Estos son los limites máximos del BDE y Paradox. Clientes en el sistema 48 Sesiones por clientes 256 Tablas abiertas 2048 Drivers cargados 32 Sesiones por sistema 12288 Cursores por session 4000 Maximos errores consecutivos (Stack) 16 Tablas abiertas por el sistema 127 Registros bloqueados 255 Registros en una transacion 255 Ficheros fisicos abiertos ( DB,PX,MB,X?,Y?,VAL,TV) 512 Usuarios en un mismo PDOXUSRS.NET 300 Campos por tabla 255 Registros por tabla 2 billones Bytes por tabla DB 2 billones Numero de campos en índices 16 Numero de índices secundarios por tabla 127 Usos concurrentes de una tabla 255 Bueno, pues así es como se usa Paradox en red y sus limites, si no te gusta siempre puedes usar el driver de dBase (el 26 funciona de lujo), tu elijes. Para saber mas busca en la WEB de Borland las TI's 2751, 2822, 3233, 3160, 2986, 2817, 2993,3089 Valentin Sanchez Izquierdo. Última edición por Casimiro Notevi fecha: 03-11-2013 a las 13:02:18. |
|
|
|