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