PDA

Ver la Versión Completa : Asignar parametros al TSession y al TDataBase por codigo me da error


images
28-08-2004, 19:42:29
Hola :)

Siguiendo algunos tutoriales me he decidido a asignar los valores de mi base de datos paradox en tiempo de ejecucion.

En el OnCreate del DataModule pongo el siguiente codigo q es el q saque de un articulo:


With SesionServer Do // TSession
Begin
NetFileDir:=CamTextoIni.ReadString('SESIONSERVER','NetFileDir','');
PrivateDir:=CamTextoIni.ReadString('SESIONSERVER','PrivateDir','');
End;

With SERVER Do //TDabaBase
Begin
DatabaseName:='SERVER';
Params.Clear;
Params.Add('PATH='+CamTextoIni.ReadString('SERVER','PATH',''));
Params.Add('DEFAULT DRIVER=PARADOX');
Params.Add('ENABLE BCD=FALSE');
Connected:=True;
End;


Despues, con cada tabla hago esto:


Try
Tpv.DatabaseName:='SERVER'; // TPV
Tpv.SessionName:='SessionServer';
Tpv.Active:=True;
Except
ShowMessage('NO SE PUDO ABRIR LA TABLA TPV')
End;
FormSplash.ProgressBar.StepIt;
FormSplash.update;


Me da el error:

"UnNkow DataBase
Alias: Server"

Antes cuando lo tenia en el programa el TDabaBase le puse el Alias q cree. Pero metiendo los parametros a mano no hace falta el alias ¿no?

moesis
28-08-2004, 20:18:31
Saludos,

Mi estimado iniciado en Delphi, el error que estás cometiendo es que no has definido un alias en le utilidad SQLExplorer en el menú de Borland Delphi 7.

Cuando hayas abierto la aplicación has de crear un nuevo 'Alias' que apunte al directorio donde residen tus tablas de Paradox.

Esperando haberte ayudado,
un saludo,

images
28-08-2004, 21:03:09
Gracias :)

Pero no me rula :(

Ya tengo los Alias Creados y con ellos funcionaba bien asignando los parametros en la aplicacion.
Pero al asignarle los parametros en tiempo de ejecucion leyendolos de un .ini me da el error q dicho antes. Antes de leer tu respuesta al hacerlo con el .ini le quite el parametro Alias al TDabaBase, por que pense q al asignarle la ruta y demas parametros no hacia falta el Alias.
Al leer tu respuesta he puesto el Alias otra vez pero tampoco rula :(

__cadetill
29-08-2004, 09:25:27
Está bien que se quieran poner ciertas cosas por código, pero si no es necesario, tampoco hay que ser más papitas que el papa ;)

Creo (no se como tienes la aplicación) que la mayoría de esos parámetros son fijos "esté donde esté" la aplicación, por lo que yo los configuraría en el Inspentor de Objetos.

Otra história es, por ejemplo, la ruta de la base de datos (si no queremos usar alias), que eso sí puede cambiar de instalación a instalación. Para ello puedes hacer algo así (si suponemos que están en el mismo Path que la app.):

if Database1.Connected then Database1.Connected := false;

Database1.Params.Clear;
Database1.Params.Add('DEFAULT DRIVER=PARADOX');
Database1.Params.Add('ENABLE BCD=FALSE');
Database1.Params.Add('PATH=' + ExtractFilePath(Application.ExeName));
Database1.Connected := true;


Espero que te sirva

Raptor
29-08-2004, 18:47:03
holas a todos


images : tu problema consiste en que tu le esta asignando el tsession a los table , no se los asigne , deja que el TDatabase tome la seccion por default.

Este lo que hace es si no existe un TSession entonces crea una en tiempo de ejecucion..

todos tus parametros estan bien.. a excepcion de esto.:
Try
Tpv.DatabaseName:='SERVER'; // TPV
Tpv.SessionName:='SessionServer';
Tpv.Active:=True;
Except
ShowMessage('NO SE PUDO ABRIR LA TABLA TPV')
End;
FormSplash.ProgressBar.StepIt;
FormSplash.update;

o sea no le asite el tsession a nadie..


suerte...

luigidean
07-09-2004, 00:23:01
Yo también tuve un problema parecido, vereis, os cuento: Al igual que el compañero que hace la pregunta, yo tambien queria conectar mi BD por codigo, intenté hacerlo en el evento OnCreate del formulario con este codigo(decir que no tengo alias, solo queria poner el path de la BD):


//lo pongo en el evento Activate porque en el Create da error
DataModule1.dbNoteLinks.DatabaseName:=ExtractFilePath(Application.ExeName) + 'bd';
DataModule1.dbNoteLinks.Connected:=true;
DataModule1.tblCategorias.Open;
DataModule1.tblLinks.Open;


Pero no me funcionó, me daba un error que ahora mismo no recuerdo, entonces se me ocurrió ponerlo en el evento OnActivate del formulario y entonces ya todo fue bien. Para controlar el tema del evento OnActivate os pongo el codigo completo:


if activo=false then begin
self.Top:=self.Top-10;
//lo pongo en el evento Activate porque en el Create da error
DataModule1.dbNoteLinks.DatabaseName:=ExtractFilePath(Application.ExeName) + 'bd';
DataModule1.dbNoteLinks.Connected:=true;
DataModule1.tblCategorias.Open;
DataModule1.tblLinks.Open;
end;
activo:= true;