PDA

Ver la Versión Completa : Problemas: consulta por fechas con parametros


radiohead
06-08-2007, 13:07:37
Hola!

Estoy conectando a una base de datos access mediante ADOConnection.
En el TAdoDataSet utilizo la siguiente consulta SQL:


SELECT
[_FACTURAS].FechaRecibo,
[_FACTURAS].NumeroRecibo,
[_FACTURAS].ID_CLIENTE,
[_ABONADOS].Nombre1,
[_FACTURAS].CodigoAbonado, Calles.NombreCalle & ', ' & [_ENGANCHES].NumeroFinca & ' - ' & [_ENGANCHES].EscaleraFinca & ' - ' & [_ENGANCHES].PisoFinca & ' - ' & [_ENGANCHES].PuertaFinca AS DIRECCION, [_FACTURAS].Consumo,
[_FACTURAS].ImportePrincipal,
[_FACTURAS].Situacion

FROM
Calles INNER JOIN ((_ABONADOS INNER JOIN _ENGANCHES ON [_ABONADOS].CodigoAbonado = [_ENGANCHES].CodigoAbonado)
INNER JOIN _FACTURAS ON [_ABONADOS].CodigoAbonado = [_FACTURAS].CodigoAbonado) ON Calles.CodigoPoblacion = [_ENGANCHES].CodigoPoblacionFinca

WHERE ((([_FACTURAS].FechaRecibo) BETWEEN :FIni And :FFin))


Utilizo 2 DateTimePicker para seleccionar la fecha de inicio y la fecha de fin, y lanzo la consulta en el siguiente código:


procedure TfrmFacturacion.actPresentarExecute(Sender: TObject);
var
FechaIni, FechaFin: String;
begin
FechaIni := DateToStr(DateTimePicker1.Date);
FechaFin := DateToStr(DateTimePicker2.Date);

cdsFacturacion.Close;
ADOdsFacturacion.Close;

ADODsFacturacion.Parameters[0].Value := FechaIni; //TADODataSet
ADODsFacturacion.Parameters[1].Value := FechaFin;

ADOdsFacturacion.Open;
cdsFacturacion.Open;

mkdFactura.SetFocus;
end;


El problema es que, si introduzco un rango de fechas, en el cual no haya ningun registro, la consulta la hace inmediatamente, sin problemas y casi sin esperas. Pero si introduzco un rango en el que sí tendría que devolver valores se queda colgado. Sin mensajes de error, pero colgado.

Al seguir la traza paso a paso, veo que la instrucción de apertura del ADODataSet sí que la pasa, (aunque le cuesta), pero no así la apertura del clientDataSet.

Las consultas que devuelven valores devuelven unos 4000 registros. Esta tabla tiene actualmente unos 150.000 registros, pero en consultas a otras tablas con parecido número de registros devueltos (no hablo de totales) la respuesta es inmediata.

¿A qué se puede deber?
Salu2 anticipadamente.