Cita:
Empezado por URBANO
Código Delphi [-]Session.PrivateDir := ruta-del-ejecutable-del-cliente + 'PRIV';
|
Esta es la correcta.
Y se crean
2 pares de archivos LCK. Un par en el servidor y otro par en la carpeta PrivateDir, y no me preguntes por qué, porque no lo sé
, es más, el par de archivos LCK del PrivateDir puede que no lo veas, sólo aparece mientras se edita el registro.
Cita:
Empezado por URBANO
Es decir que desde dos clientes puedo editar el mismo registro a la vez.
|
Este es el
síntoma principal de que el BDE no está configurado bien.
Como dices, debe aparecer una excepción diciendo "no se puede editar el registro porque otro usuario lo está utilizando" (mensaje en inglés). te aconsejo hacerlo todo por código, incluso crear los alias, ¿por qué? por la configuración del driver, la ruta del servidor, etc.
Cita:
Empezado por URBANO
- Ya he probado lo de desactivar la cache y los bloqueos, pero sigue dandome el mismo error al abrir las tablas. Yo creo que debe haber una incompatibilidad de winxp a win98, ya que he probado ejutando el programa en modo servidor en el equipo que tiene el winxp y habre bien las tablas.
(
|
Te aconsejo que te centres en una sola configuración o te volverás loco (por ejemplo: Win98 Servidor, WinXP Cliente).
MensajeAdd añade textos a un Memo para ver todos los parámetros de configuración.
Código Delphi
[-]
procedure TFPrincipal.MensajeAdd(VerFecha: Boolean; str: String);
begin
if VerFecha then
FormXX.Memo1.Add(datetimetostr(now) + ' >> ' + str)
else
FormXX.Memo1.Add(str);
end;
DtbPpal es el TDatabase
Todo esto va dentro de tu procedimiento "Configuracionred".
Verás que te he puesto la definición de un registro TGlobal y TParadoxConfig,
lo he hecho para que solo tengas que modificar lo mínimo posible:
- Buscar "dtbppal" y sustituir por el nombre de tu componente TDatabase.
- sustituir las lineas "ini.ReadString...." por tus rutas de la base de datos, del .net etc.
Código Delphi
[-]
type
TParadoxConfig = record
NetFileDir: String[255];
PrivateDir: String[255];
DatabaseDir: String[255];
Alias: String[20];
end;
Tglobal = record
ModoServidor:Boolean;
DB: TParadoxConfig;
end;
var
GL: TGlobal;
begin
gl.DB.NetFileDir := ini.ReadString('Paradox', 'NetFileDir', '\\');
gl.DB.PrivateDir := ini.ReadString('Paradox', 'PrivateDir', GetTmpDir);
gl.DB.DatabaseDir := ini.ReadString('Paradox', 'DatabaseDir', '\\');
gl.DB.Alias := ini.ReadString('Paradox', 'Alias', 'prog1');
GL.ModoServidor := ini.ReadInteger('Settings', 'RGClient', 1) = 0;
if GL.ModoServidor then LocalShareTRUE
else LocalShareFALSE;
if dtbppal.Connected then dtbppal.Close;
if DtbPPal.Session.Active then DtbPPal.Session.Close;
with DtbPPal.Session do
begin
MensajeAdd(true, '2 Alias');
if IsAlias(gl.DB.Alias) then MensajeAdd(true, '2.1 Usando alias existente: ' + gl.DB.Alias)
else
begin
MensajeAdd(true, '2.1 Creando Alias: ' + gl.DB.Alias + ' para la carpeta: ' +
gl.DB.DatabaseDir);
AddStandardAlias(gl.DB.Alias, gl.DB.DatabaseDir, 'Paradox');
end;
MensajeAdd(true, '1 Configurar la sesion');
NetFileDir := GL.DB.NetFileDir; MensajeAdd(true, '1.1 Usando Carpeta NET: ' + NetFileDir);
MensajeAdd(true, '1.2 Usando carpeta temporal: ' + gl.DB.PrivateDir);
PrivateDir := gl.DB.PrivateDir; MensajeAdd(true, '1.3 Modo Sesion: cmAll');
ConfigMode := cmAll;
MensajeAdd(true, '1.4 Modo servidor: ' + BoolToStrSP(GL.ModoServidor)); OnPassword := MiSessionPassword;
end; with dtbppal do
MensajeAdd(true, '3 Configurar Base de datos:');
DatabaseName := gl.DB.DatabaseDir; MensajeAdd(true, '3.1 Asignando Controlador');
MensajeAdd(true, '3.2 Carpeta de Base de Datos: ' + GL.DB.DatabaseDir);
MensajeAdd(true, '3.3 Asignando parámetros de Base de Datos (dtbppal) ');
Params.Clear;
params.Add('PATH=' + DatabaseName);
MensajeAdd(True, 'PATH = ' + DatabaseName);
params.Add('DEFAULT DRIVER=PARADOX');
params.Add('ENABLE BCD=FALSE');
MensajeAdd(true, '4 Alias: ' + gl.DB.Alias);
MensajeAdd(true, '4.1 Alias asignado');
DtbPPal.Session.Open;
MensajeAdd(true, '5 Sesion Activa');
DtbPPal.Connected := True;
for i := 0 to pred(ComponentCount) do
if (components[i] is TTable) then
TTable(components[i]).DatabaseName := GL.DB.Alias
else if (components[i] is TQuery) then
TQuery(components[i]).DatabaseName := GL.DB.Alias;
MensajeAdd(true, '6 **Conectado a Base de Datos**');
El resultado para mí es:
Código:
-------------------------------
INICIO DE SESION
-------------------------------
14/06/2006 10:31:01 >> 2 Alias
14/06/2006 10:31:01 >> 2.1 Creando Alias: prog1 para la carpeta: \\prog\tablas
14/06/2006 10:31:01 >> 1 Configurar la sesion
14/06/2006 10:31:01 >> 1.1 Usando Carpeta NET: \\PC1\prog\
14/06/2006 10:31:01 >> 1.2 Usando carpeta temporal: C:\windows\TEMP
14/06/2006 10:31:01 >> 1.3 Modo Sesion: cmAll
14/06/2006 10:31:01 >> 1.4 Modo servidor: Si
14/06/2006 10:31:01 >> 3 Configurar Base de datos:
14/06/2006 10:31:01 >> 3.1 Asignando Controlador
14/06/2006 10:31:01 >> 3.2 Carpeta de Base de Datos: \\PC1\prog\tablas
14/06/2006 10:31:01 >> 3.3 Asignando parámetros de Base de Datos (dtbppal)
14/06/2006 10:31:01 >> PATH = \\PC1\prog\tablas
14/06/2006 10:31:01 >> 4 Alias: prog1
14/06/2006 10:31:01 >> 4.1 Alias asignado
14/06/2006 10:31:01 >> 5 Sesion Activa
14/06/2006 10:31:01 >> 6 **Conectado a Base de Datos**
En tu archivo Alias.Dat, escribe un nombre nuevo, es decir, un Alias que no exista, así este código creará un Alias nuevo y lo configura TODO.
Como verás, el archivo .Net lo tengo configurado en el mismo sitio que el ejecutable en el servidor, (no tengo una carpeta especial para él) aunque eso da igual.
Saludos