Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   dos instancias de paradox en terminal server (https://www.clubdelphi.com/foros/showthread.php?t=46106)

yogutero 24-07-2007 15:59:00

dos instancias de paradox en terminal server
 
el problema que tengo s bie sencillo de xplicar pero no soy capaz de rrglarlo seguramente porque no casi se nada de paradox.

No puedo abrir mas de una instancia de la base de datos en el mismo equipo.
La aplicación que tengo funciona ok en LAN pero cuando lo intento hacer en terminal server (al acceder todos los usuarios al mismo bde que está instalado en el servidor) pues me aparace que está bloqueado por el usuario X.
Siempre me dice que está bloqueado por el primer usuario que entra en terminal server.

Un saludo.

yogutero 26-07-2007 15:45:56

Ayuda por favor
 
por favor alguien me puede responder? por mas que elo no hay forma de hacer esto.

Gracias.

sitrico 27-07-2007 00:31:40

Hola, me encuentro evaluando la posibilidad de hacer lo mismo (para un "posible" cliente) pero usa Citrix para el manejo de TS. Encontré esto pero no puedo probarlo:

http://support.citrix.com/article/CTX7640

Consiste básicamente en reubicar el archivo PDOXUSRS.NET en un directorio compartido.

Si te sirve por favor comentalo porque no quiero ir a ciegas a probar a la oficina del cliente. Tirando flechas como dirían por aqui. :) .

yogutero 27-07-2007 09:38:23

Lo probaré
 
Muhisimas gracias por tu aporte, después de leerlo bien te dicen que o montes otro server o mapees la unidad donde está el .net para que asi a traves de terminal server accedan como si fuera red local.

Parece interesante, el lunes que viene lo pruebo y te comento.

Gracias.

yogutero 02-08-2007 15:58:42

Al final no salió
 
Explico las prueba que he hecho a ver que puede pasar.

1.- Doy permisos de administrador a los usuarios que se conectan en terminal server.
2.- La aplicacion está en S:\paradox\trabajo para los usuarios de la red local y la opcion local share=true en el DBE. El terminal server está en D:\paradox\trabajo (es el mismo directorio, los equipos en red local mapean \\servidor\D\ como S:).
3.- Con esta configuracón los equipos en red local funcionan ok pero en terminal server solo puede entrar uno.

El efecto de abrir 2 o varios equipos en terminal server es como si abrieramos varias veces paradox en una maquina y yo creo que es porque el fichero lck de bloqueo está siendo usado y me deja fuera.

Pruebas que he hecho:

- poner local share=false en el bde del servidor, y el terminal server funciona!!! pero los 9 equipos de la red local se vuelven locos, porque supongo que las tablas perderán consistencia al no estar controlados por un unico lck.

- mapear en el mismo servidor D:\ como S:\ asi todo el mundo tiene la misma ruta en NET DIR. No vale de nada.

Respecto al anterior consejo de sitrico no se si lo de el documento de citrix es aplicable o no.


A ver si después de ete rollo nos salta la chispa y algún alma caritativa me ayuda.

sitrico 03-08-2007 00:44:07

Cita:

Al final no salió

--------------------------------------------------------------------------------
Explico las prueba que he hecho a ver que puede pasar.

