Consulta Array o Dbf en Xbrowse

Consulta Array o Dbf en Xbrowse

Postby remtec » Fri Jun 11, 2021 3:09 pm

Amigos, buen dia.

Tengo una duda técnica.

Estoy teniendo problemas de lentitud en el uso de Xbrowse con windows 10.

Lo que realizo es crear una Dbf de paso que se llena desde dbf original, dependiendo de un tramo de fecha,( desde hasta), normalmente un mes completo, no trabajo en Xbrowse con la dbf que es actualizada constantemente desde otras pc, por lo que como dije, rescato la información requerida a la llevo a dbf de paso.

El Xbrowse es lento cuando son muchos datos, podría ser 2.000 registros.

Mi consulta es sera mas aconsejable usar un Array para manejar esta cantidad de registro, o tendrá el mismo problema Xbrowse?, lo pregunto antes de realizar modificación al código.

Uso FWH 17.09 Harbour.

Desde ya muchas gracias.

Muchos Saludos.

Antonio.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Array o Dbf en Xbrowse

Postby cmsoft » Fri Jun 11, 2021 7:55 pm

Antonio, ya que es un DBF temporal que llenas solo para la pantalla en cuestion, probaste generarlo en el disco local de la estacion de trabajo, y abrirlo como exclusivo?
De esa manera no creo que muestre lentitud...
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Consulta Array o Dbf en Xbrowse

Postby leandro » Fri Jun 11, 2021 10:04 pm

Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Consulta Array o Dbf en Xbrowse

Postby remtec » Sat Jun 12, 2021 3:44 pm

cmsoft wrote:Antonio, ya que es un DBF temporal que llenas solo para la pantalla en cuestion, probaste generarlo en el disco local de la estacion de trabajo, y abrirlo como exclusivo?
De esa manera no creo que muestre lentitud...


Hola Cesar.

Como estas?

Muchas gracias como siempre por tu ayuda.

Efectivamente es lo que hago, por lo que veo la carga y manejo de desplazamiento de tantos registros desde una dbf a Xbrowse es lo que produce la lentitud, pensé que era solo windows 10, pero desde xp al 10 32 y 64 bits, es lo mismo.

Muchas gracias.

Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Array o Dbf en Xbrowse

Postby remtec » Sat Jun 12, 2021 3:52 pm




Hola Leandro.

Muchas gracias por tu ayuda y siempre estar atento.

De ahí mi pregunta que va por ver si con array, puedo darle mayor velocidad al movimiento sobre los registro y eso que solo es para mostrar un informe y no realizar ninguna operación sobre los registros.

He usado array, para menor cantidad de registros, por ser un trabajo en memoria, pienso que podría causar otros problemas con colapso de memoria, quizás especulo, pero prefiero ver la opinión de colegas que si han experimentado con ello.

Quedo atento a sus comentarios.

Muchas gracias y muchos saludos.

Antonio.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Array o Dbf en Xbrowse

Postby artu01 » Sat Jun 12, 2021 5:08 pm

Haz intentado indexarlo con la clausula TEMPORARY antes de mostrarlo en el xbrowse?
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 397
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Consulta Array o Dbf en Xbrowse

Postby FranciscoA » Sat Jun 12, 2021 5:48 pm

Lo que realizo es crear una Dbf de paso que se llena desde dbf original, dependiendo de un tramo de fecha,( desde hasta), normalmente un mes completo, no trabajo en Xbrowse con la dbf que es actualizada constantemente desde otras pc, por lo que como dije, rescato la información requerida a la llevo a dbf de paso.

El Xbrowse es lento cuando son muchos datos, podría ser 2.000 registros.

Hola Antonio.
Me parece que Dos Mil registros no son suficientes para que la navegación en XBrowse se vuelva lenta usando tablas temporales en la unidad C: del equipo.
Sería interesante ver como construyes y cargas el browse, en esta parte de tu programa.

Aqui te dejo un ejemplo para DBF y ARRAY, y no veo lentitud en la navegación.
Code: Select all  Expand view
#include "fivewin.ch"

Function Main()    //VelocidXbrw()
local n, aData

   DbUseArea(.t.,,".\Customer","Cust",.t.)
   Copy to ".\XBrwReg.dbf"
   
   DbUseArea(.t.,,".\XBrwReg","Reg",.t.)
   for n := 1 to 9
      append from ".\Customer"
   next
   SysRefresh()

   XBROWSER "Reg" TITLE "Probando velocidad XBrowse con DBF" ;
       SHOW SLNUM

   aData := Reg->( FW_DbfToArray() )
   XBROWSER aData TITLE "Probando velocidad XBrowse con ARRAY" ;
       SHOW SLNUM


   DbCloseAll()
   Ferase(".\XBrwReg.dbf")
 
