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';
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