Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Realizar calculos y buscar número mayor en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=61399)

lujurock 06-11-2008 00:32:34

Realizar calculos y buscar número mayor en DBGrid
 
Hola. Estoy intentando programar a partir de un DBGrid con 4 columnas y cada una de ellas contiene alrededor de 19.000 datos numericos. Mi necesidad es poder encontrar el máximo valor en cada una de las columnas y tambien realizar calculos entre dos columnas, pero no consigo dar con el codigo.

Agradeceria mucho alguna ayuda u orientacion.

Aqui una imagen para que se hagan una idea de como va:

http://www.imaxenes.com/imagen/dbgrid1oq10wr.jpg.html

Rockin 06-11-2008 10:46:23

Para buscar el registro mayor, puedes recorrer la columna con un for o un while de la siguiente manera:

Código Delphi [-]
var
maximo_valor: float;

begin
maximo_valor:= StrToFloat(DBGrid.Cells[columnavalor,1]);

for i:= 2 to numregistros do
begin

    //esto para comprobar el valor máximo
    If  (StrToFloat(DBGrid.Cells[columnavalor,i]) > maximo_valor) then
    begin
       maximo_valor:= StrToFloat(DBGrid.Cells[columnavalor,i]);
    end; //del If

    //para operar entre dos columna

    StrToFloat(DBGrid.Cells[columnaoperando1,i - 1]) "signo operacion"  StrToFloat(DBGrid.Cells[columnaoperando2,i - 1]) 

end; // del for

  //esto es para calcular la ultima fila debido  a que hemos llegado hasta i - 1

StrToFloat(DBGrid.Cells[columnaoperando1,i]) "signo operacion"  StrToFloat(DBGrid.Cells[columnaoperando2,i]) 

end;

Yo uso el DBGrid de TMS, con el que trae delphi será parecido.
Los tipos de datos los adaptas como tu veas mejor.

Espero que te valga.

Neftali [Germán.Estévez] 06-11-2008 11:27:03

Cita:

Empezado por lujurock (Mensaje 324431)
a partir de un DBGrid con 4 columnas y cada una de ellas contiene alrededor de 19.000 datos numericos. Mi necesidad es poder encontrar el máximo valor en cada una de las columnas y tambien realizar calculos entre dos columnas, pero no consigo dar con el codigo.

Creo que el enfoque que le estás dando a cómo solucionar el problema es incorrecto. Piensa que el DBGrid no es más que una "ventana" a los datos reales que tienes en la tabla o query.
Así que en mi opinión deberías hacer las búsquedas sobre la tabla/query, no sobre el control, ya que segun como lo tengas configurado ni siquiera estás viendo en el Grid todos los datos, sino una parte o porción de ellos.

Realiza la busqueda del dato con un LOCATE, FINDKEY o similar sobre el dataset.

Rockin 06-11-2008 12:36:37

Es mejor buscar en el dataset y hacer las operaciones sobre el. Pero como ha preguntado lo del gridpor eso lo he hehcho.

Sobre el dataset es mejor un select que un locate.

Saludos.

Caro 06-11-2008 13:45:31

Hola, para buscar el mayor no recorrería ni el DBGrid ni el DataSet, lo haría con otra consulta que me de el Max de las 4 columnas y tendría las mismas condiciones que la consulta que se muestra en el DBGrid.

Código Delphi [-]
OtroQuery.Close;
OtroQuery.Sql.Text := 'select Max(campo1), MAX(campo2) From tabla';
OtroQuery.Open;

Y si tienes que hacer calculos sobre tus columnas, podrías crearte un campo calculado.

Saluditos

Rockin 06-11-2008 14:16:25

Tambien podria ordenar la consulta por el campo de modo descendente.

Código SQL [-]
select valor from tablar order by valor desc

Hay varis formas, pero a lo mejor tiene que mostrar el grid por algo.

Saludos.

lujurock 07-11-2008 01:50:33

Rockin. muchas gracias por tu respuesta. creo que estamos con versiones diferentes de delphi o yo soy muy novato en esto, ya que el primer error que me aparece en el codigo que me enviaste es la propiedad Cells (DBGrid.Cells, la unica propiedad parecida es DBGrid.Columns[] y en el parentesis acepta un solo valor de la forma [1] no [1,1] ). Yo uso delphi 2006, y para llamar al archivo excel que se muestra en el dbgrid uso un ADOConnection, un ADOTable y un DataSource. Te agradeceria mucho si me aclaras esto. saludos.

