Ver Mensaje Individual
  #1  
Antiguo 28-12-2022
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Reputación: 0
viverosjosem Va por buen camino
Angry Seleccion de datos extremadamente lenta... muero esperando..

LLevo muchos anos trabajando con delphi y Paradox. Y ahora me e visto en la necesidad de migrar a SQL. Mi experiencia con SQL, es mas bien pobre.

La situacion es la siguiente:
Tengo un cliente Chino, que tiene una fabrica de masas de hojas de wantan y arrollado primavera.

La tabla de facturas ya tiene casi 19.000 registros.
Los documentos de venta se graban en dos archivos separados: "Facturas" (contiene toda la informacion del docmento de venta: Rut, Numero, Fecha, monto, iva... etc. Cerca de 19.000 registros). Y "DetFact", detalle de facturas. (contiene: Rut, Numero, ademas del detalle de la compra: Codigo, Descripcion, cantidad.., etc. Cerca de 22.000 registros).

Lo que intento hacer, es presentar en un reporte la informacion de los clientes, sus datos de compra, lo adeudado, y los productos adquiridos.


Ejemplo:

Cliente................Factura.......Estado...............Total..........Pagado..........Saldo...... ....Descrip..........................Cantidad
Gin Sam Wan.........12341.....Pendiente........120.000.........80.000........40.000..........Masa Wantan mediano............400



Estoy usando una base de datos SQL Firebird 2.5, con delphi 2010.

Uso el siguiente codigo para hacer la consulta:

Código SQL [-]
         SQLDataSet1.Close;
         SQLDataSet1.CommandType := ctQuery;

         SQL_Text := 'SELECT  ' + 
                              'Facturas.TipoDoc, Facturas.Rut, Facturas.Numero, ' +
                              'Facturas.Estado, '     +
                              'Facturas.FechaEmi, Facturas.FecPago, ' +
                              'Facturas.Total, Facturas.Pagado, Facturas.Saldo, '  +
                              'DetFact.Codigo, DetFact.Descrip, DetFact.Cantidad '  +
                              'Clientes.Nombre, ' +
                      'FROM Facturas '                                 +
                      'LEFT JOIN Clientes '                            +
                      'ON Clientes.Codigo=Facturas.Rut ' +
                      'LEFT JOIN DetFact '                            +
                      'ON DetFact.Rut=Facturas.Rut AND DetFact.Numero=Facturas.Numero  ' +
                      'WHERE ' +
                                 'Facturas.Estado<>' + QuotedStr('A') + ' ' +
                      'ORDER BY Facturas.FechaEmi ' + ';';

   SQLDataSet1.CommandText := SQL_Text;

   SQLDataSet1.Open;
   if ( not SQLDataSet1.Eof ) then begin
     ...
     ...
     Lineas de codigo para el reporte..
     ...


El problema es, que esta consulta se demora mas de 10 minutos en arrojar resultados.

Existe alguna manera de hacer esto distinto?, para que la consulta sea mas rapida, sino automatica?.

Saludos.

Gracias de antemano.

Jose Miguel B.
Responder Con Cita