Ir al contenido


Foto

Creando porcentajes


  • Por favor identifícate para responder
48 respuestas en este tema

#1 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 04:44

Que tal...  :D

Busco una ayuda ya que no logro encontrar una solución eficiente para crear lo siguiente:
Trato de elaborar una función en la que pueda consultar un dato de la BD que luego pueda ir ingresando a un vector dinámico...
Los datos serían algo asi:

31.125
32.145
30.789
31.987...etc


los cuales deberé ingresar en el vector. Ahora, como no se cuantos datos pueda arrojar la consulta, mi vector deberia declararlo asi:



delphi
  1. var
  2.   v_datos: array of Integer;
  3.   total_datos: Integer;
  4. begin
  5.   total_datos := ...FieldCount; // En esta variable asigno el total de datos de la consulta
  6.   SetLength (v_datos, total_datos);



Ya que los valores pueden ser muy altos, busco la manera de crear con ellos porcentajes, pero ¿como podria crear un valor máximo y como ir creando estos porcentajes?



PD: Ahi perdonan, tengo la mente fria  :p
  • 0

#2 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 05:59

Pensándolo bien... me gustaría crear los porcentajes antes de agregar los valores al vector.  :D


A ver muchachos... una manito  :p
  • 0

#3 Caral

Caral

    Advanced Member

  • Administrador
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 30 noviembre 2008 - 06:01

Hola
Eso es lo unico que puedo aportar, una manita, eso si hacia arriba  (y)
Saludos
  • 0

#4 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 06:05

Hola
Eso es lo unico que puedo aportar, una manita, eso si hacia arriba  (y)
Saludos

Jajajaja  :D :D...
Espero que alguien más también lo haga  :D...
  • 0

#5 Caral

Caral

    Advanced Member

  • Administrador
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 30 noviembre 2008 - 06:07

Hola
No se si entiendo bien la idea.
Tienes unos datos, estos se van sumando, cada cierto tiempo.
Lo que quieres es que en cada paso se saque un porcentaje de ese dato ya sumado?.
Lo que no entiendo es contra que dato.
Saludos
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 30 noviembre 2008 - 06:08

Espero que alguien más también lo haga  :D...


(y)  :D
  • 0

#7 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 06:23

Hola
No se si entiendo bien la idea.
Tienes unos datos, estos se van sumando, cada cierto tiempo.
Lo que quieres es que en cada paso se saque un porcentaje de ese dato ya sumado?.
Lo que no entiendo es contra que dato.
Saludos


Que malo soy para explicar  :s... :p

Lo explicaré con lo que tengo hasta el momento



delphi
  1. var v_datos: array of Integer;
  2.     total_datos, I: Integer;
  3. begin
  4.   SQLQuery1.Close;
  5.   SQLQuery1.SQL.Clear;
  6.   SQLQuery1.SQL.Add('select valores from tabla');
  7.   SQLQuery1.Open;
  8.   total_datos := SQLQuery1.FieldCount;
  9.   SetLength (v_datos, total_datos);
  10.   for I := 0 to total_datos - 1 do
  11.     begin
  12.       SQLQuery1.First;
  13.       v_datos[I] := SQLQuery1.Fields[I].AsInteger;
  14.       SQLQuery1.Next;
  15.     end;
  16. end;



Entonces hasta acá, en cada posicion del vector tendria algo por ejemplo así:

'31.235','32.564','30.145','31.568','32.641','32.641','31.456','30.410'


A lo que me refiero, es que al estos ser valores tan altos, lo que quiero es crear con ellos un porcentaje... pero como cambian constantemente necesito un tope para hacerlo... es aqui donde tengo la duda  :D.


PD: Gracias por la mano Fernando  :p
  • 0

#8 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 06:54

Acabo de notar algo raro :|?

El FieldCount me esta retornando 1, cuando realmente existen 12 registros en la base de datos...

¿Que estaré haciendo mal?  :s
  • 0

#9 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 noviembre 2008 - 07:24

No será con RecordCount ???  ^o|

  • 0

#10 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 07:49

No será con RecordCount ???  ^o|

Gracias Fena... pero mira que con ese me da error  :s
  • 0

#11 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 noviembre 2008 - 07:51


No será con RecordCount ???  ^o|

Gracias Fena... pero mira que con ese me da error  :s


Error ?... si nos dices que error tal vez podamos ayudarte más fácilmente... por favor sigue las normas del foro  :p  :D  :D  :$
  • 0

#12 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 07:59



No será con RecordCount ???  ^o|

Gracias Fena... pero mira que con ese me da error  :s


Error ?... si nos dices que error tal vez podamos ayudarte más fácilmente... por favor sigue las normas del foro  :p  :D  :D  :$


Como digas  (a)...

Database Server Error: Table unknow tabla

  :D :D
  • 0

#13 Caral

Caral

    Advanced Member

  • Administrador
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 30 noviembre 2008 - 08:04

Hola
Solo opino.


