xHarbour pesquisa lenta com o Seek

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem 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.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem 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.
Editado pela última vez por Toledo em 05 Out 2014 19:22, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem 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.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem 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 ?
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem 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
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem 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.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

Não ajudou, porque ficou confuso, não é possivel ler o fluxo do programa em modo resumido. abs.
aferra
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 30 Mai 2008 06:55
Localização: Ribeirão Preto/SP

xHarbour pesquisa lenta com o Seek

Mensagem 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...
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem 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.
aferra
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 30 Mai 2008 06:55
Localização: Ribeirão Preto/SP

xHarbour pesquisa lenta com o Seek

Mensagem 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
Editado pela última vez por Toledo em 05 Out 2014 19:24, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

mudei uma parte para Tbrowse, não terminei totalmente, mas já deu para fazer alguns testes e o Tbrowse é mais rapido.
aferra
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 30 Mai 2008 06:55
Localização: Ribeirão Preto/SP

xHarbour pesquisa lenta com o Seek

Mensagem por aferra »

Legal, o que precisar, e eu puder ( lembrar rsrsrsrs ) ajudar, estamos por aqui, um grande abraço e boa sorte
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem 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.
Editado pela última vez por Toledo em 05 Out 2014 19:27, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
aferra
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 30 Mai 2008 06:55
Localização: Ribeirão Preto/SP

xHarbour pesquisa lenta com o Seek

Mensagem 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
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

bom dia aferra, não estou entendendo, onde eu coloco as condições para imprimir com duas ou trez casas ?
Responder