PDA

Ver la Versión Completa : Modificar el path de un Alias de DBE en runtime


KAYO
24-10-2007, 11:01:24
En una aplicación multi-empresa, se necesita accesar directorios diferentes para cada compañía, se me ocurre manejarlo con una tabla donde este contenida la ruta para seleccionar cada juego de base de datos, pero el asunto esta en cambiar en el BDE la ruta de esa base de datos.

Agradecería vuestros consejos acerca de este tema.

Dephi 7, BDE

jhonny
24-10-2007, 15:29:40
Cuando necesites cambiar dicha ruta colocas lo siguiente, por ejemplo:

Database1.Params.Values['SERVER NAME'] := 'Ruta de la nueva base de datos';

Y listo, eso cambiara dicho valor para la aplicación que esta corriendo en ese momento.

Espero te sirva ;).

UltraMan
17-11-2007, 00:48:44
yo resolvi el tema de las tablas en una aplicacion multi-empresas con las tablas en distintos directorios correspondiente a cada empresa, eliminando el alias con estas sentencias :
//
if not session.isAlias('remumes') then begin
Try
session.AddStandardAlias('remumes', OrigenRemuMes, 'DBASE');
session.SaveConfigFile;
except
ShowMessage('Error Creando el alias remumes');
Exit;
End;
end
Else Begin
session.DeleteAlias('remumes');
Try
session.AddStandardAlias('remumes', OrigenRemuMes, 'DBASE');
session.SaveConfigFile;
except
ShowMessage('Error Creando el alias remumes');
Exit;
End;
End;

Mi problema que se crea con esto es el siguiente, el alias lo va cambiando del BDe y con ello la ruta con estas sentencias, pero lo que no funciona es la tabla, esta se queda pegada con el alias antiguo (y por lo tanto con los datos del alias antiguo), el alias es el mismo para todas las tablas, lo que va cambiando es el path, dependiendo la empresa que estoy usando, pero esto me ha probocado que cuando realizo un cambio de empresa esta siga con los datos de la empresa que poseia el alias anterior :mad::o:confused:, si alguien le ha pasado o sabe como solucionar esto, (existe algun metodo para refrescar la tabla por codigo con la nueva informacion y asi liberarla de la informacion anterior) me ayudaria bastante.

Lepe
17-11-2007, 14:33:41
Al cambiar de "empresa" tienes que cerrar la sesion, cerrar el TDatabase, modificar el path del alias, borrando y creando el alias (por ejemplo), por último, abres la sesion, Database y las tablas que necesites en el orden que he dicho

Tip: Al cerrar el TDatabase, se cierran todas las tablas y consultas abiertas en ese momento. Al abrir el Database NO se abre ninguna tabla ni consulta.

Saludos

UltraMan
18-11-2007, 08:41:25
Gracias Lepe por responder, solo uso tabla y datasource, nunca he trabajado con tdatabase, mi aplicacion no es multiusuario, es necesario usar el tdatabase?

Lepe
18-11-2007, 12:54:17
Tampoco usas un TSession, pero en tu código veo Session.IsAlias ;).

Cuando tú añades un TTable/TQuery, etc, delphi crea el TSession y TDatabase implicitamente, (si, de acuerdo, no tienes el componente TSession puesto en tu Datamodule o Form, pero por código puedes acceder a ellos).

En realidad estos dos componentes son los más importantes de tu conexión. De hecho, si pones en tu código "Database." el code insight de delphi te mostrará muchas rutinas interesantes.

Básicamente:

Database.Session.Active := false;
// como ves, a través del Tdatabase se puede acceder al Session que tú utilizas .

Database.Connected := false;
//cerramos la conexión y todas las tablas abiertas.

// cambias el alias, el código que usas ahora mismo.

Database.Session.Active := true;
Database.Connected := true;
AbrirTablas; // llamas a un procedimiento que abra las tablas que necesites


Saludos