In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TDbBrowseMod ajuste de columnas

Foro público de Xailer en español
Responder
Avatar de Usuario
bingen
Mensajes: 573
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

TDbBrowseMod ajuste de columnas

Mensaje por bingen »

Buenas Ignacio tengo una combinación de teclas para ajustar columnas en un browse moderno CTRL+A, le das y funciona perfectamente aunque si hay muchas columnas tarda, no se sio ya hiciste algún cambio sobre esto que aún no está en la 9.1 pero....

Si cuando está ajustando anchos de columnas el usuario se impacienta o cree que no ha dado bien a CTRL+A y le vuelve a dar de nuevo CTRL+A >>>>>> CRASH

***************************** Registro de errores *****************************

Exe: C:\xDesarrollos2\Programas\Behargintza\Behargintza.exe
Version: 5.4.0.0
User name: Bingen
Computer name: SERVER2019
Fecha: 30-09-2024
Hora: 14:02:53
Memoria libre: 2097151
Area actual: 1

------------------------- Información del compilador --------------------------

Versión Xailer: Xailer 9.1.0
Compilador: Harbour 3.2.0dev (r2307062207)
Compilador C/C++: MinGW GNU C 7.3 (32-bit)
Plataforma: Windows Server 2016 10.0

----------------------- Información detallada del error -----------------------

Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: No existe el m‚todo
Operación: HANDLE
Argumentos: [ 1] = Tipo: A Valor:
Fichero:
Código error SO: 0

Pila de llamadas:
HANDLE (0)
TOPTIONLIST:WMPAINT (0)
TMARIADBDATASOURCE:SQLGETROWS (0)
TMARIADBRECORDS:QUERYALL (6295)
TMARIADBRECORDS:FILTER (827)
TSQLQUERY:FILTER (878)
TSQLQUERY:RESTORESTATE (1436)
TDBBROWSEMOD:ADJUSTCOLWIDTH (361)
TDBBROWSEMOD:ADJUSTCOLS (3021)
TDBBROWSEMOD:ONKEYDOWN (630)
TDBBROWSEMOD:WMKEYDOWN (1042)
TSCROLLINGWINCONTROL:WMKEYDOWN (1059)
TLISTBOXMOD:WMKEYDOWN (831)
TBRWMODGRID:WMKEYDOWN (4273)
RUNFORM (0)
TAPPLICATION:RUN (292)
MAIN (18)
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9283
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: TDbBrowseMod ajuste de columnas

Mensaje por ignacio »

Buenos días,

El error no se produce en TBrowseMod, sino en el pintado una TOptiionList que nada tiene que ver con TBrowseMod. Y entre medias hay un refresco de un dataset de MariaDB.

Estos errores por recurrencia (múltiples pulsaciones de la misma tecla) son difíciles de rastrear, pero muy fáciles de corregir por el programador. No hay más que poner una variable estática al principio del proceso a .T. y sólo ejecutar de nuevo el proceso cuando vuelva a estar a falso:

Código: Seleccionar todo

FUNCTION MiAjuste()
  STATIC lRunning := .F.
  IF !lRunning
    lRunning := .T.
    MiCodigo()
   lRunning := .F.
  ENDIF
RETURN NIL
En mi opinión, creo que se aceleró bastante el proceso de pintado en el ajuste columnas con la versión 9.1, pero en tu caso, creo que hay dos motivos por los que va lento:
1) Posiblemente el número de registros sea alto (ya te comenté que hay que procesar todos)
2) Estás usando un dataset de MariaDB que cuando se refresca vuelve a provocar una relectura de la base de datos.

Soluciones:
1) Evitar datasets de muchos registros forzando el uso de filtros
2) Usar datasets en memoria

No obstante, estoy dispuesto a revisarlo de nuevo, pero necesitaría un ejemplo que falle utilizando datasets en memoria.

Mas investigación:
TDBBROWSEMOD:ADJUSTCOLWIDTH (361)
TDBBROWSEMOD:ADJUSTCOLS (3021)
La línea de de AdjustColWidth (361) no me cuadra, tendría que ser 2543, por lo que aparentemente tienes el método SOBRECARGADO. Y además, las clases AdjustCol() y AdjustColsWidth() no provocan ningún refresco del dataset como puedes comprobar. Te recomiendo que le eches un vistazo a la sobrecarga que has hecho de ese método.


Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
bingen
Mensajes: 573
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: TDbBrowseMod ajuste de columnas

Mensaje por bingen »

Buena Idea Ignacio, simplemente con poner un semáforo así de simple, no lo pensé. Gracias

1) Posiblemente el número de registros sea alto (ya te comenté que hay que procesar todos)
Incluso en casos de 200 líneas se nota un parpadeo por columna ajustada.

2) Estás usando un dataset de MariaDB que cuando se refresca vuelve a provocar una relectura de la base de datos.
Eso sí es cierto

No obstante, estoy dispuesto a revisarlo de nuevo, pero necesitaría un ejemplo que falle utilizando datasets en memoria.

Mas investigación:
TDBBROWSEMOD:ADJUSTCOLWIDTH (361)
TDBBROWSEMOD:ADJUSTCOLS (3021)
La línea de de AdjustColWidth (361) no me cuadra, tendría que ser 2543, por lo que aparentemente tienes el método SOBRECARGADO. Y además, las clases AdjustCol() y AdjustColsWidth() no provocan ningún refresco del dataset como puedes
comprobar. Te recomiendo que le eches un vistazo a la sobrecarga que has hecho de ese método.

Tenemos sobrecargado el Adjustcolwidth del TBrowse original, pero no el TBrowseMod y este no hereda del original no? :shock:


Un saludo
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Responder