Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
SQL inventario

Hola amigos, alguna idea para mejorara esto...

Tengo una consulta SQL, que demora aproximadamente 15 segundo en devolver resultados. Esto empezo a ocurrir mientras mas registro tengo en mi base de datos.

Este es el codigo que utilizo.

Código Delphi [-]
IBQUERY1.CLOSE;
IBQUERY1.SQL.Clear;
IBQUERY1.SQL.ADD('SELECT m.cod_insum,M.nom_insum, m.unidad, M.CRITICO, m.rotacion,');
if sComboBox1.ItemIndex <> 0 then
begin
IBQUERY1.SQL.ADD('((SELECT coalesce(sum(cantidad),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND I.EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))-(SELECT coalesce(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND I.EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))) AS SALDO, ((SELECT coalesce(sum(cantidad * precio * tc),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))- (SELECT coalesce(sum(cantidad * precio * tc),0) FROM inventario I WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD(')))/coalesce(NULLIF((SELECT sum(cantidad) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))-(SELECT COALESCE(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD(')),0),1) as UNITARIO, ');
IBQUERY1.SQL.ADD('((SELECT coalesce(sum(cantidad),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND I.EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))-(SELECT coalesce(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND I.EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))) AS SALDO, ((SELECT coalesce(sum(cantidad * precio * tc),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))- (SELECT coalesce(sum(cantidad * precio * tc),0) FROM inventario I WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD(')))/coalesce(NULLIF((SELECT sum(cantidad) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))-(SELECT COALESCE(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD(')),0),1) * ');
IBQUERY1.SQL.ADD('((SELECT coalesce(sum(cantidad),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='+QUOTEDSTR('I'));
IBQUERY1.SQL.ADD('AND I.EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))-(SELECT coalesce(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and (tipo ='+QUOTEDSTR('E'));
IBQUERY1.SQL.ADD('OR TIPO ='+QUOTEDSTR('T')+')');
IBQUERY1.SQL.ADD('AND I.EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND I.bodega =(SELECT ID FROM BODEGA WHERE NOMBRE ='+quotedstr(scombobox1.text));
IBQUERY1.SQL.ADD('AND EMPRESA ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('))) AS SUBTOTAL');
 
IBQUERY1.SQL.ADD('FROM insumos M where m.empresa ='+quotedstr(form1.label1.caption));
IBQUERY1.SQL.ADD('AND (M.TIPO ='+quotedstr('T'));
IBQUERY1.SQL.ADD('OR M.TIPO IS NULL)');
IBQUERY1.SQL.ADD('GROUP BY m.cod_insum,M.nom_insum, m.unidad, m.critico, m.rotacion');

Es muy larga... alguna idea para hacerla mas eficiente.

Lo que hace es:
Busca los codigos en la tabla insumos (aproximadamente 1000 registros), utiliza estos codigo en la tabla inventario dado que la suma de todos los ingresos, menos la suma de todos los egresos. (calcula la cantidad de existe de cada uno de los insumos).

Además para cada uno de los insumos calcula el precio pondera, segun la sumatoria de los ingresos por su precio, menos los egresos por su precio.

UFFFF.... bueno, el tema es que esta funcionando, pero es muy relento.... unos 15 segundo en entregar la info.

Que me dicen ustedes, valdra la pena mejorar esto?
Como lo puedo hacer?
Alguna idea?

Gracias anticipadas.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Facturación e Inventario silver07 Conexión con bases de datos 49 22-10-2015 19:45:33
SQL inventario mjjj SQL 7 12-12-2008 17:13:29
Aplicacion + Inventario mjjj Varios 8 03-11-2008 15:58:54
Costo de Inventario NickName SQL 4 09-10-2006 06:30:31
Inventario de Hardware vichovi API de Windows 3 03-01-2005 15:35:10


La franja horaria es GMT +2. Ahora son las 11:29:21.


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
Copyright 1996-2007 Club Delphi