Página 1 de 1

Obter a quantidade de linhas num TBrowse

Enviado: 27 Set 2019 19:53
por ricardo-barros
Boa noite colegas.

Como eu posso saber a quantidade das linhas após filtrar dados com TBrowse?

Obter a quantidade de linhas num TBrowse

Enviado: 28 Set 2019 18:54
por Fernando queiroz
Explica melhor qual o objetivo, porque o browse não tem filtro e sim o arquivo

Obter a quantidade de linhas num TBrowse

Enviado: 28 Set 2019 18:58
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

Obter a quantidade de linhas num TBrowse

Enviado: 28 Set 2019 19:02
por Fernando queiroz
tela.jpg

Obter a quantidade de linhas num TBrowse

Enviado: 28 Set 2019 20:06
por asimoes
O exemplo mostrado não é para TBrowse

Quantidade de linha no TBrowse é o reccount do dbf ou ordkeycount (indice) do dbf

Obter a quantidade de linhas num TBrowse

Enviado: 28 Set 2019 20:12
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() )

Obter a quantidade de linhas num TBrowse

Enviado: 29 Set 2019 12:21
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.

Obter a quantidade de linhas num TBrowse

Enviado: 29 Set 2019 19:58
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() )


Obter a quantidade de linhas num TBrowse

Enviado: 01 Out 2019 09:02
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.

Obter a quantidade de linhas num TBrowse

Enviado: 02 Out 2019 16:11
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.

Obter a quantidade de linhas num TBrowse

Enviado: 03 Out 2019 08:56
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