Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-11-2008
lujurock lujurock is offline
Registrado
 
Registrado: sep 2006
Posts: 9
Poder: 0
lujurock Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 06-11-2008
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
Thumbs up

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.
Responder Con Cita
  #3  
Antiguo 06-11-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por lujurock Ver Mensaje
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 06-11-2008
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 06-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 06-11-2008
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 07-11-2008
lujurock lujurock is offline
Registrado
 
Registrado: sep 2006
Posts: 9
Poder: 0
lujurock Va por buen camino
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.

Última edición por lujurock fecha: 07-11-2008 a las 02:01:51.
Responder Con Cita
  #8  
Antiguo 07-11-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por lujurock Ver Mensaje
...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 Ver Mensaje
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 07-11-2008
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 10-11-2008
lujurock lujurock is offline
Registrado
 
Registrado: sep 2006
Posts: 9
Poder: 0
lujurock Va por buen camino
Muchas gracias por sus respuestas. sabe alguno de ustedes de donde puedo bajar el componente TMS DBGrid para Delphi 2006?
Responder Con Cita
  #11  
Antiguo 11-11-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por lujurock Ver Mensaje
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 11-11-2008
lujurock lujurock is offline
Registrado
 
Registrado: sep 2006
Posts: 9
Poder: 0
lujurock Va por buen camino
jajajajajajaj muy bien naftalina... ya lo habia hecho y tengo los componentes. muchas gracias a todos los que aportaron. un abrazo.
Responder Con Cita
  #13  
Antiguo 11-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por lujurock Ver Mensaje
........muy bien naftalina...


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.
Responder Con Cita
  #14  
Antiguo 11-11-2008
lujurock lujurock is offline
Registrado
 
Registrado: sep 2006
Posts: 9
Poder: 0
lujurock Va por buen camino
Cita:
Empezado por Caro Ver Mensaje


Saluditos

Me referia a neftali
Responder Con Cita
  #15  
Antiguo 12-11-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por lujurock Ver Mensaje
Me referia a neftali
Se me había quedado por un momento cara de "repelente de polillas".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mayor Numero Paradox lKinGl Varios 21 27-09-2008 11:10:08
consulta del numero mayor de subregistro Yun-i Varios 21 29-02-2008 18:47:10
tipo de dato para realizar calculos?? Leogiro OOP 1 16-09-2004 02:10:15
quiero realizar unos calculos pharaonhx Tablas planas 4 20-03-2004 02:12:11


La franja horaria es GMT +2. Ahora son las 10:49:28.


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