Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.

Última edición por Casimiro Notevi fecha: 03-11-2013 a las 14:02:18.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:59:29.


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
Copyright 1996-2007 Club Delphi