return nil
 

Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Consulta Array o Dbf en Xbrowse

Postby xmanuel » Sat Jun 12, 2021 7:40 pm

Creo que el problema es el numero de columnas y el proceso que haces en ellas.
Tal vez deberías cargar en el xBrowse lo estrictamente necesario, a poder ser datos de tipo cadena.
Aunque tu no lo veas si tienes muchas columnas el browse las trata todas aunque no se vean.
Para los browses es más costoso el numero de columnas que de registros.
Por ejemplo todos los datos repetitivos ponlos fuera del xBrowse...
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Consulta Array o Dbf en Xbrowse

Postby remtec » Mon Jun 14, 2021 4:23 pm

FranciscoA wrote:
Lo que realizo es crear una Dbf de paso que se llena desde dbf original, dependiendo de un tramo de fecha,( desde hasta), normalmente un mes completo, no trabajo en Xbrowse con la dbf que es actualizada constantemente desde otras pc, por lo que como dije, rescato la información requerida a la llevo a dbf de paso.

El Xbrowse es lento cuando son muchos datos, podría ser 2.000 registros.

Hola Antonio.
Me parece que Dos Mil registros no son suficientes para que la navegación en XBrowse se vuelva lenta usando tablas temporales en la unidad C: del equipo.
Sería interesante ver como construyes y cargas el browse, en esta parte de tu programa.

Aqui te dejo un ejemplo para DBF y ARRAY, y no veo lentitud en la navegación.
Code: Select all  Expand view
#include "fivewin.ch"

Function Main()    //VelocidXbrw()
local n, aData

   DbUseArea(.t.,,".\Customer","Cust",.t.)
   Copy to ".\XBrwReg.dbf"
   
   DbUseArea(.t.,,".\XBrwReg","Reg",.t.)
   for n := 1 to 9
      append from ".\Customer"
   next
   SysRefresh()

   XBROWSER "Reg" TITLE "Probando velocidad XBrowse con DBF" ;
       SHOW SLNUM

   aData := Reg->( FW_DbfToArray() )
   XBROWSER aData TITLE "Probando velocidad XBrowse con ARRAY" ;
       SHOW SLNUM


   DbCloseAll()
   Ferase(".\XBrwReg.dbf")
 
return nil
 

Saludos


Hola Francisco, amigo como estas?

Muchas gracias como siempre por tu ayuda y tiempo dedicado.

No respondí antes, ya que quería probar tu código.

Muchos Saludos y muchas gracias.
Antonio

En estas 2 lineas, con 1.000 registros Dbf y Array, MUY RAPIDOS ambos.
Code: Select all  Expand view

    XBROWSER "&Nro_usu3" TITLE "Probando velocidad XBrowse con DBF" ;
       SHOW SLNUM

    aData:= {}
        aData := &Nro_usu3->( FW_DbfToArray() )
        XBROWSER aData TITLE "Probando velocidad XBrowse con ARRAY" ;
        SHOW SLNUM

 