delphi
  1. var v_datos: array of Integer;
  2. total_datos, I: Integer;
  3. begin
  4. SQLQuery1.Close;
  5. SQLQuery1.SQL.Clear;
  6. SQLQuery1.SQL.Add('select Sum(valores) as valores from tabla');
  7. SQLQuery1.Open;
  8. total_datos := SQLQuery1.Fields[0].Value;
  9. SetLength (v_datos, total_datos);
  10. for I := 0 to total_datos - 1 do
  11.   begin
  12.     SQLQuery1.First;
  13.     v_datos[I] := SQLQuery1.Fields[I].AsInteger;
  14.     SQLQuery1.Next;
  15.   end;
  16. end;


Saludos
  • 0

#14 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 08:11

Gracias Caral...
Aunque para este caso, no me es necesario hacer un Select Sum() lo tendré en cuenta :D; ya que simplemente quiero pasar cada valor de la consulta a una posición en el vector. Además finalmente el interrogante mio es como lograr crear con ellos porcentajes.
  • 0

#15 Caral

Caral

    Advanced Member

  • Administrador
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 30 noviembre 2008 - 08:20

Hola
Y no crees que no hace falta hacer un conteo si estas haciendo un ciclo for?.


delphi
  1.     var v_datos: array of Integer;
  2.         total_datos, I: Integer;
  3.       begin
  4.         SQLQuery1.Close;
  5.         SQLQuery1.SQL.Clear;
  6.         SQLQuery1.SQL.Add('select valores from tabla');
  7.       SQLQuery1.Open;
  8.       total_datos := SQLQuery1.Fields[0].Value;
  9.       SetLength (v_datos, total_datos);
  10.       for I := 0 to total_datos - 1 do
  11.           begin
  12.           SQLQuery1.First;
  13.           v_datos[I] := SQLQuery1.Fields[I].AsInteger; // esta parte no la termino de entender?
  14.           SQLQuery1.Next;
  15.           end;
  16.       end;


Saludos
  • 0

#16 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 noviembre 2008 - 08:24

....



delphi
  1. var v_datos: array of Integer;
  2.     total_datos, I: Integer;
  3. begin
  4.   SQLQuery1.Close;
  5.   SQLQuery1.SQL.Clear;
  6.   SQLQuery1.SQL.Add('select valores from tabla');
  7.   SQLQuery1.Open;
  8.   total_datos := SQLQuery1.FieldCount;
  9.   SetLength (v_datos, total_datos);
  10.   for I := 0 to total_datos - 1 do
  11.     begin
  12.       SQLQuery1.First;  // AQUI... CADA VEZ QUE INGRESA AL CICLO SE POSICIONA AL PRINCIPIO ???
  13.       v_datos[I] := SQLQuery1.Fields[I].AsInteger;
  14.       SQLQuery1.Next;
  15.     end;
  16. end;



....


Es normal que cada vez que ingresa al ciclo for se posicione al principio de la Query ?  ^o|
  • 0

#17 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 08:26

¿Un conteo?, disculpa pero no te entiendo muy bien  :^)...



delphi
  1. v_datos[I] := SQLQuery1.Fields[I].AsInteger;



En esta linea de codigo lo que pretendo es asignar a cada posición del vector cada resultado encontrado en la consulta... aunque corrigiendo un poco sería asi:



delphi
  1. v_datos[I] := SQLQuery1.Fields[0].AsInteger;


  • 0

#18 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 30 noviembre 2008 - 08:28


....



delphi
  1. var v_datos: array of Integer;
  2.     total_datos, I: Integer;
  3. begin
  4.   SQLQuery1.Close;
  5.   SQLQuery1.SQL.Clear;
  6.   SQLQuery1.SQL.Add('select valores from tabla');
  7.   SQLQuery1.Open;
  8.   total_datos := SQLQuery1.FieldCount;
  9.   SetLength (v_datos, total_datos);
  10.   for I := 0 to total_datos - 1 do
  11.     begin
  12.       SQLQuery1.First;   // AQUI... CADA VEZ QUE INGRESA AL CICLO SE POSICIONA AL PRINCIPIO ???
  13.       v_datos[I] := SQLQuery1.Fields[I].AsInteger;
  14.       SQLQuery1.Next;
  15.     end;
  16. end;



....


Es normal que cada vez que ingresa al ciclo for se posicione al principio de la Query ?  ^o|

Tienes razón Fena, ya lo corregí... es el sueño, tu sabes  :p
  • 0

#19 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 01 diciembre 2008 - 06:23

Pero sigo sin entender, quieres un porcentaje de progreso?, o un porcentaje respecto a que?
  • 0

#20 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 01 diciembre 2008 - 06:58

Puer un porcentaje por cada valor de cada vector, o sea, si un vector tiene 30,500 como valor, él quiere mostrar el porcentahe que representa ese valor del monto total, entonces, en el select llevandonos de Caral, debería ser así:



sql
  1. SELECT (campo * 100 / SUM(Campo)) AS Porcentaje FROM TABLA



Así te saca el procentaje de cada Vector, no lo he probado lo hice de memoria pero creo que te debería de funcionar ;)

Saludos.
  • 0