Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Misma consulta sobre bd distintas. No actualiza info obtenida. (https://www.clubdelphi.com/foros/showthread.php?t=40049)

setry2 06-02-2007 12:50:26

Misma consulta sobre bd distintas. No actualiza info obtenida.
 
Hola a todos,

Por falta de experiencia creo que me estoy dejando algo sin hacer. A ver si me podéis ayudar.

Estoy haciendo un programa con Delphi 5 sobre Access 97. Tengo 7 bases de datos access, una para cada año, 2000.mdb, 2001.mdb etc. Todas estas bd las conectaba al iniciar el programa, pero ahora quiero conectar el programa a la bd correspondiente según el año indicado en un combo. Al cambiar del año, en un dbgrid se muestra la info correspondiente a ese año.

El problema que tengo es que si selecciono 2007, muestra la info de 2007, y al cambiar a 2006, me sigue mostrando la info de 2007. Lo que hago cuando vario el año es desconectar la bd de 2007 y conectarle la de 2006, pero parece que no tengo algo en cuenta porque parece que mantiene la conexión con 2006. KeepConection está a false.

Este es el código. Os añado las propiedades de la bd para que veáis como la tengo configurada por si falla algo:

if dbContabilidad.Conected = true then
begin
dbContabilidad.Conected = false;
dbContabilidad.CloseDatasets;
dbContabilidad.Close;
end

dbContabilidad.params.add('DATABASE NAME=' + rutaBD); //Es la ruta a la bd segun el año
dbContabilidad.databasename := 'BDContabilidad';
dbContabilidad.drivername := 'MSACCESS';
dbContabilidad.exclusive := false;
dbContabilidad.HandleShared := false;
dbContabilidad.KeepConnection := false;
dbContabilidad.LoginPrompt := false;
dbContabilidad.Name := 'dbConta';
dbContabilidad.ReadOnly := false;
dbContabilidad.SessionName := 'Default';
dbContabilidad.Tag := 0;
dbContabilidad.TransIsolation := tiReadCommitted;
dbContabilidad.connected := true;

Luego ejecuto la qry que muestra los datos en el grid.

Como no conseguía que fuera he pensado crear la bd en ejecución cada vez que hacía la consulta a la bd. Pero de nuevo vuelvo a hacer algo mal, porque al seleccionar un nuevo año trato de liberar la anterior antes de crear la nueva pero no la encuentra:

He probado de dos formas:

if Assigned(dbConta) then FreeAndNil(dbConta), pero siempre me da falso.

y, por probar (un poco bruto), buscando el componente en la aplicación:

Al código anterior le añado: dbContabilidad := TDataBase.Create(self);

var dbContabilidadAux: TDataBase; //declaro.

dbContabilidadAux := Application.FindComponent('dbConta') as TDataBase;

if Assigned(dbContabilidadAux) then
begin
dbContabilidad.connected := false;
dbContabilidad.CloseDatasets;
dbContabilidad.Close;
freeandnil(dbContabilidad);
freeandnil(dbContabilidadAux)
end;

Pero no localizo el conponente. No se si lo estoy creando mal o que.

Otra opción que sí funciona es crear en mi bd tablas adjuntas al resto de bd y hacer la qry sobre ella, pero es justo lo que trato de evitar.

Bueno, un poco lioso, pero seguro que tiene que ser una tontería.

Gracias de antemano.


La franja horaria es GMT +2. Ahora son las 22:15:09.

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