Obter a quantidade de linhas num TBrowse

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

Moderador: Moderadores

ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Obter a quantidade de linhas num TBrowse

Mensagem por ricardo-barros »

Boa noite colegas.

Como eu posso saber a quantidade das linhas após filtrar dados com TBrowse?
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Obter a quantidade de linhas num TBrowse

Mensagem por Fernando queiroz »

Explica melhor qual o objetivo, porque o browse não tem filtro e sim o arquivo
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Obter a quantidade de linhas num TBrowse

Mensagem por Fernando queiroz »

@ 18,198 BROWSE oBrowse1 DATABASE SIZE 976,344;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS

neste browse que tenho no sistema cabe 14 linhas visiveis
quando ultrapasso essa quantidade utilizo o seguinte

IF MEMVAR->QTDITEM > 13
DBGOBOTTOM()
DBSKIP(-12)
ELSE
DBGOTOP()
ENDIF

no caso eu deixo 1 linha em branco no final :xau :xau
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Obter a quantidade de linhas num TBrowse

Mensagem por Fernando queiroz »

tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Obter a quantidade de linhas num TBrowse

Mensagem por asimoes »

O exemplo mostrado não é para TBrowse

Quantidade de linha no TBrowse é o reccount do dbf ou ordkeycount (indice) do dbf
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Obter a quantidade de linhas num TBrowse

Mensagem por asimoes »

ricardo-barros escreveu:Boa noite colegas.

Como eu posso saber a quantidade das linhas após filtrar dados com TBrowse?
Você pode usar COUNT TO nCount, ou usar indice temporário como filtro, o total de registros seria o ordkeycount
Indice temporário é mais rápido que set filter, você pode usar ainda OrdScope:

Código: Selecionar todos


cOrder := "CODIGO"
cQuery := "FOR ! Deleted()"

INDEX ON &cCorder. TAG A030700A FOR &cQuery. TEMPORARY ADDITIVE

APC01->( DbSetOrder(1) )
APC01->( OrdScope( 0, '01' ) )
APC01->( OrdScope( 1, '01' ) )
APC01->( DbGoTop() )
nTot := APC01->( OrdKeyCount() )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Obter a quantidade de linhas num TBrowse

Mensagem por ricardo-barros »

Deixem-me explicar melhor o que eu estou precisando.

Estou usando o TBrowse para mostrar uma grade de registros semelhante a DBedit().

Usando a função TBrowseFW eu defini os parâmetros bWhile e bFor para que apenas os registros correspondentes a uma faixa de datas (informada pelo usuário) sejam exibidos na tela.

Assim que o usuário digitar as datas e teclar Enter eu quero mostrar uma frase dizendo quantos registros correspondem ao período digitado.

Já tentei com oTbr:rowCount mas isto só mostra a quantidade de linhas reservadas para a exibição de dados no TBrowse.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Obter a quantidade de linhas num TBrowse

Mensagem por asimoes »

O indice é criado antes!

Código: Selecionar todos

cOrder := "DTOS(DATA)"
cQuery := "FOR ! Deleted()"

INDEX ON &cCorder. TAG A030700A FOR &cQuery. TEMPORARY ADDITIVE

//Depois que informar a data inicial/final

APC01->( DbSetOrder(1) )
APC01->( OrdScope( 0, dDataIni ) )
APC01->( OrdScope( 1, dDataFim ) )
APC01->( DbGoTop() )

nTot := APC01->( OrdKeyCount() )

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Ranier
Usuário Nível 2
Usuário Nível 2
Mensagens: 80
Registrado em: 02 Abr 2019 09:01
Localização: Goiania/Goias

Obter a quantidade de linhas num TBrowse

Mensagem por Ranier »

ricardo-barros escreveu:Deixem-me explicar melhor o que eu estou precisando.
Estou usando o TBrowse para mostrar uma grade de registros semelhante a DBedit().
Usando a função TBrowseFW eu defini os parâmetros bWhile e bFor para que apenas os registros correspondentes a uma faixa de datas (informada pelo usuário) sejam exibidos na tela.
Assim que o usuário digitar as datas e teclar Enter eu quero mostrar uma frase dizendo quantos registros correspondem ao período digitado.
Já tentei com oTbr:rowCount mas isto só mostra a quantidade de linhas reservadas para a exibição de dados no TBrowse.
O TBrowse não sabe o número de linhas que vai apresentar, ele é dinâmico e depende da fonte de dados.
Quando precisar apresentar uma linha, ele requisita a fonte, se acabou, não mostra e pronto.
Então você terá que "calcular" o número possíveis de linhas que poderão ser apresentadas, antes de iniciar o Browse, diretamente com a fonte dos dados.
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Obter a quantidade de linhas num TBrowse

Mensagem por ricardo-barros »

Quando precisar apresentar uma linha, ele requisita a fonte, se acabou, não mostra e pronto.
Neste caso eu gostaria de saber se é possível, após a exibição do TBrowse, informar se pelo menos um registro foi exibido.
Ranier
Usuário Nível 2
Usuário Nível 2
Mensagens: 80
Registrado em: 02 Abr 2019 09:01
Localização: Goiania/Goias

Obter a quantidade de linhas num TBrowse

Mensagem por Ranier »

ricardo-barros escreveu:
Neste caso eu gostaria de saber se é possível, após a exibição do TBrowse, informar se pelo menos um registro foi exibido.
Somente se você criar e gerenciar o Browser derivado de TBrowse. Veja por exemplo esse browser no fontes do SDBU.

Código: Selecionar todos

FUNCTION BrowseTable( nTop, nLeft, nBottom, nRight, hINI, sTABLE )
Local sTELA 
Local sCONN
Local lExit := .F.
Local lOpen
Local nKey
Local oTbr

hINI["TableName"] := sTABLE + ";"
sCONN := hb_iniWriteStr( hINI )
lOpen := DBUseArea( .T., "DBDRDD", sCONN, "TAB1", .T., .T. )
If !lOpen
   hb_Alert( "Falha na abertura da tabela!" )
   Return NIL
Endif

SetCursor(SC_NONE)
sTELA := SaveScreen( 00, 00, 24, 79 )
@ nTop, nLeft To nBottom, nRight

oTbr := BrowseTableNew( nTop + 1, nLeft + 1, nBottom - 1, nRight - 1 )
While !lExit
   DispBegin()
   /* IMPRIMA SEU CONTEUDO AKI */
   While( nKey := Inkey() ) == 0 .and. !oTbr:stabilize()
   End
   DispEnd()
   nKey := Inkey( 0 )
   Switch( nKey )
   Case K_DOWN
        oTbr:down()
        Exit
   Case K_UP
        oTbr:up()
        Exit
   Case K_PGDN
        oTbr:pageDown()
        Exit
   Case K_PGUP
        oTbr:pageUp()
        Exit
   Case K_CTRL_PGUP
        oTbr:goTop()
        Exit
   Case K_CTRL_PGDN
        oTbr:goBottom()
        Exit
   Case K_LEFT
        oTbr:left()
        Exit
   Case K_RIGHT
        oTbr:right()
        Exit
   Case K_ESC
        lExit := .T.
        Exit
   End
End
RestScreen( 00, 00, 24, 79, sTELA )
SetCursor(SC_NORMAL)
Close TAB1

Return NIL
Responder