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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Como puedo mejorar esta consulta...

Holas a todos, espero que puedan ayudarme con la siguiente consulta que la puse en DELPHI, solo que la busqueda como verán es muy lenta....demora muucho en encontrala...hasta tan solo escribir un nro se me demora en aparecer el el TEdit.
A continuacion les muestro el codigo que hice...
Código SQL [-]
 if E.Text <> '' then
 with Q2 do
 begin
    Close;
    SQL.Text:= 'SELECT i.IdM,i.CiE,i.NomE,i.ApePE,i.ApeME,i.SexoE,i.FinscripcionE, ' +
                      'i.CarreraE,i.DeptoE,i.CalleE,sum(TotalRecibido) as Monto ' +
                 'FROM BDinscripcion i ' +
                'INNER JOIN BDbeca b ON i.IdE=b.IdE ' +
                  'AND ' + Buscar + ' LIKE '+ #39 + E.Text +'%'+#39+
               ' GROUP BY IdM, CiE, NomE, ApePE, ApeME, SexoE, FinscripcionE, CarreraE, DeptoE, CalleE';
    Open;
 end;
Este codigo se encuentra en...
Código Delphi [-]
procedure TFdevolucion.EChange(Sender: TObject);
var campo,Buscar:string;
begin
campo :=  S.Text;
  if campo = 'Carnet Identidad' then Buscar:='CiE'
  else
    begin
      if campo = 'Nombre' then Buscar:='NomE'
      else
       begin
          if campo = 'Apellido Paterno' then Buscar:='ApePE'
          else
            begin
              if campo = 'Apellido Materno' then Buscar:='ApeME'
              else
                if campo = 'Departamento' then Buscar:='DeptoE';
            end;//fin paterno
       end;//fin nombre
    end;// fin primer else
   if E.Text <> '' then  
   with Q2 do
   begin
      Close;
      SQL.Text:= 'SELECT i.IdM,i.CiE,i.NomE,i.ApePE,i.ApeME,i.SexoE,i.FinscripcionE, ' +
                        'i.CarreraE,i.DeptoE,i.CalleE,sum(TotalRecibido) as Monto ' +
                   'FROM BDinscripcion i ' +
                  'INNER JOIN BDbeca b ON i.IdE=b.IdE ' +
                    'AND ' + Buscar + ' LIKE '+ #39 + E.Text +'%'+#39+
                 ' GROUP BY IdM, CiE, NomE, ApePE, ApeME, SexoE, FinscripcionE, CarreraE, DeptoE, CalleE';
      Open;
   end;
   if not Q2.IsEmpty = false then
    begin
      MessageDlg('No existe el registro',mtInformation,[mbOk],0);
      E.SetFocus;
    end;
end

Como verán es un busqueda que realiza a medida que se escribe en un TEdit. Selecciono varios campos que necesito de una TablaInscripcion y realiza una suma de los montos recibido de otra tablaBeca, cuando sus IDE sean iguales. De toda esta informacion estoy realizando una busqueda de todos aquellos que cumplan la condicion INNER JOIN.

Ahhhh!!! sino cologo el Group BY pues varios nombres se repetiran...cuantas veces hayan recibido el TOTALRECIBIDO.

Solo que se me hace lenta...
Alguna sugerencia....
gracias

Última edición por delphi.com.ar fecha: 16-04-2010 a las 00:44:47.
Responder Con Cita
  #2  
Antiguo 16-04-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Discúlpame, pero la tuve que editar para que se pueda ver dentro del foro.
Mi pregunta al respecto es: ¿Verdaderamente quieres agrupar por TODOS esos campos?... Sin llegar a comprender el modelo de datos completos, ¿no pertenecen en forma distinta a un único registro de la misma tabla?

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 16-04-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

La consulta en si, no lo veo muy muy compleja que digamos, claro está que nos nos has comentado con que servidor de Base de datos trabajas , el problema que veo es que estas saturando la red abriendo y cerrando el DataSet(Q2) y peor aún que lo estas ejecutando dentro del evento OnChange del edit..
Quizas se pueda ganar un poco de velocidad quitando la linea donde cierras(Close;) el DataSet....hummm...no lo sé..haber intentalo y nos comentas como te fué..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #4  
Antiguo 16-04-2010
Avatar de sisne
sisne sisne is offline
Miembro
 
Registrado: mar 2010
Posts: 71
Poder: 15
sisne Va por buen camino
Hola!
Gracias por responder

rgstuamigo: Estoy usando SQL Server 2000. Y quité la línea del (close), pero me sigue haciendo lenta la búsqueda.

delphi.com.ar: Si necesito agruparlas para que me muestre un solo registro por cada estudiante.

Disculpenme pero voy a explicar laaargo.

Tengo dos tablas: DBinscripcion y BDbeca. Donde un inscrito recibe varias montos de dinero (Beca), cada mes.
Durante un año recibe 12 veces un XXX monto y eso sucede por decir por 5 años.
Pero pasado el tiempo este inscrito tiene que devolver la beca otorgada.
Es decir, al finalizar los 5 años se tiene que realizar la suma Total de lo recibido, aqui se unen las dos tablas (Q2) donde de la tabla BDbeca saco el campo y sumo el TotalRecibido.

Y si necesito esos campos para visualizar en DBEdits o en un DBGrid.

Espero que puedan comprederme y ayudarme...Quizás pueda realizar otro tipo de búsqueda donde no sea tan lenta el resultado.

OJO: Con esta consulta solo me devuelve o se me visualizan los resultados de aquellos que "recibieron" la beca. (IdE=IdE) inner join

Graaacias.
Responder Con Cita
  #5  
Antiguo 16-04-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Estoy de acuerdo con rgstuamigo.

Quita la función del evento OnChange, y modifica para que se ejecute al pulsar un botón o intro por ejemplo en el mismo campo.

Ya nos contarás.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 16-04-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por sisne Ver Mensaje
delphi.com.ar: Si necesito agruparlas para que me muestre un solo registro por cada estudiante.
Ok!.. a eso iba, y pregunto... Tienes una tabla de estudiantes, donde un único registro representa a un único estudiante??
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 16-04-2010
Avatar de sisne
sisne sisne is offline
Miembro
 
Registrado: mar 2010
Posts: 71
Poder: 15
sisne Va por buen camino
Hola!

Cita:
Empezado por delphi.com.ar Ver Mensaje
Ok!.. a eso iba, y pregunto... Tienes una tabla de estudiantes, donde un único registro representa a un único estudiante??
Si tengo en la Tabla Estudiantes un único registro. Un estudiante recibe varias becas.

Tuve que cambiar al hace un Click en un boton, para realizar la búsqueda.

Graaacias!
Responder Con Cita
  #8  
Antiguo 16-04-2010
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Agrega un ínidice para el campo "idE" en cada una de las tablas imbolucradas en la consulta. También prueba agregando otro índice para cada uno de los campos en donde haces las búsqueda de texto completo.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
Respuesta



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
Alguien sabe como puedo hacer esta conexion!!! Pitoniso Internet 2 19-05-2007 23:20:29
¿Cómo puedo armar esta consulta? PaFernan99 SQL 4 02-03-2007 14:30:34
Como puedo comprobar que una Ttable ya está abierto pjmedina Varios 2 14-06-2006 12:32:34
Si mi ventana esta oculta como la Puedo mostrar JULIPO API de Windows 4 07-02-2006 00:07:31
Como puedo saber si esta creado un formulario??? Roger OOP 1 13-04-2004 15:57:49


La franja horaria es GMT +2. Ahora son las 05:19:50.


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