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 05-07-2006
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 158
Poder: 20
maravert Va por buen camino
Que me falta. Ordenar informaciòn

Hola a todos, mi duda es la siguiente:


Tengo una tabla en Pardox 7 y delphi 7 que se llama datos.db, en ella tengo estos campos (docente : string; apoyo, puntualidad, trato ... : integer) donde los aluknos califican al maestro.

Lo que deseo hacer es obtener la calificaciòn promedio de cada uno de los maestros, en promedio cada maestro tendrá 400 registros, lo que deseo es sumar todas las calificaciones por cada maestro en puntualidad, apoyo, trato, etc, y obtener la calificaciòn promedio general. Luego presentar esta informaciòn en un reporte de mayor a menor.

Pero al procesar los registros mediante una consulta el proceso se queda en un bucle y al parecer no encuentra el fin de registros (EOF)




Estoy ordenando una tabla (datos.db) por docente mediante una consulta y paso los resultados a otra tabla (pordocente.db), me pasa los resultados correctamente pero no sale del ciclo al llegar a EOF.

la tabla la ordeno de la siguiente manera


Código SQL [-]
query1.Close;
Query1.SQL.Text:= 'SELECT * FROM datos order by docente';
 query1.Open;
query1.First;




Cuando quiero procesar la tabla no se sale del segundo while, es decir no llega a esta instrucciòn


Código Delphi [-]
showmessage ('leei todos los archivos');




El codigo es el siguiente:


Código Delphi [-]
procedure TForm2.Grficas1Click(Sender: TObject);
var
anterior : string;
reg, Tdomi, Thabi, Tform, Tpunt, Tpres, TApoy, Ttrat, prom : real;
aperiodo, adocente, aasignatura, asemestre, agrupo: string;
afecha : Tdatetime;
registros, totales, a : integer;
begin
table2.Open;
while not table2.Eof do
   begin
   table2.Delete;
   end;
totales := 0;
a := 1;
query1.Close;
Query1.SQL.Text:= 'SELECT * FROM datos order by docente';
  //   Se guardan los campos a variables
query1.Open;
query1.First;
registros := query1.RecNo;
reg := 0;
totales := 0;
while not query1.Eof do
    begin
      anterior := query1.fieldbyname ('docente').AsString;
      aperiodo    := query1.fieldbyname ('periodo').AsString;
      aasignatura := query1.fieldbyname ('asignatura').AsString;
      asemestre   := query1.fieldbyname ('semestre').AsString;
      agrupo      := query1.fieldbyname ('grupo').AsString;
      afecha      := query1.fieldbyname ('fecha').AsDateTime;
      while anterior = query1.fieldbyname ('docente').AsString do
            begin
             reg :=  reg + 1;
             totales := totales + 1;
             Tdomi := Tdomi + query1.fieldbyname ('dominio').Asinteger;
             Thabi := Thabi + query1.fieldbyname ('habilidad').Asinteger;
             Tform := Tform + query1.fieldbyname ('evaluar').Asinteger;
             Tpunt := Tpunt + query1.fieldbyname ('puntualidad').Asinteger;
             Tpres := Tpres + query1.fieldbyname ('presentacion').Asinteger;
             Tapoy := Tapoy + query1.fieldbyname ('apoyo').Asinteger;
             Ttrat := Ttrat + query1.fieldbyname ('trato').Asinteger;
 
             query1.Next;
 
    end;
    Showmessage ('?sali del while');
    table2.Append;
    table2.FieldByName('periodo').Asstring := aperiodo;
    table2.FieldByName('docente').Asstring := anterior;
    table2.FieldByName('asignatura').Asstring := aasignatura;
    table2.FieldByName('semestre').Asstring := asemestre;
    table2.FieldByName('grupo').Asstring := agrupo;
    table2.FieldByName('fecha').AsDateTime := afecha;
    table2.FieldByName('dominio').AsFloat := Tdomi / reg;
    table2.FieldByName('habilidad').AsFloat := Thabi / reg;
    table2.FieldByName('evaluar').AsFloat := Tform / reg;
    table2.FieldByName('puntualidad').AsFloat := Tpunt / reg;
    table2.FieldByName('presentacion').AsFloat := Tpres / reg;
    table2.FieldByName('apoyo').AsFloat := Tapoy / reg;
    table2.FieldByName('trato').AsFloat := Ttrat / reg;
    prom :=  (  ( Tdomi / reg) +  (Thabi / reg) + (Tform / reg) + (Tpunt / reg) + (Tpres / reg) +  (Tapoy / reg)+ (Ttrat / reg)) / 7;
    table2.FieldByName('promedio').AsFloat := prom;
    table2.Post;
    reg := 0;
    Tdomi := 0; Thabi := 0; Tform := 0; Tpunt := 0; Tpres := 0; Tapoy := 0; Ttrat := 0;
