Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Paradox en Red (https://www.clubdelphi.com/foros/showthread.php?t=80503)

marcoszorrilla 30-06-2006 00:17:02

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?),

}

Código Delphi [-]
MiDataModule.OnCreate;

Begin

With MiSesion do begin
  NetFileDir := '\\MiServer\MisDatos\NET';
  PrivateDir := 'c:\Temp';
End;

With MiDataBase do begin
  Params.Clear;
  Params.Add('PATH='+'\\MiServer\MisDatos');
  Params.Add('DEFAULT DRIVER=PARADOX');
  Params.Add('ENABLE BCD=FALSE');
  Connected := true;
End;

End;


{
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.


La franja horaria es GMT +2. Ahora son las 08:05:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi