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.
__________________
Setry2
Eres un bit?
www.lafesta.com
|