Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
Problema con GotoBookmark

Tengo un problema al recorrer los registros de un Grid que no consigo solucionar.
Lo que tengo es un listado de facturas y quiero recorrer los registros que selecciono y mostrar en un label la suma de los registros seleccionados.
con este codigo funciona bien pero lo que ocurre es que el grid se va moviendo cuando selecciono los registros que están muy abajo y me gustaría que el grid se quedara exactamente en la misma posición.
Código Delphi [-]
    begin
      Temp:=0;
      PBookmark:=Q.GetBookmark;
      Q.DisableControls;
      for i:=0 to DBG1.SelectedRows.Count-1 do
      begin
        Q.GotoBookmark(pointer(DBG1.SelectedRows.Items[i]));
        Temp:=Temp+Q.fieldbyName('total').AsFloat;
      end;
      ResultadoParcial.Caption:='  : '+FormatFloat('#,##0.00 €',Temp)+'      Reg: '+IntToStr(DBG1.SelectedRows.Count);
      Q.GotoBookmark(PBookmark);
      Q.FreeBookmark(PBookmark);
    end;

Probé con este otro código pero al recorrer los registros cuando estaban ordenados por fecha descendentemente no se recorrian correctamente (se posiciobnaba en otro registro y no se porqué)
Código Delphi [-]
    begin
      Temp:=0;
      Q2.Close;
      Q2.SQL.Assign(Q.SQL);
      Q2.Open;
      for i:=0 to DBG1.SelectedRows.Count-1 do
      begin
        Q2.GotoBookmark(pointer(DBG1.SelectedRows.Items[i]));
        Temp:=Temp+Q2.fieldbyName('total').AsFloat;
      end;
      ResultadoParcial.Caption:='  : '+FormatFloat('#,##0.00 €',Temp)+'      Reg: '+IntToStr(DBG1.SelectedRows.Count);
    end;

Gracias.
Responder Con Cita
  #2  
Antiguo 04-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si los registros del grid lo has obtenido con un select, entonce sólo añade el sum(campo) al select y el resultado lo asocias a un dbedit.
En cuanto a usar un TBookMark, como lo estás haciendo, me parece que estás asignando el bookmark en el bucle, a cada registro, quita esa línea.
Responder Con Cita
  #3  
Antiguo 04-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Casimiro
me parece que el amigo quiere sumar solo los que estan marcados
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 04-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vaya, entonces no he entendido bien la pregunta al decir: "pero lo que ocurre es que el grid se va moviendo cuando selecciono los registros que están muy abajo".
Se tendrá que mover el dbgrid para marcarlos, digo yo.

O no acabo de entender la pregunta

Si es sólo sumar los marcados entonces lo que he dicho antes está bien, creo, ya que sólo hace falta recorrer y comprobar si está seleccionado, pero no asignarle un bookmark a cada uno, como hace en el bucle.
Responder Con Cita
  #5  
Antiguo 04-10-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Una cosa que veo en el primer código, es que no estás haciendo una llamada a EnableControls. Por otro lado, no me queda claro el problema que estás teniendo con el primer código.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 04-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues ahora que lo veo más tranquilo, aparte de lo que dice Chris, no veo que esté mal.
Habrá que esperar que aclare glopez exactamente el problema.
Responder Con Cita
  #7  
Antiguo 05-10-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 914
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por Chris Ver Mensaje
Una cosa que veo en el primer código, es que no estás haciendo una llamada a EnableControls. Por otro lado, no me queda claro el problema que estás teniendo con el primer código.

Saludos,
Chris
Como dice el compañero Chris, creo que falta el EnableControls después de volverlo al registro que estaba antes de realizar la suma...

Código Delphi [-]
 begin
      Temp:=0;
      PBookmark:=Q.GetBookmark;
      Q.DisableControls;
      for i:=0 to DBG1.SelectedRows.Count-1 do
      begin
        Q.GotoBookmark(pointer(DBG1.SelectedRows.Items[i]));
        Temp:=Temp+Q.fieldbyName('total').AsFloat;
      end;
      ResultadoParcial.Caption:='  : '+FormatFloat('#,##0.00 €',Temp)+'      Reg: '+IntToStr(DBG1.SelectedRows.Count);
      Q.GotoBookmark(PBookmark);
      Q.EnableControls;
      Q.FreeBookmark(PBookmark);
    end;

A ver que pasa ahora...
Responder Con Cita
  #8  
Antiguo 05-10-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
Es cierto que me falta
Q.EnableControls;
al copiar el codigo me salte esa linea
El problema exacto con el primer código es el siguiente:
Imaginemos que tengo un grid con las siguientes lineas visibles
Nº Frac nombre total
1 Pepe 5
2 Juan 7.5
3 Pedro 8
.
.
.
30 Antonio 475

Entonces después de seleccionar varios registros y ejecutarse el código anterior para recorrer los registros seleccionados y sumarlos (sólo los seleccionados). Puede que el primer registro que tenga visible ahora no sea la Factura 1 si no la 3 y la última la 33. Es decir los registros se han desplazado un poco hacia arriba. Espero haberme explicado bien. Gracias.
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
GotoBookMark BPL Varios 5 08-09-2010 20:52:47
GotoBookMark en TClientDataSet jzginez Conexión con bases de datos 0 30-08-2006 17:11:25
Ayuda de Delphi - Gotobookmark juanchi Conexión con bases de datos 4 21-02-2004 18:43:51


La franja horaria es GMT +2. Ahora son las 10:34:48.


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