Neftali [Germán.Estévez] 07-11-2008 11:35:22

Cita:

Empezado por lujurock (Mensaje 324588)
...creo que estamos con versiones diferentes de delphi o yo soy muy novato en esto, ya que el primer error que me aparece en el codigo que me enviaste es la propiedad Cells (DBGrid.Cells, la unica propiedad parecida es DBGrid.Columns[]

El problema es que esa propiedad está en el DBGrid de la TMS (que te ha dicho que es el que él utiliza), pero no en el Grid estandard.

Cita:

Empezado por Caro (Mensaje 324476)
Hola, para buscar el mayor no recorrería ni el DBGrid ni el DataSet, lo haría con otra consulta que me de el Max de las 4 columnas y tendría las mismas condiciones que la consulta que se muestra en el DBGrid.

Si no necesitas posicionarte en el registro, sólo encontrar el valor, Caro tiene razón. Si por el contrario necesitas posicionarte en ese registro hazlo sobre el mismo del DBGrid.

Rockin 07-11-2008 13:30:10

Si tienes que recorrer el Grid por fuerza, prueba algo parecido a esto, te hablo de memoria.

Código Delphi [-]
var
maximo: tipodedatos;
resultado:tipodedatos;

begin
DataSet.First;

maximo:= dataset.FieldByName('campovalor').AsTipoDeDatos;

while not DataSet.First.eof do
begin

//esto es para calcular el valor maximo
IF (StrToTipoDatos(DBGRID..Fields[columnadelvalordelgrid].Text) > maximo) then
begin
maximo:= StrToTipoDatos(DBGRID..Fields[columnadelvalordelgrid].Text;
end;


//esto es para calcular el valor entre dos columnas

resultado:= StrToTipoDatos(DBGRID.Fields[columnaoperando1].Text) operacion StrToTipoDatos(DBGRID.Fields[columnaoperando2].Text) ;

DataSet.Next;

end;

ShowMessage(TipodatostoStr(maximo));

Al ir recorriendo el dataset el cursor va cambiando de registro en el Grid.

Prueba algo así.
Saludos.

lujurock 10-11-2008 19:49:53

Muchas gracias por sus respuestas. sabe alguno de ustedes de donde puedo bajar el componente TMS DBGrid para Delphi 2006?

Neftali [Germán.Estévez] 11-11-2008 11:16:22

Cita:

Empezado por lujurock (Mensaje 325073)
sabe alguno de ustedes de donde puedo bajar el componente TMS DBGrid para Delphi 2006?

(1) Abrir explorador Web (sirve cualquiera, Firefox, Opera, Safari, hasta IE).
(2) Ir a la barra de direcciones (normalmente está en la parte superior).
(3) Escribir el siguiente texto. Tal como está y sin comillas:
"www.google.com"
(4) Pulsa la tecla RETURN o ENTER.
(5) Aparecerá un cuadro de texto en la parte central de la ventana.
(6) Escribe en ese cuadro de texto esto (sin comillas): "Delphi TMS"
(7) Haz click en el botón de "Buscar".

P.D: Te hubieras ahorado 15 horas de espera.

lujurock 11-11-2008 17:08:56

jajajajajajaj muy bien naftalina... ya lo habia hecho y tengo los componentes. muchas gracias a todos los que aportaron. un abrazo.

Caro 11-11-2008 17:28:16

Cita:

Empezado por lujurock (Mensaje 325297)
........muy bien naftalina...

:confused:

Saluditos

lujurock 11-11-2008 17:29:53

Cita:

Empezado por Caro (Mensaje 325304)
:confused:

Saluditos


Me referia a neftali

Neftali [Germán.Estévez] 12-11-2008 11:05:17

Cita:

Empezado por lujurock (Mensaje 325306)
Me referia a neftali

Se me había quedado por un momento cara de "repelente de polillas".:o:o


La franja horaria es GMT +2. Ahora son las 22:00:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi