FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Contar filas de un DBGrid y comparar un campo especifico
Hola!
Pueden darme alguna solucion?. Una vez que tengo llena de datos en el DBGrid2 de datos de la TTablaMaterias, donde estan los campos de IdM, CodigoMateria,NombreMateria, "Calificacion", etc.... Donde en calificacion puede aparecer la informacion de: Aprobado, Reprobado o Ninguno. Y en IdM solo es contador. Ahora lo que quiero es, contar, cuantas Aprobados , Reprobados y SinNota existen de las materias que se programaron, que esta informacion se encuentra en el DBGrid2? Intente realizar este codigo: Código:
For i:=1 to Tacademico['IdM'] do begin Kon:=Kon+1; if Facademico.Tmateria['CalificacionM']='Aprobado'then A:=A+1 else begin if Facademico.Tmateria['CalificacionM']='Reprobado'then R:=R+1 else N:=N+1; end; end; Pero con este codigo solo me da como resultado...por decir en el DBGrid2 de Materias tengo 4 materias programas y seleccionado toda la fila "3" Donde : IdM "1" Calificacion "Aprobado" IdM "2" Calificacion "Aprobado" IdM "3" Calificacion "Reprobado" IdM "4" Calificacion "SinNota" Y cuando ejecuto la sentencia pues me da como resultado TtotalProgramadas=3, Aprobadas=0, Reprobadas=3 y SinNota=0. Cuando deberia dar de resultado: TtotalProgramadas=4, Aprobadas=2, Reprobadas=1 y SinNota=1. Y por decir esta seleccionado en el DBGrid2 la fila 2. Y cuando ejecuto la sentencia pues me da como resultado TtotalProgramadas=2, Aprobadas=2, Reprobadas=0 y SinNota=0. Como te daras cuenta, pues solo cuenta en el mismo lugar nada mas... Como seria el codigo para contar y comparar cada campo? Gracias! |
#2
|
||||
|
||||
Hola sisne.
Una idea simple, recorrer la tabla y evaluar lo que deses. Código a modo de ejemplo: Código:
Total:= 0; Aprobados:= 0; Reprobados:= 0; SinNota:= 0; while not Tabla.Eof do begin case Tabla.Calificacion of '1','2' : Inc(Aprobados); '3' : Inc(Reprobados); '4' : Inc(SinNota); end; Inc(Total); // Perdón sisne, me olvidé esta línea !!! Tabla.Next; end; Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 25-03-2010 a las 22:20:10. |
#3
|
||||
|
||||
En el ciclo que pones, sisne, realmente no estás recorriendo los registros (fíjate que el contador del ciclo, i, no interviene para nada) y siempre tomas el mismo valor. Como lo hace eficsa es correcto.
Por otra parte, creo más conveniente usar una consulta SQL especial para el conteo:
De esta manera, no tienes que hacer un ciclo pues la consulta te trae todos los resultados de una sentada. // Saludos |
#4
|
||||
|
||||
Si roman, toda la razón, es mucho más eficiente con la consulta.
Pero eran las 2:30 de la mañana y tenia pocas luces... . Como verás, también cometí un error: Me olvidé de incrementar Total y se le iba a poner difícil promediar sin esa línea... Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
||||
|
||||
Hola!
Les cuento que solucioné ese detalle. ecfisa, segui tu ayuda y coloqué este código: Código:
TMateria.First; while not TMateria.Eof do begin Kon:=Kon+1; If Facademico.TmateriaCalificacionM.Text='Aprobado' then inc(A); If Facademico.TmateriaCalificacionM.Text='Reprobado' then inc(R); If Facademico.TmateriaCalificacionM.Text='Ninguno' then inc(N); TMateria.Next; end; Roman, si fuese el caso de usar sql como seria su implementacion en delphi? usando un query en sql colocaria ese codigo? y para llamar como tendria que hacerlo? por favor pautas..para no hacer un ciclo como dices. Gracias Roman. |
#6
|
||||
|
||||
De nada sisne, un gusto haber servido de algo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
||||
|
||||
Cita:
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. Última edición por Caro fecha: 26-03-2010 a las 03:20:27. |
#8
|
||||
|
||||
Hola!
Caro gracias por el código, tengo aun dudas (soy una aprendiz) quisiera aprender sobre los Querys en los Form en Delphi (mas ayuda por favor). La pregunta es el iconito o boton "Query" lo coloco en el form o DataModule (da igual) Osea que debo colocar ese iconito y en sus propiedades de este Query (SQL|(TStrings)) coloco también el codigo de color naranja que me dejaste?: Código:
select calificacion, count(calificacion) As Cant from materias group by calificacion order by calificacion Código:
Select * From materias Help, como deberia hacerlo? Por que lo demás si lo coloque y solo me sale un solo resultado repetido para varias personas. Graaacias |
#9
|
||||
|
||||
Cita:
El ejemplo que te puse ejecuta la consulta en tiempo de ejecución. Cita:
Cita:
Aprobados xx Reprobados xx SinhNota xx donde xx es la cantidad. Para poder ayudarte mejor escribe aquí el resultado que te sale al ejecutar la consulta. Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#10
|
||||
|
||||
Hola!
Como me dijeron mas antes coloqué y me sale el resultado. Solo que queria saber algo mas de sql en la programacion de delphi en su codigo y en sus propiedades del query de sql|strings. Es decir en ambos lugares se debe colocar el mismo codigo? este codigo en las propiedades del query (SQL|STRINGS): Código:
Select calificacion, count(calificacion) As Cant from materias group by calificacion order by calificacion Pregunto: Código:
Query.Close; Query.Sql.Text := 'select calificacion, count(calificacion) As Cant from materias '+ 'group by calificacion order by calificacion'; Query.Open; En Query.open<---abriendo la consulta. Query.Sql.Text<---esta haciendo la consulta??? Query.Sql.add<--vi en algunos q colocan eso tb... Gracias! |
#11
|
||||
|
||||
Hola sisne.
No veo diferencia entre hacer: Query.Clear; Query.Add('...'); o: Query.Text:='...' Sólo que Query.Add te permite añadir sentencias a una consulta. Pero eso desde mi pobre manejo de SQL... Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#12
|
||||
|
||||
Cita:
Cita:
Query.Close; -> Cierra el Query Query.Sql.Text o Query.Sql.Add -> Asignas la consulta sql que quieras Query.Open -> Ejecuta la consulta que tienes en la propiedad Sql. Y como te ha explicado ecfisa, si utilizas Query.Sql.Add, debes limpiar antes lo que tenías con Query.Clear. También puedes ejecutar la consulta con la propiedad Active.
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#13
|
||||
|
||||
Holaaaa
Gracias! Ahora si tengo en claro... Muchas gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
mover indicador de un dbgrid a un registro especifico | thelibmx | Conexión con bases de datos | 7 | 09-11-2007 18:52:51 |
¿Cómo comparar varios vectores (de filas en Excel)? | Nanaky | Varios | 1 | 29-08-2007 17:24:15 |
Como enumerar filas de un DBGrid sin agregar otro campo | Velia | Varios | 2 | 06-12-2005 08:58:57 |
Contar filas de un DBGrid | santi | Varios | 5 | 08-11-2005 20:22:29 |
Eliminar vision de filas en DBGrid x un campo | Sayuri | Conexión con bases de datos | 6 | 10-08-2005 12:21:06 |
|