1.- Doy permisos de administrador a los usuarios que se conectan en terminal server.
2.- La aplicacion está en S:\paradox\trabajo para los usuarios de la red local y la opcion local share=true en el DBE. El terminal server está en D:\paradox\trabajo (es el mismo directorio, los equipos en red local mapean \\servidor\D\ como S.
3.- Con esta configuracón los equipos en red local funcionan ok pero en terminal server solo puede entrar uno.

El efecto de abrir 2 o varios equipos en terminal server es como si abrieramos varias veces paradox en una maquina y yo creo que es porque el fichero lck de bloqueo está siendo usado y me deja fuera.
Creo que por aqui van los tiros, con esto (y si el problema es el .lck) puedes solicionarlo de la siguiente manera:

Fuente: http://www.terra.es/personal/alksoft...lo/paradox.htm

Lo que debes hacer es modificar la aplicación :( para asignar el valor de session.Private dir a un directorio DISTINTO para cada usuario (tal vez debas usar algo así:

Código Delphi [-]
Procedure SetPrivateDir(UserName:String);
Var
Dir : String;
begin
Dir := ExtractFilePath(Application.ExeName)+'Temp\'+UserName;
If ForceDirectories(Dir) Then // crearlo si no existe
   Session.PrivateDir := Dir // aqui se creará el .lck
Else
   raise exception.Create('No se puede inicializar el BDE');
end;

yogutero 03-08-2007 07:35:43

me parece perfecto.
 
Se que una solucion en codigo probablemente funcione, pero ¿Donde se pone eso?
Te comento, llevo años programando...... en visual basic, con mysql, sql server y me encuentro en paradox y su entorno perdido, lo unico que se es que el formulario inicial se llama newgate.fdl y de ahí tiran todos.

¿En el codigo del formulario, en un modulo (si existen modulos en paradox)?

sitrico 05-08-2007 14:49:49

Normalmente se hace en el datamodule (tambien lo puedes hacer en el módulo principal)

Basta con que incluyas estas líneas al formulario principal:

Código Delphi [-]
session.PrivateDir := DirectorioPrivadoUsuario;
session.netfiledir := DirectorioComunCompartido;

Puedes encontrar algo mas en el foro si buscas PrivateDir ó NetFileDir

Te mando un ejemplo de un datamodule que uso.

Código Delphi [-]
//STANDARD, ORACLE, SYBASE, or INTERBASE
// Leer la configuracion de la base de datos
Ini := tIniFile.Create(ChangeFileExt(Application.ExeName)+'.ini');
Try
   // Bases de Datos PARADOX
   Session.PrivateDir := Ini.ReadString('BaseDeDatos','PrivateDir','');
   Session.NetFileDir := Ini.ReadString('BaseDeDatos','NetFileDir','');
   If (Session.NetFileDir <> '') and Not(DirectoryExists(Session.NetFileDir)) then
      MessageBoxStr('No se encontró el directorio de datos del Sistema.  '+
                    'Si se trata  de  una  configuración de red es posible '+
                    'que el servidor este apagado o no tenga acceso a la '+
                    'carpeta o unidad correspondiente. Si es una instalación '+
                    'local puede tener algún problema de configuración. Puede '+
                    'Verificar en Herramientas -> Opciones -> Bases de Datos '+
                    'la configuración actual','Error');
   DBMain.DriverName := Ini.ReadString('BaseDeDatos','DriverName','STANDARD');
   j := Ini.ReadInteger('BaseDeDatos','ParamsCount',3)-1;
   For i := 0 To j do
      DbMain.Params.Add(Ini.ReadString('BaseDeDatos','Params'+FullZero(i,3),''));
Finally
   Ini.Free;
   End;
// Conectar la Base de Datos
DbMain.Connected := True;

DbMain : TDatabase;
los parametros son los "por defecto" de paradox

Tomado del INI

Cita:

[BaseDeDatos]
DriverName=STANDARD
ParamsCount=3
NetFileDir=C:\MIS PROYECTOS\IVA32\DATA
PrivateDir=C:\MIS PROYECTOS\IVA32\
Params000=PATH=C:\MIS PROYECTOS\IVA32\DATA
Params001=DEFAULT DRIVER=PARADOX
Params002=ENABLE BCD=FALSE

yogutero 05-08-2007 18:38:03

Gracias
 
Estupendo, muchas gracias, la unica pregunta que me quedaría como cosas rara es que:

- si en el bde existe la opcion netdir no existira otra opcion donde poner private dir?

la verdad es que no la encuntro en el bde si existe claro.

sitrico 07-08-2007 17:32:55

En el Database Desktop Tienes un directorio PRIV: que por defecto apunta a la carpeta temporal de Windwos.

Por código basta con asignar la propiedad PrivateDir del tSession.

En el BDE Administrator no veo la opción.

yogutero 08-08-2007 15:15:44

Muchas gracias
 
El jueves pruebo todo lo que me has dicho que con eesto de las vacaciones cuando no estoy yo está el cliente.

Lo dicho gracias y al lío.

yogutero 20-08-2007 09:44:35

Solucionado
 
Bueno, pues por fin lo conseguí, dandole vueltas a lo que me habías dicho y como no tenía mucha idea de código en delphi /paradox me fui a buscar dentro de tools/settings/preferences -> database y ahí probé a cambiar el directorio privado a mano.

Probé y vi que cada sesión usa una instancia del BDE o algo parecido porque cada usuario del terminal server mantiene su propio directorio privado asi que solo fue cuestion de entrar como usuario1 y poner el directorio privado en C:\
y despues entrar como usuario2 y cambiarlo a c:\temp por ejemplo, como ambas carpetas estan compartidas totalmente en el servidor, FUNCIONAAA.

Muchas gracias por todos vustros esfuerzos, me abrísteis el camino.

Un saludo.


La franja horaria es GMT +2. Ahora son las 15:43:20.

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