Página 2 de 2

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 15:54
por Kapiaba
Apesar de nao programar mais em modo console, eu faria assim, fica muito mais elegante.

Código: Selecionar todos

/*
 * $Id: testbrw.prg,v 1.2 2003/11/12 12:58:45 andijahja Exp $
 */

// Harbour Class TBrowse and TBColumn sample

#include "inkey.ch"

function Main()

   local linit   := .F., i
   local oBrowse := TBrowseNew( 5, 5, 16, 30 )
   local aTest0  := { "This", "is", "a", "browse", "on", "an", "array", "test", "with", "a", "long", "data" }
   local aTest1  := { 1, 2, 3, 4, 5, 6, 7, 8, 10000, -1000, 54, 456342 }
   local aTest2  := { date(), date()+4, date()+56, date()+14, date()+5, date()+6, date()+7, date()+8, date()+10000, date()-1000, date()-54, date()+456342 }
   local aTest3  := { .t., .f., .t., .t., .f., .f., .t., .f., .t., .t., .f., .f. }
   local n       := 1
   local nKey
   local lEnd    := .f.
   local nCursor
   local cColor
   local nRow, nCol
   local nTmpRow, nTmpCol

   oBrowse:colorSpec     = "W+/B, N/BG"
   oBrowse:ColSep        = "³"
   oBrowse:HeadSep        = "ÑÍ"
   oBrowse:FootSep        = "ÏÍ"
   oBrowse:GoTopBlock    = { || n := 1 }
   oBrowse:GoBottomBlock = { || n := Len( aTest0 ) }
   oBrowse:SkipBlock     = { | nSkip, nPos | nPos := n,;
                             n := If( nSkip > 0, Min( Len( aTest0 ), n + nSkip ),;
                             Max( 1, n + nSkip )), n - nPos }

   oBrowse:AddColumn( TBColumnNew( "First",  { || n } ) )
   oBrowse:AddColumn( TBColumnNew( "Second", { || aTest0[ n ] } ) )
   oBrowse:AddColumn( TBColumnNew( "Third",  { || aTest1[ n ] } ) )
   oBrowse:AddColumn( TBColumnNew( "Forth",  { || aTest2[ n ] } ) )
   oBrowse:AddColumn( TBColumnNew( "Fifth",  { || aTest3[ n ] } ) )
   oBrowse:GetColumn(1):Footing = 'Number'
   oBrowse:GetColumn(2):Footing = 'Strins'

   oBrowse:GetColumn(2):Picture := '@!'

   oBrowse:GetColumn(3):Footing = 'Number'
   oBrowse:GetColumn(3):Picture := '999,999.99'
   oBrowse:GetColumn(4):Footing = 'Dates'
   oBrowse:GetColumn(5):Footing = 'Logical'
   // needed since I've changed some columns _after_ I've added them to TBrowse object
   oBrowse:Configure()

   Alert( oBrowse:ClassName() )
   Alert( oBrowse:GetColumn( 1 ):ClassName() )

   oBrowse:RowPos = 5
   oBrowse:Freeze = 1
   nCursor := SetCursor( 0 )
   cColor := SetColor( "W+/B" )
   nRow := Row()
   nCol := Col()
   @ 4,4,17,31 BOX "ÚÄ¿³ÙÄÀ³ "
#ifdef HB_COMPAT_C53
 oBrowse:Setkey(0,{|ob,nkey| Defproc(ob,nKey)})
while .t.
    oBrowse:ForceStable()
 if (oBrowse:applykey(inkey(0))== -1)
   exit
endif
enddo
#else
While !lEnd
      dispbegin()
      oBrowse:ForceStable()
      dispend()
      nKey = InKey( 0 )

      do case
         case nKey == K_ESC
              SetPos( 17, 0 )
              lEnd = .t.

         case nKey == K_DOWN
              oBrowse:Down()

         case nKey == K_UP
              oBrowse:Up()

         case nKey == K_LEFT
              oBrowse:Left()

         case nKey == K_RIGHT
              oBrowse:Right()

         case nKey = K_PGDN
              oBrowse:pageDown()

         case nKey = K_PGUP
              oBrowse:pageUp()

         case nKey = K_CTRL_PGUP
              oBrowse:goTop()

         case nKey = K_CTRL_PGDN
              oBrowse:goBottom()

         case nKey = K_HOME
              oBrowse:home()

         case nKey = K_END
              oBrowse:end()

         case nKey = K_CTRL_LEFT
              oBrowse:panLeft()

         case nKey = K_CTRL_RIGHT
              oBrowse:panRight()

         case nKey = K_CTRL_HOME
              oBrowse:panHome()

         case nKey = K_CTRL_END
              oBrowse:panEnd()

         case nKey = K_TAB
              nTmpRow := ROW()
              nTmpCol := COL()
              @ 0, 0 SAY TIME()
              DevPos( nTmpRow, nTmpCol )

      endcase

   end