La Misma Dbf 1.000 registros, Xbrowse, " LENTISIMO EL DESPLAZAMIENTO ".
Code: Select all  Expand view

     Sele b
     go top

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-14  BOLD
     DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,16   BOLD
     DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0,-12  BOLD

   DEFINE DIALOG oDlg SIZE 500,550 PIXEL  FONT oFont  STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )

     @ 00,10 SAY otitu PROMPT Titu  SIZE 450,15 PIXEL OF oDlg COLORS RGB(12, 135, 27)   FONT oFont1


   @ 30,10 XBROWSE oBrw SIZE -10,-40 PIXEL OF oDlg DATASOURCE "&Nro_usu3" ;
            HEADERS 'Tipo Exa', 'Fecha', 'Cantidad','Total...';
      COLUMNS "Tip_Ate","Fec_Emi","Can_Exa","Tot_Exa";
            PICTURES '@!','@d','9,999,999','9,999,999,999';
      CELL LINES AUTOSORT NOBORDER;
                                // oBrw:nFreeze       := 3
                             oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
                             oBrw:nColDividerStyle := LINESTYLE_INSET
                             oBrw:nRowDividerStyle := LINESTYLE_INSET
                                 oBrw:bClrHeader := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
                                 oBrw:nOpacity    := 230
                                 oBrw:aCols[01]:bFooter   := { || Ltrim( Str( oBrw:KeyNo() ) ) + " / " + LTrim( Str( oBrw:KeyCount() ) ) }
                                 oBrw:aCols[ 4]:nDataStrAlign := AL_RIGHT
                                 oBrw:bClrStd             := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
                                 oBrw:bClrSelFocus        := {|| { nRGB(  255,  255,  255), nRGB(102, 178, 255) } }

                                 oBrw:aCols[3]:cEditPicture    := "9,999,999"
                             oBrw:aCols[3]:nFooterType    := AGGR_TOTAL

                                 oBrw:aCols[4]:cEditPicture    := "9,999,999,999"
                             oBrw:aCols[4]:nFooterType    := AGGR_TOTAL



                                 oBrw:MakeTotals()
                                 oBrw:bChange := {|| oBrw:Maketotals() }

                                 WITH OBJECT oBrw
                                            :lFooter := .t.
                                            oBrw:lHScroll := .f.
                                    oBrw:lIncrFilter      := .f.
                                    oBrw:lSeekWild        := .F.                   &&  .T. Busca Contenido, .F. Que comience con lo que digita
                                            oBrw:SetStyle( 2018)
                                            oBrw:nColorPen := CLR_RED

                                            oBrw:nStretchCol  := STRETCHCOL_WIDEST
                                    oBrw:CreateFromCode()
                                 END

     @ 243,040 BTNBMP SIZE 30,30 PROMPT "IMPRIME"  OF oDlg PIXEL 2007 Resource "#8002"  FONT oFont7 ;
            ToolTip  "Imprime Informe"

              //ACTION (Rep_TarSeg(Titu),oDlg:Refresh())

     @ 243,120 BTNBMP SIZE 30,30 PROMPT "RESUMEN"  OF oDlg PIXEL 2007 Resource "#8002"  FONT oFont7 ;
            ToolTip  "Imprime Informe"



   @ 243,190 BTNBMP SIZE 30, 30 PROMPT "VOLVER"  OF oDlg PIXEL 2007 Resource "#8028"  FONT oFont7 ;
            ToolTip  "VOLVER";
          ACTION oDlg:End()


   ACTIVATE DIALOG oDlg CENTERED     ON INIT ( oBrw:SetFocus() )

 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Array o Dbf en Xbrowse

Postby cnavarro » Mon Jun 14, 2021 6:50 pm

Qué significa esta expresión?
Code: Select all  Expand view

.... DATASOURCE "&Nro_usu3" ...
 

Puedes probarlo simplemente asi?
Code: Select all  Expand view

... DATASOURCE Alias() ...
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Consulta Array o Dbf en Xbrowse

Postby FranciscoA » Mon Jun 14, 2021 10:03 pm

remtec Wrote:
De ahí mi pregunta que va por ver si con array, puedo darle mayor velocidad al movimiento sobre los registro y eso que solo es para mostrar un informe y no realizar ninguna operación sobre los registros.


No veo el por qué de esto, a menos que falte codigo por exponer.
Por cada movimiento ( arriba-abajo ) se está llamando a MakeTotals():
Code: Select all  Expand view
oBrw:bChange := {|| oBrw:Maketotals() }

Intenta quitándolo.

Saludos,
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Consulta Array o Dbf en Xbrowse

Postby remtec » Tue Jun 15, 2021 12:22 am

cnavarro wrote:Qué significa esta expresión?
Code: Select all  Expand view

.... DATASOURCE "&Nro_usu3" ...
 

Puedes probarlo simplemente asi?
Code: Select all  Expand view

... DATASOURCE Alias() ...
 


Hola Cristobal.

Muchas gracias por responder.

El uso de esta macro "&Nro_usu3", es por creo una archivo de paso con un numero que tienen asignado los usuario cuando se crean, así puedo usar un archivo personalizado por cada usuario y se genera Ejemplo: "INFO"+Nro_Usu y me va a dar un INFO12.

Esta macro le he usado desde clipper y nunca he tenido problemas.

Respondiendo a tu sugerencia, ya había probado con el nombre real de ese archivo y no mejora, además la prueba que realice con el código de Francisco, pueden ver que ambos Xbrowse tienen la macro, con el código de Francisco vuela y con el código de Xbrowse que defino, es lentísimo el barrido de las filas.

La Dbf que uso, solo tiene 4 columnas.

