PDA

Ver la Versión Completa : BDE y terminal server


yogutero
19-07-2007, 18:20:55
Hola buenas tardes.

tratare de explicar el gran problema que tenemos en la empresa. Soy informatico de esta empresa y tenemos instalado un pardox 9 con su BDE en windows 2003 server , en red local funciona perfecto pero a través de terminal server en cuanto se conecta el primer cliente , el BDE se bloquea y no deja entrar a los demas.

Tengo entendido que esto es así, que al iniciar una sesion el BDE se utiliza en ella y no se puede ser usada para las demás.

Querría solucionar este problema, despueés de mirar por internet no h encontrado respuestas que lo hagan.

Muchas gracias.

Neftali [Germán.Estévez]
19-07-2007, 18:31:17
El problema radica en Paradox no en el BDE.
Si la Base de Datos fuera otra (IB/FB, por ejemplo) no tendrías ningun problema.

yogutero
20-07-2007, 07:35:35
Gracias por la respuesta, pero teniendo como tenemos una base de datos desarrollada en paradox desde hace años, hay algo que se pueda hacer?

Gracias de nuevo.

pepon386
20-07-2007, 10:13:24
En mi empresa tubimos el mismo problema cuando empezamos a usar Citrix (una variante de Terminal Server). El problema radica (si mal no recuerdo) en que por defecto todos intentan usar el mismo directorio temporal para la sesión. Te adjunto un ejemplo para abrir una base de datos en AS/400, pero con pocos cambios podrás usarlo para archivos Paradox.


procedure TDMMain.DataModuleCreate(Sender: TObject);
var
Tmp: PChar;
FDirTemp: string;
Condicionantes: string;
begin
IniciaFormatos;
if Database.Connected then
Database.Close;
GetMem(Tmp, 255);
GetTempPath(255, Tmp);
FDirTemp := Trim(string(Tmp)) + Copy(ExtractFileName(ParamStr(0)), 1,
Length(ExtractFileName(ParamStr(0))) - Length(ExtractFileExt(ParamStr(0))));
FreeMem(Tmp);
if not DirectoryExists(FDirTemp) then
CreateDir(FDirTemp);
Session.PrivateDir := FDirTemp;

try
FLogin := TFLogin.Create(Application);
if FLogin.ShowModal = mrOk then
begin
CfgInicio.Usuario := FLogin.Usuario.Text;
Application.ProcessMessages; // necesario para el Splash Form
ConectaBD(Database, FLogin.Usuario.Text, FLogin.Password.Text)
end;
finally
FLogin.Free;
end;
if not Database.Connected then
begin
MessageDlg('No se pudo iniciar la aplicación', mtError, [mbOk], 0);
Application.Terminate;
end;
end;


procedure TDMMain.ConectaBD(DB: TDatabase; const UserID, Password: string);
begin
DB.AliasName := 'AS400';
DB.TransIsolation := tiReadCommitted;
DB.Params.Clear;
DB.Params.Add('user name=' + UserID);
DB.Params.Add('password=' + Password);
try
DB.Open;
except
on e: exception do MessageDlg('Se ha producido el siguiente error: ' + #13#10 + e.Message,
mtError, [mbOk], 0);
end;
end;



Para que funcione correctamente debes de tener en el TDataModule un obteto TDatabase y un objeto TSession

yogutero
20-07-2007, 20:29:14
La verdad es que tiene pinta de funcionar pero lamentablemente yo no se programar en paradox, la aplicacion la hizo un hombre que ya esta jubilado y no quiere saber nada.

En red local funciona perefectamente pero a traves de terminal server es imposible, de todas formas intentare meter este codigo en alguna parte.

Gracias de todas formas.

yogutero
30-07-2007, 09:33:08
Entiendo lo que hace el codigo pero me gustaria saber si se puede asignar un privatedir a mano en paradox en el BDE o algo, es que como ya comenté de programación en paradox ni idea.

Gracias.

yogutero
02-08-2007, 15:30:01
No sy capaz de hacer que funcione en teminal server paradox, puesto que el primer usuario que entra bloquea a los demas.