#endif
   DevPos( nRow, nCol )
   SetColor( cColor )
   SetCursor( nCursor )

return nil
#ifdef HB_COMPAT_C53
function  defproc(ob,nkey)
Local nTmpRow,nTmpCol
        if nKey = K_TAB
              nTmpRow := ROW()
              nTmpCol := COL()
              @ 0, 0 SAY TIME()
              DevPos( nTmpRow, nTmpCol )
            ob:Refreshall()
        endif
        return 1
#endif
abs.

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 16:11
por porter
Eu não declarei essas libs

Código: Selecionar todos

#include "inkey.ch"
#include "dbedit.ch"

estou fazendo assim meu Dbedit: (Resumido)
DBEDIT(12,01,22,78,V1,"FDBEDIT1",V2,V3,"-"," ")
UNLOCK ALL ; CLOSE ALL

FUNCTION FDBEDIT1(modo,coluna)
   if modo = 1
      mensagem("inicio do programa^)
      return(1)
   elseif modo = 2
      mensagem("fim do arquivo)
      return(1)
   elseif modo = 3
      mensagem("arquivo vazio")
      return(1)
   elseif modo = 4
      if tecla = f5
         procura()
      elseif tecla = f6
         incluir()
      endif
  endif
  return(1)


  STATIC PROCEDURE PROCURA
     SEEK VARIAVEL
     RETURN(2)
Estou achando que a solução é partir para o Tbrowse
obrigado Kapiaba.

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 16:21
por Kapiaba
Sinceramente não entendi isto...

Código: Selecionar todos

STATIC PROCEDURE PROCURA
   SEEK VARIAVEL
RETURN(2)
Não me faz sentido, mas cada um tem um jeito de programar.

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 16:32
por porter
criei essa procedure PROCURA fora do Dbedit, ele procura pela variavel por exemplo variavel = "CIMENTO", localiza e volta e posiciona no registro encontrado, o que você não está entendendo ?

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 16:40
por Kapiaba
Como voce postou somente parte, me confundi, na realidade voce está fazendo uma busca incremental?

Código: Selecionar todos

   DBEDIT(12,01,22,78,V1,"FDBEDIT1",V2,V3,"-"," ")
   UNLOCK ALL ; CLOSE ALL  // Pode explicar, destrava o registro e fecha os bancos, abre, fecha, porque?
abs

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 16:48
por porter
DBEDIT(12,01,22,78,V1,"FDBEDIT1",V2,V3,"-"," ")
2 UNLOCK ALL ; CLOSE ALL // Pode explicar, destrava o registro e fecha os bancos, abre, fecha, porque?
3
Se estou em um cadastro de mercadorias por exemplo com Dbedit, e teclo Esc, fecho tudo e volto para tela principal com todos DBFs fechados e destravados, achei que colocando o codigo resumido iria faciltar.

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 17:00
por Kapiaba
Não ajudou, porque ficou confuso, não é possivel ler o fluxo do programa em modo resumido. abs.

xHarbour pesquisa lenta com o Seek

Enviado: 03 Out 2014 09:24
por aferra
Faz tempo que não programo em modo console, porem, o que me vem de recordação, inclusive na era clipper, que o tbrowse é melhor que o dbedit em relação a velocidade em rede, então melhor vc dar uma estudada nessa classe e testar...testar...testar...

xHarbour pesquisa lenta com o Seek

Enviado: 03 Out 2014 11:02
por porter
ola aferra, já estou implementando no modo TBrowse, tem uma parte no sistema que é TBrowse e a resposta é rapidissima, mas outra parte que uso Dbedit é muito lenta a pesquisa quando dois ou mais usuarios acessam o mesmo cadastro, tenho algumas duvidas de como montar o TBrowse, como por exemplo se o Custo da mercadoria pode aparecer dependendo de alguma condição, por exemplo se for no servidor o custo da mercadoria pode aparecer, se não não pode aparecer o custo, isso no Dbedit eu sei fazer mas no TBrowse ainda não sei.

xHarbour pesquisa lenta com o Seek

Enviado: 03 Out 2014 12:00
por aferra
hehehehehehehe, vc me fez encontrar coisas que dão até medo. kkkkkkkkkkkkkkkkkk

Código: Selecionar todos

oBrw := TBrowseDB( LS+2, CS+3, LI-2, CI-4 )
oBrw:colorSpec:="N/W,W+/R,W/N,"+"N,GR+/W,N/B,R+/B,GR+/B,W+/B"
oBrw:headSep:="ÂÄ"
oBrw:colSep:="³"
oBrw:ColPos:=2
ADD COLUMN Pro->codpro TO oBrw  HEADING "C¢digo"
ADD COLUMN Pro->nompro TO oBrw HEADING "     Nome do Produto"
ADD COLUMN Pro->marca  TO oBrw HEADING "  Marca  "
ADD COLUMN TRANS(Pro->ncmsh,"@R 9999.99.99") TO oBrw HEADING "NCM/SH"
ADD COLUMN TRANS(Pro->estatu,"@E 9,999.99") TO oBrw HEADING "Qtde"
ADD COLUMN TRANS(Pro->venmax,"@E 999,999.99") TO oBrw HEADING "Vr. Venda"
ADD COLUMN TRANS(Pro->venmin,"@E 999,999.99") TO oBrw HEADING "Vr. M¡nimo"
IF User->lAcCusto
   ADD COLUMN TRANS(Pro->cuspro,"@E 999,999.99") TO oBrw HEADING "Vr. Custo"
ENDIF
e o restante da configuração do tbrowse

xHarbour pesquisa lenta com o Seek

Enviado: 03 Out 2014 15:55
por porter
mudei uma parte para Tbrowse, não terminei totalmente, mas já deu para fazer alguns testes e o Tbrowse é mais rapido.

xHarbour pesquisa lenta com o Seek

Enviado: 03 Out 2014 19:02
por aferra
Legal, o que precisar, e eu puder ( lembrar rsrsrsrs ) ajudar, estamos por aqui, um grande abraço e boa sorte

xHarbour pesquisa lenta com o Seek

Enviado: 05 Out 2014 10:08
por porter
olá aferra, da maneira como você sugeriu não estou conseguindo fazer, eu monto a matriz dessa forma:

Código: Selecionar todos

PRIVATE cCampos := {{"CODIGO",     "@9" , "Código"},;
                    {"DESCRICAO","@!", "Descrição"},;
                    {"UN",            "@!", "Un"},;
                    {"ESTOQUE",   "9999","Estoque"}}
Como ficaria a montagem da matriz, colocando condições.
No campo ESTOQUE, se o UN="UN", a mascara fica como está, mas se UN="KG" por exemplo a mascara tem que ter 3 casas depois da virgula ai a mascara já é outra, o TBrowse tem que ficar assim:

Código DESCRIÇÃO UN Estoque
1254 BOLA UN 15
1255 ARROZ KG 25,000

Xharbour, windows 7, 64 bits
obrigado.

xHarbour pesquisa lenta com o Seek

Enviado: 06 Out 2014 08:22
por aferra
Bom acho que daria certo desta maneira:

Código: Selecionar todos

PRIVATE cCampos := {{"CODIGO",     "@9" , "Código"},;
	                    {"DESCRICAO","@!", "Descrição"},;
	                    {"UN",            "@!", "Un"},;
	                    {"ESTOQUE",   "9999","Estoque"}}

FOR i:=1 TO LEN( cCampos )
   ADD COLUMN cCampos[i,1] TO oBrw  HEADING cCampos[i,3] PICTURE cCampos[i,2]
NEXT

xHarbour pesquisa lenta com o Seek

Enviado: 06 Out 2014 09:35
por porter
bom dia aferra, não estou entendendo, onde eu coloco as condições para imprimir com duas ou trez casas ?