end;
 showmessage ('leei todos los archivos');
 
close;
end;


Podrìa alguin decirme que estoy haciendo mal.

Gracias a todos

Última edición por marcoszorrilla fecha: 05-07-2006 a las 20:03:09.
Responder Con Cita
  #2  
Antiguo 05-07-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Así a ojo, creo que con un simple SQL lo resolverías:

Código SQL [-]
Select Docente, Avg(Apoyo), Avg(Trato), Avg(puntualidad)
From MiTabla
Group By Docente



Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 05-07-2006
fra3910 fra3910 is offline
Registrado
 
Registrado: dic 2004
Ubicación: Cáceres / Madrid
Posts: 5
Poder: 0
fra3910 Va por buen camino
El problema está aqui
Código Delphi [-]
 
while anterior = query1.fieldbyname ('docente').AsString do
            begin
             reg :=  reg + 1;
             totales := totales + 1;
             Tdomi := Tdomi + query1.fieldbyname ('dominio').Asinteger;
             Thabi := Thabi + query1.fieldbyname ('habilidad').Asinteger;
             Tform := Tform + query1.fieldbyname ('evaluar').Asinteger;
             Tpunt := Tpunt + query1.fieldbyname ('puntualidad').Asinteger;
             Tpres := Tpres + query1.fieldbyname ('presentacion').Asinteger;
             Tapoy := Tapoy + query1.fieldbyname ('apoyo').Asinteger;
             Ttrat := Ttrat + query1.fieldbyname ('trato').Asinteger;
 
             query1.Next;
 
    end;
Este bucle nunca se sale, porque aunque tienes puesto el query1.Next, la condición para el último registro puede hacer que se quede embuclado. Es decir, para el último registro, el next dara EOF pero no se sale del bucle, y en ese caso siempre es anterior = query1.fieldbyname ('docente').AsString

Te valdría con cambiar el while a algo asi

WHILE (anterior = query1.fieldbyname ('docente').AsString) OR (NOT query1.EOF) do
...

Asi se sale del bucle cuando llegue al final de la tabla

Espero haberte ayudado

Saludos

Última edición por marcoszorrilla fecha: 05-07-2006 a las 20:16:36.
Responder Con Cita
  #4  
Antiguo 05-07-2006
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 158
Poder: 20
maravert Va por buen camino
Gracias

Gracias a todos por su respuesta, voy a probar lo que me han echo saber.

Muy agradecido, Muy agradecido, Muy agradecido

Maravert
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
Me falta el .dcu Fita Varios 2 15-09-2005 03:26:36
¡Error conexion con acces, Falta el archivo de informacion de grupo de trabajo.....!! aram2r Conexión con bases de datos 3 08-03-2004 11:18:30
Al ejecutar, falta una DLL andre Varios 4 04-09-2003 14:33:02
ordenar la informacion en un tgrid Giniromero Conexión con bases de datos 2 18-06-2003 12:47:20
Falta una DCU agonzalez Varios 3 29-05-2003 01:48:48


La franja horaria es GMT +2. Ahora son las 11:54:12.


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