Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2003
ajum ajum is offline
Registrado
 
Registrado: jul 2003
Ubicación: Colombia
Posts: 9
Poder: 0
ajum Va por buen camino
Lightbulb Contar los True de un campo

Saludos,

Con el siguiente codigo puedo guardar el numero de reguistros de mi base de datos (Paradox) en una variable i.

i := Table1.RecordCount

Quisera saber como guardar en una variable el numero de veces que aparece la palabra True en un campo.

Nota: Estoy dando mis primeros pasos en Delphi, y lo que quiero es almacenar en una variable el numero de hombres que hay en mi BD, y esto lo puedo saber al contar cuantas veces esta la palabra True en el campo Hombres.

Gracias...
Responder Con Cita
  #2  
Antiguo 17-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Código:
Select count(*)
  from TablaQueQuerras
 where Hombre = True;
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 17-07-2003
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
Tienes que utilizar una consulta SQL del tipo:

Select count(Nombre)
from Vendors
Where Varon= true

Los nombres de los campos me los he inventado.

un Saludo.
Responder Con Cita
  #4  
Antiguo 21-07-2003
ajum ajum is offline
Registrado
 
Registrado: jul 2003
Ubicación: Colombia
Posts: 9
Poder: 0
ajum Va por buen camino
Saludos,

Disculpen por no haber consultado las respuestas´pero estuve sin computador unos 4 dias.

Gracias por sus respuestas, qusiera saber si hay otra forma de contar los True de un campo determinado pero sin consultas tipo SQL.

Saludos...
Responder Con Cita
  #5  
Antiguo 21-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
sin una consulta SQL, lo unico que se me ocurre es que recorras toda tu tabla y, si el campo es true, incrementes una variable contador

La pregunta es... por que no te sirve un SQL si es lo mas rapido y eficiente?
Responder Con Cita
  #6  
Antiguo 22-07-2003
ajum ajum is offline
Registrado
 
Registrado: jul 2003
Ubicación: Colombia
Posts: 9
Poder: 0
ajum Va por buen camino
Bueno, les contare todo lo que estoy tratando de hacer.

Tengo una BD (paradox).
Manejo el ingreso de información por medio de un formulario que contiene varios Dbedit donde ingreso los datos generales de un usuario y un DBimage para ingresar su respectiva fotografía.
Lo que quiero ahora es incluir en este formulario un DBchart(Gráficos) en el cual se muestre en barritas cuantos usuarios hay, cuantos hombres y cuantas mujeres, por lo que he cacharreado de el DBchart es que este tiene una opción en la cual se elige un campo de la tabla que será(an) la(s) etiqueta(as) y otro campo que serán los datos que harán que las barritas tomen su respectiva altura.
Si yo edito la tabla por medio del Database Desktop puedo colocar manualmente cuantos usuarios hay, cuantas mujeres y hombres, y el gráfico funciona.
Mi problema ahora es que quiero que todo sea dinámico, ósea que cuando yo ingrese un usuario por medio de este formulario, el gráfico se actualice automáticamente sin necesidad de abrir la tabla manualmente.
Hasta el momento solo lo he conseguido con el numero total de usuarios, este es el código que estoy utilizando:

i := usuarios.RecordCount; // en una variable i, guardo el numero total de usuarios que es igual al numero de registros.

usuarios.Locate('campos_grafico','Total Usuarios', []); // localizo el lugar exacto en la BD donde guardare el numero total usuarios, que es donde el DBchart toma los datos para la barrita de total usuarios
usuarios.edit; // edito la tabla
usuarios.fieldbyname('her_datos_grafico').Asinteger := i; // ingreso el numero total usuarios
usuarios.post; // guardo los cambios

Si logro capturar en una variable el numero de mujeres, el cual en el campo sexom estará definido como true, habremos solucionado parte de este problema, después de esto solo tendré que utilizar parte del código anterior para ingresar el numero total de mujeres y listo.

Creo que por esto no me sirve la consulta en sql (claro esto lo digo con mi ignorancia, ya que no se nada de sql).

También, quiero decirles que hay varios campos en la tabla que contienen la palabra true o false provenientes de algún DBCheckBox, por lo cual creo que no puedo recorrer toda la tabla y, si el campo es true, incrementar una variable contador, tal ves tendría que recorrer solo el campo determinado, el inconveniente es que no se el código para recorrer una tabla, ahora si que menos para recorrer un campo especifico.

