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 12-06-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Bookmark: Evitar movimientos del grid

Hola a todos. Tengo un "problemilla" con las "Bookmark", o tal vez sea que no las uso correctamente o no es el modo de hacerlo... Ya me diréis.

Tengo una consulta sobre una BD Oracle 8i que se muestra en un grid (Delphi 7) y sobre este tengo que hacer varias operaciones, una de ellas es seleccionar filas y a medida que se seleccionan ir incrementando un totalizador que se muestra en pantalla.
El problema es que al "totalizar" se me mueve el grid y el efecto es incómodo: selecciono una línea y todo el grid se desplaza hasta que la última línea seleccionada quede en el centro del grid.
Aún estoy mirando cómo hacerlo, pero por ahora tengo este código en el evento "OnMouseUp" del grid... por poner uno, aunque seguro que hay otro mejor:
Código Delphi [-]
  if (gFacturas.SelectedRows.Count>0) then
   begin
 //    marca := qfactura.getbookmark;
    for i:=0 to (gFacturas.SelectedRows.Count - 1) do
       begin
         qfactura.GotoBookmark(Pointer(gFacturas.SelectedRows.Items[i]));
         totF := totF + qfacturaIMPORTE.AsFloat;
       end;
  //  qfactura.GotoBookmark(marca);
    //qfactura.freebookmark(marca);
    totSelec.Text := floattostr(totF);
  end;

Pensé que era porque perdía la línea y le añadí la variable "marca" para reposicionarme tras el bucle... pero funciona mejor si no la uso (por eso están las líneas comentadas).

¿Es el modo correcto de hacerlo? ¿Sugerencias?
Gracias por vuestro tiempo.

Última edición por kuan-yiu fecha: 19-06-2006 a las 17:54:36. Razón: Título inexacto
Responder Con Cita
  #2  
Antiguo 12-06-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
He mirado todos los temas en los que se nombran las "Bookmark" y he encontrado la recomendación de "desactivar/activar" (DisableControls/EnableControls) la query para que no se reflejen los movimientos de índices... Pero me parece inadecuado hacerlo dentro de un evento "OnMouseUp".

¿Se os ocurre en qué evento puedo totalizar a medida que se selecciona?

Un saludo, y gracias de antemano.
Responder Con Cita
  #3  
Antiguo 12-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
No importa hacerlo en un MouseUp siempre y cuando se tomen las precauciones oportunas:
Código Delphi [-]
  if (gFacturas.SelectedRows.Count>0) then
   begin
    marca := qfactura.getbookmark;
    try 
       qFactura.DisableControls;
           // esto hace que los bucles se ejecuten más rápido
         // ya que no tiene que actualizar los controles

    for i:=0 to (gFacturas.SelectedRows.Count - 1) do
    begin
       qfactura.GotoBookmark(Pointer(gFacturas.SelectedRows.Items[i]));
       totF := totF + qfacturaIMPORTE.AsFloat;
       if qFactura.IsValidBookmark(marca) then // creo que se usa esto para averiguar si el bookmark es válido.
          qfactura.GotoBookmark(marca);
        //qfactura.freebookmark(marca); // estas seguro de que hay que liberarlo??, 
   // tendría que mirar la ayuda para saberlo, creo que no hace falta...no sé.
       totSelec.Text := floattostr(totF);
    end;
    finally
      qFactura.EnableControls
       //nos aseguramos activar los controles (por si ocurre una excepción)
    end;

  end;

Como ves sólo hago el disableControls si hay más de una fila seleccionada, de esta forma evitamos conectar y desconectar los controles si no hay nada seleccionado.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 13-06-2006 a las 09:47:57.
Responder Con Cita
  #4  
Antiguo 12-06-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Pones el "try" dentro del "for"? ¿No sería mejor ponerlo fuera para deshabilitar los controles una única vez?

Sobre lo de:
Cita:
Empezado por Lepe
//qfactura.freebookmark(marca); // estas seguro de que hay que liberarlo??
Sí, lo estoy. Es un puntero y como tal, cuando ya no lo necesitas debes liberarlo. Es una "cuestión de higiene de código", no me gusta tener problemas con punteros.
Responder Con Cita
  #5  
Antiguo 13-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues tienes toda la razón sobre el try ... finally; pensé en hacerlo dentro del "if" pero fuera del "For", al final me quedó como un churro .

Voy a editar el mensaje y a ponerlo como dices

He trabajado poco con bookmarks, y cuando lo hicen eran de tipo String , por lo que no hacía falta liberarlos, que conste que era con el BDE. Creo que en realidad se llamaba BookmarkStr o algo por el estilo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 13-06-2006 a las 09:51:47.
Responder Con Cita
  #6  
Antiguo 13-06-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
He probado con varias versiones y nada ... Haga lo que haga se produce un molesto efecto de "reposicionamiento del grid".
Si quito la función el grid vuelve a comportarse bien y si pongo cualquier versión de la función...

Entonces en medio de mi desesperación por acotar el elemento responsable del no deseado efecto llegué a esta función:
Código Delphi [-]
  if (gFacturas.SelectedRows.Count>0) then
  begin
    try
      qfactura.DisableControls;
      for i:=0 to (gFacturas.SelectedRows.Count - 1) do
        totF := totF + qfacturaIMPORTE.AsFloat;
    finally
      qfactura.EnableControls;
    end;
  end;
Simplemente eliminando todos los "GotoBookmark" ¡¡FUNCIONA!!... Pero tengo mis dudas
¿Es casualidad o al ir avanzando por las líneas seleccionadas ya se posiciona en ellas? ¿Alguien puede aclarame este punto?
Responder Con Cita
  #7  
Antiguo 13-06-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Ni caso a lo que acabo de publicar... era un espejismo y ya le he encontrado el fallo. Tampoco me vale.
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
DBGrid y Bookmark sin MultiSelect gluglu Varios 2 18-05-2006 16:42:07
Como actualizar datos de un bookmark monyszg Varios 0 09-09-2005 19:11:47
Duda sobre Bookmark. Jose_Pérez Conexión con bases de datos 0 04-03-2005 10:29:41
Utilizacion de Bookmark en Interbase Markoz Firebird e Interbase 4 29-05-2004 22:08:02


La franja horaria es GMT +2. Ahora son las 07:07:52.


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