PDA

Ver la Versión Completa : Misma consulta sobre bd distintas. No actualiza info obtenida.


setry2
06-02-2007, 12:50:26
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.