PDA

Ver la Versión Completa : Redireccionar Base de Datos


CFPA86
18-07-2017, 00:02:17
Hola a todos
Tengo una aplicación realizada en D7 y paradox, Esta a su vez tiene un control DataModule el cual contiene unas tablas, todas estas tienen el mismo alias, hasta ahí funciona bien. Para la nueva versión deseo usar las mismas tablas con datos en otra ubicacion, ademas de seguir usando los datos con los que venia. Como hago para que tome en memoria los nuevos datos, después de tener en memoria los viejos?

Alias: Bdempresas
Ubicacion en el disco duro
C:\empresa\DatosViejos\
C:\empresa\DatosNuevos\

Aparte del codigo que uso

With Session Do
// Cerrar el alias de Datos viejos //
Begin
DeleteAlias('Bdempresas'):
AddStandardAlias('Bdempresas','C:\empresa\DatosViejos\','Paradox');
SaveConfigFile;
End;

With Session Do
// Abrir el alias de Datos Nuevos //
Begin
DeleteAlias('Bdempresas'):
AddStandardAlias('Bdempresas','C:\empresa\DatosNuevos\','Paradox');
SaveConfigFile;
End;


Gracias por la colaboración

gatosoft
19-07-2017, 00:39:42
Recuerdo cuando trabajé el tema de paradox... hace unos 10 años, que teniamos un solo programa para acceder a diferentes ambientes de la BD (Desarrollo, Calidad y Producción). La base de datos se enconraba en un "servidor" (carpetas compartidas)

Al iniciar se modificaba la variable Session.ProvateDir

y se cambiaba un parametro del DatabaseEngine via codigo: 'NET DIR'... el driver es uno solo y pueden ser diferentes alias...

Tengo en la memoria(usb) este fragmento de codigo:

var
vDriverParams: TStringList;

....

Try
Session.PrivateDir := 'Ruta local (caché)'
Except
end;

vDriverParams := TStringList.Create;
try
Try
if pLimpiar then
vDriverParams.Add('NET DIR=')
else
vDriverParams.Add('NET DIR='+vRutaDB);
Session.ModifyDriver('PARADOX',vDriverParams);
Session.SaveConfigFile;
Except
Result := 0;
end;//Try
finally
vDriverParams.Free;
end; //Try




espero que te sirva

CFPA86
19-07-2017, 00:47:44
GatoSoft, gracias por tu respuesta la ensayare a ver como me va y les diré.

CFPA86
19-07-2017, 18:06:56
No me funciona, me podrían dar una mano porfa.
Gracias

Casimiro Notevi
19-07-2017, 18:21:11
No me funciona, me podrían dar una mano porfa.
Gracias
Explica por qué no funciona, qué mensaje sale, qué hace exactamente, cómo lo estás haciendo, etc......

CFPA86
20-07-2017, 01:53:57
No me saca error en particular, aun desconociendo Plimpiar, mas bien creo yo que puede ser desconocimiento del código (Codigo GataSoft).De todas formas les dire que hago, cree un aplicativo aparte que simulara lo que pretendo, tiene un DataModule conteniendo una tabla (común para ambas empresas), un combobox para empresa1 y empresa2, un Dbgrid que me lista los datos, sea de empresa1 o empresa2, aclaro en el registro del sistema tengo una vble que almacena la ruta de la B.D., corro el aplicativo y me lista los datos de la empresa1, elijo la empresa2 para que me liste estos datos y me sigue mostrando los de la empresa1, Nuevamente corro el aplicativo y ahi si me muestra los datos de la empresa2.


var
vDriverParams: TStringList;

....
Procedure TForm1.FormActivate(Sender:TObject);
begin
vDriverParams := TStringList.Create;
end;

Procedure TForm1.ComboBox1Change(Sender:TObject);
Begin

DataModule1.TEmpresas.Active := False;
DataModule1.TEmpresas.Close;

if (ComboBox1.Text = "Empresa1") then
begin
With Session Do
Begin
DeleteAlias('Bdempresas'):
AddStandardAlias('Bdempresas','C:\empresa1\','Paradox');
vDriverParams.Add('NetDir=C:\empresa1\');
ModifyDrive('Paradox',vDriverParams);
SaveConfigFile;
End;
End;

if (ComboBox1.Text = "Empresa2") then
begin
With Session Do
Begin
DeleteAlias('Bdempresas'):
AddStandardAlias('Bdempresas','C:\empresa2\','Paradox');
vDriverParams.Add('NetDir=C:\empresa2\');
ModifyDrive('Paradox',vDriverParams);
SaveConfigFile;
End;
End;

DataModule1.TEmpresas.Active := True;
DataModule1.TEmpresas.Open;

Les agradezco la ayuda que me puedan ofrece y me disculpan por el código.

gatosoft
20-07-2017, 13:36:02
Veo que tienes mal el parametro NET DIR (Falta el espacio). Pero bueno, es solo una parte y aplica principalmente cuando se trabajan archivos en red (concurrentes)

Veamos otra forma:

En tu Programa debes tener un comoponente TDatabase que tiene una propiedad DataBaseName y ahí defines el alias.

En lugar de hacer el DeleteAlias y addStandarAlias desde la session, intenta modificar los parametros de la base, asi:


Primero en la session defines las rutas (no es obligatorio si no vas a trabajar en red, pero no afecta si lo haces)

vRutaNetDir:= 'ruta donde ubicas el archivo de control de red'; //puede ser la misma ruta de los datos, el archivo se crea ahi
MySession.NetFileDir := vRutaNetDir
MySession.PrivateDir := 'C:\TEMP'

vRuta:= 'Lugar donde se ubican los archivos DB';
MyDatabase.Params.Clear;
MyDatabase.Params.Add('PATH=' + vRuta);
MyDatabase.Params.Add('DEFAULT DRIVER=PARADOX');
MyDatabase.Params.Add('ENABLE BCD=FALSE');
MyDatabase.Connected := true;

Espero que te sirva,

NOTA: No olvides encerrar tu código con las etiqueteas respectivas ... [ DELPHI] tu codigo delphi [ /DELPHI]

CFPA86
22-07-2017, 18:36:51
Hola a todos nuevamente, !! Lo logré !! con esfuerzo lo logré muchas gracias a todos.
Este es mi codigo final


Procedure TForm1.ComboBox1Change(Sender:TObject);
Begin

DataModule1.TEmpresas.Active := False;
DataModule1.TEmpresas.Close;
DataModule1.Tempresas.DataBaseName := "";

if (ComboBox1.Text = "Empresa1") then
begin
With Session Do
Begin
DeleteAlias('Bdempresas'):
AddStandardAlias('Bdempresas','C:\empresa1\','Paradox');

Close;
Open;

SaveConfigFile;
End;
End;

if (ComboBox1.Text = "Empresa2") then
begin
With Session Do
Begin
DeleteAlias('Bdempresas'):
AddStandardAlias('Bdempresas','C:\empresa2\','Paradox');

Close;
Open;

SaveConfigFile;
End;
End;

DataModule1.Tempresas.DataBaseName := "Bdempresas";
DataModule1.TEmpresas.Active := True;
DataModule1.TEmpresas.Open;

Como ven lo que ,e hacia falta era nada, abrir y cerrar la seccion asi como definir en el databese de la tabla el nuevo alias, muchas gracias nuevamente a todos por su colaboracion, aahhhh y disculpen por el codigo no se como subrayarlo.
Chao

ecfisa
22-07-2017, 19:46:15
Hola CFPA86.

Primero que nada, me alegro que encontraras la solución ^\||/, también aprovecho para pedirte que cuando incluyas código en tus mensajes lo encierres entre las etiquetas correspondientes de este modo:
http://sia1.subirimagenes.net/img/2014/09/12/140912092124532033.jpg
para mejorar la visualización.


Saludos :)