Saludos.

Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Array o Dbf en Xbrowse

Postby remtec » Tue Jun 15, 2021 12:31 am

FranciscoA wrote:
remtec Wrote:
De ahí mi pregunta que va por ver si con array, puedo darle mayor velocidad al movimiento sobre los registro y eso que solo es para mostrar un informe y no realizar ninguna operación sobre los registros.


No veo el por qué de esto, a menos que falte codigo por exponer.
Por cada movimiento ( arriba-abajo ) se está llamando a MakeTotals():
Code: Select all  Expand view
oBrw:bChange := {|| oBrw:Maketotals() }

Intenta quitándolo.

Saludos,


Hola Francisco.

En respuesta a tu observación, ya había quitado todo este código solo deje una línea y nada, incluso en el mismo programa pongo las líneas de Xbrowse que sugieres para dbf y array y vuelan, saliendo de esto entro al xbrowse en cuestión y todo se enlentece.

Muchas gracias y muchos saludos.
Antonio

Así probé el código:
Code: Select all  Expand view

   @ 30,10 XBROWSE oBrw SIZE -10,-40 PIXEL OF oDlg DATASOURCE "&Nro_usu3" ;
            HEADERS 'Tipo Exa', 'Fecha', 'Cantidad','Total...';
      COLUMNS "Tip_Ate","Fec_Emi","Can_Exa","Tot_Exa";
            PICTURES '@!','@d','9,999,999','9,999,999,999';
      CELL LINES AUTOSORT NOBORDER;
       
                oBrw:CreateFromCode()
       

     @ 243,040 BTNBMP SIZE 30,30 PROMPT "IMPRIME"  OF oDlg PIXEL 2007 Resource "#8002"  FONT oFont7 ;
            ToolTip  "Imprime Informe"

              //ACTION (Rep_TarSeg(Titu),oDlg:Refresh())

     @ 243,120 BTNBMP SIZE 30,30 PROMPT "RESUMEN"  OF oDlg PIXEL 2007 Resource "#8002"  FONT oFont7 ;
            ToolTip  "Imprime Informe"



   @ 243,190 BTNBMP SIZE 30, 30 PROMPT "VOLVER"  OF oDlg PIXEL 2007 Resource "#8028"  FONT oFont7 ;
            ToolTip  "VOLVER";
          ACTION oDlg:End()

 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Array o Dbf en Xbrowse

Postby FranciscoA » Tue Jun 15, 2021 1:25 am

Antonio.
Aquí funciona bien tu código, con 5010 registros.

Code: Select all  Expand view
FUNCTION REMTEC()
local oDlg, oBrw

   DbUseArea(.t.,,".\Customer","Cust",.t.)
   Copy to ".\XBrwReg.dbf"
   
   DbUseArea(.t.,,".\XBrwReg","Reg",.t.)
   for n := 1 to 9
      append from ".\Customer"
   next
   SysRefresh()

   DEFINE DIALOG oDlg SIZE 500,550 PIXEL STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )

   @ 30,10 XBROWSE oBrw SIZE -10,-40 PIXEL OF oDlg DATASOURCE "Reg" ;
           COLUMNS "FIRST","LAST","HIREDATE","SALARY" ;
           HEADERS "Nombre","Apellido","Nacimiento","Salario" ;
           PICTURES '@!','@!','@d','999,999,999,99';
           CELL LINES AUTOSORT NOBORDER

           oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED


   DbCloseAll()
   Ferase(".\XBrwReg.dbf")
 
return nil
 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Consulta Array o Dbf en Xbrowse

Postby remtec » Tue Jun 15, 2021 3:44 pm

Hola Francisco

Muchas gracias por tu ayuda y preocupación como siempre.

Ahora menos entiendo.

Si dentro del mismo programa, las líneas xbrowse dbf y array, funcionan muy rápido, luego se abre mi código de xbrowse y con la misma dbf y registros, funciona muy lento, tu lo pruebas y funciona bien, no tengo explicación, si solo en mi caso con 1.000, tiene este comportamiento, que puede ser?, ni siquiera me puedo imaginar.

Cuando me refiero a lento, es su barrido de las filas, porque son 4 campos, si me desplazo con las flechas, ese desplazamiento es el lento.

Y eso que tuve que llevarlo a disco local, no se si es lo normal, que aun cuando se trabaja en red, un archivo de paso, tenga que llevarlo a un disco local, pero en mis caso, pude descartar la red.

Muchos Saludos amigo.

Antonio.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 86 guests