Quiero agradecerles mucho por su colaboración, y disculparme de antemano si se me paso la mano al ser tan detallista, lo que pasa es que no soy un programador de algún lenguaje que ha querido hacerlo en delphi, apenas estoy dando mis primeros pasos en la programación y decidí hacerlo con delphi.

Nota: Agradezco que cuando me puedan dar alguna respuesta me pudieran colocar el código y agregarles algunos comentarios ya que como les dije, apenas estoy empezando.

Saludos,
Ajum.
Responder Con Cita
  #7  
Antiguo 22-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Pues mira, con dos simples sentencias SQL tienes todos los datos que necesitas.

Los pasos son los siguientes

1.- Pega en un Datamodule (o formulario) un TQuery
2.- Si utilizas un TDatabase (lo recomendado), linca la propiedad Database del TQuery al TDatabase (como si de un TTable se tratara). Si no utilizas un TDataset, pues haz lo mismo que haces con los TTables
3.- En el sitio donde pretendas mostrar el grafico (un TButton??) pon el codigo siguiente

Código:
 
var NumPersonas : integer;
    NumMujeres : integer;
    NumHombres : integer;
begin
     // calculamos nº de personal
     Query1.Close;
     Query1.SQL.Text := 'select count(*) from usuarios';
     try
        Query1.Open;
     except
           ShowMessage('Error en query');
           Exit;
     end;
     NumPersonas := Query1.Fields[0].AsInteger;

     // calculamos nº de mujeres
     Query1.Close;
     Query1.SQL.Text := 'select count(*) from usuarios where sexo = true';
     try
        Query1.Open;
     except
           ShowMessage('Error en query');
           Exit;
     end;
     NumMujeres := Query1.Fields[0].AsInteger;

     // Numero de hombres
     NumHombres := NumPersonas - NumMujeres;
Con la primera Query, lo que hacemos es contar (Count) todos los registros ((*)) que tiene nuestra tabla (en el ejemplo la tabla se llamaria usuarios
Luego, el resultado de la Query la pasamos a una variable.

Con la segunda Query, lo que hacemos es contar (Count) cuantos registro ((*)) cumplen con la condicion (where) que es mujer (sexo = true)
Y pasamos el resultado de la Query a otra variable

Ahora solo te queda restar las dos variables para saber el numero de usuarios del sexo opuesto.

--------->

El segundo metodo, el de recorrer el Dataset (el TTable) es muy sencillo. Solo basta con hacer un bucle while..do controlando el campo que deseas, es decir

Código:
var NumPersonas : integer;
    NumMujeres : integer;
    NumHombres : integer;
begin
     NumPersonas := 0;
     NumMujeres := 0;
     NumHombres := 0;
     Table1.First;
     while not Table1.Eof do
      begin
           // incremetamos nº de personas
           Inc(NumPersonas);

           // hacemos comprobacion para saber sexo
           if Table1.FieldByName('sexo').AsBoolean then
              Inc(NumMujeres)
           else Inc(NumHombres);

           // pasamos al siguiente registro del Dataset
           Table1.Next;
      end;
Personalmente, te recomiendo el primer metodo (siempre ha de haber una primera vez para ponerse con el SQL!!! ) por su potencia y rendimiento

Bueno, espero que estas explicaciones te sirvan
Responder Con Cita
  #8  
Antiguo 22-07-2003
ajum ajum is offline
Registrado
 
Registrado: jul 2003
Ubicación: Colombia
Posts: 9
Poder: 0
ajum Va por buen camino
Thumbs up

Muchisimas gracias, me funciono a la perfeccion, era lo que estaba necesitando.

Gracias por la paciencia y los comentarios tan detallados.

Saludos...
Responder Con Cita
  #9  
Antiguo 14-08-2003
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
creo que se la complicaron muy feo pero esta bien para que empieze a usar SQL

pero con una simple sentencia lo hubiera hecho

Tabla.filter := '[campo]';
Tabla.Filtered := True;

I := Tabla.RecordCount-1;

y listo


Saludos desde Puebla Mexico

asanxt@hotmail.com
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


La franja horaria es GMT +2. Ahora son las 16:34:26.


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