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)
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.
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
TDbBrowseMod ajuste de columnas
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
- ignacio
- Site Admin
- Mensajes: 9309
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TDbBrowseMod ajuste de columnas
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:
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:
Un saludo
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
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:
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.TDBBROWSEMOD:ADJUSTCOLWIDTH (361)
TDBBROWSEMOD:ADJUSTCOLS (3021)
Un saludo
Re: TDbBrowseMod ajuste de columnas
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?
Un saludo
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?
Un saludo
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es