PDA

Ver la Versión Completa : Utilizar un mismo TDataBase para distintas db.


setry2
08-02-2007, 11:10:24
Hola a todos!

Me gustaría utilizar un solo TDAtaBAse para, en tiempo de ejecución, conectarme a distintas bd a elección. Para ello, cierro los datasets, desconecto la conexión previa y cierro la bd; luego le paso al TDataBase la ruta de la otra bd y la conecto. El problema es que hago la qry sobre la nueva bd y los resultados que muestro en el dbgrid pertenecen a la bd anterior.

¿Sabéis por donde puede ir el asunto?

Gracias de antemano!

setry2
08-02-2007, 11:11:34
Perdonad, no había mencionado la bd y la versión de Delphi. Sorry!

xavinet
08-02-2007, 15:38:06
Hola!

Te has asegurado bien de cerrar todos los componentes, incluida la query, antes de hacer el cambio de base de datos?

Porqué en principio no veo problema alguno en lo que haces... deberia cogerte el cambio.

Saludos!

xavinet
08-02-2007, 15:41:39
Hola de nuevo!

Tambén podrías poner un poco de código para darnos alguna pista de lo que puede pasar :rolleyes:

setry2
08-02-2007, 16:22:29
Primero gracias por tu respuesta. Fíjate que es lo que hago:

Tengo un objeto TDataBase en el formulario, que NO creo en ejecución.

//Cojo del registro de windows la ruta a la bd en función del anyoContable que quiero consultar
baseDatosConta := LeerRegistro('Bases de datos', 'BDconta'+anyoContable);

//Se la paso a la bd y me contecto

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

dbContabilidad.params.add('DATABASE NAME=' + baseDatosConta);
dbContabilidad.connected := true;

//Libero la qry que contiene los datos que muestro en el grid.
if Assigned(qryMayor) then
FreeAndNil(qryMayor);

qryMayor := TQuery.create(self);
dsMayor.DataSet := qryMayor; //datasource

with qryMayor do
try
DatabaseName := 'BDContabilidad';
RequestLive := true;
SQL.Add(' laquery ');
Open;
if not isEmpty then
begin
dbgMayor.DataSource := dsMayor; //El grid y el data source.
dsMayor.Autoedit := false;
end;
except
On E: Exception do
begin
CapturaErrores(E);
Cancel;
end;
end;

El funcionamiento erróneo que me da es el siguiente:

Selecciono del combo el AnyoContable 2006 pasando como parametro una cuenta contable del cliente 430000001-> Se muestra en el grid los datos referentes a 2006 para la cuenta contable de ese cliente.

Selecciono del combo el AnyoContable 2007 pasando como parametro otra cuenta contable del mismo cliente 431000001 -> Se muestra en el grid los datos referentes a 2006 de la otra cuenta del cliente, en vez de 2007.

Como ves, la qry es distinta cada vez, y los datos que muestran son distintos, pero siempre referidos a 2006.

Si ahora buscara de la cuenta 432000001 para el 2004, me mostraría del 2006 la cuenta 432000001, es decir, el problema debe estar en la conexión con la bd, que no varía.

Bueno, a ver si te he dado alguna pista.

Gracias por tu tiempo!

xavinet
08-02-2007, 23:54:53
Hola!

:confused:

La verdad es que no se me ocurre nada... a no ser... que aunque ya veo que destruyes y vuelves a crear la query... quede en memoria por alguna razón, la verdad és que... lo que me soluciona un montón de problemas siempre, és hacer un close y un open de la query,así siempre me refresca bien los datos.

En tu caso:

qryMayor.close;
qryMayor.open;

Siento no ser de + ayuda. Suerte!

setry2
09-02-2007, 16:54:25
Bueno, lo hemos intentado. Muchas gracias por tu tiempo. Un saludo.