ajuda KeyCount()
Moderador: Moderadores
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
ajuda KeyCount()
bom dia a todos
tenho a seguinte instrução:
SET( _SET_DELETED, .T. ) // .T. = nao exibe registros deletados no BROWSE e .F. = exibe
ok, esta sintaxe esta funcionando, agora tenho uma outra instruçao:
SETPROPERTY( ( NOME_FORM_PAI ), ( NOME_CONTROLE ), "VALUE" , NTrim(KeyNo()) + "/" + NTrim( KeyCount() ) )
esta por sua vez nao funciona o NTrim( KeyCount() ) esta trazendo o total de registro que tenho no DBF, so que neste DBF eu tenho alguns registros que estao marcados para deletar, como faço para o NTrim( KeyCount() ) nao somar estes registro ou existe outro comando que posso utilizar? qual?
abraços
tenho a seguinte instrução:
SET( _SET_DELETED, .T. ) // .T. = nao exibe registros deletados no BROWSE e .F. = exibe
ok, esta sintaxe esta funcionando, agora tenho uma outra instruçao:
SETPROPERTY( ( NOME_FORM_PAI ), ( NOME_CONTROLE ), "VALUE" , NTrim(KeyNo()) + "/" + NTrim( KeyCount() ) )
esta por sua vez nao funciona o NTrim( KeyCount() ) esta trazendo o total de registro que tenho no DBF, so que neste DBF eu tenho alguns registros que estao marcados para deletar, como faço para o NTrim( KeyCount() ) nao somar estes registro ou existe outro comando que posso utilizar? qual?
abraços
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
ajuda KeyCount()
Amigo, se com este arquivo (DBF) tiver algum arquivo de índice aberto, tente mudar KeyCount por OrdKeyCount.
Abraços,
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
ajuda KeyCount()
ola amigos
quando faço com KeyCount me aparece 51360 ou seja o DBF inteiro sem tirar os registros marcados para deletar
eu fiz com o OrdKeyCount() o resultado foi o mesmo, tentei colocar tambem desta forma OrdKeyCount( alias(),"numero") o DBF aberto mais o nome da TAG e tambem tra os 51360 registro, nao surtir efeito
vou fazer os testes para ver...
quando faço com KeyCount me aparece 51360 ou seja o DBF inteiro sem tirar os registros marcados para deletar
eu fiz com o OrdKeyCount() o resultado foi o mesmo, tentei colocar tambem desta forma OrdKeyCount( alias(),"numero") o DBF aberto mais o nome da TAG e tambem tra os 51360 registro, nao surtir efeito
vou fazer os testes para ver...
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
ajuda KeyCount()
Olá!
Creio só vá funcionar se a criação do índice for condicional, ou seja, se a condição para aparecer no índice contiver
Creio só vá funcionar se a criação do índice for condicional, ou seja, se a condição para aparecer no índice contiver
Código: Selecionar todos
FOR .Not. Deleted()[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
ajuda KeyCount()
Amparo,
Salve numa variável o total de registros deletados e tira do total.
Count to cDeletados For Deleted()
? Str( LastRec() - cDeletados, 6)
Abraços
Mauricio
Salve numa variável o total de registros deletados e tira do total.
Count to cDeletados For Deleted()
? Str( LastRec() - cDeletados, 6)
Abraços
Mauricio
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
ajuda KeyCount()
ola amigos
na TAG do indice eu tinha colocado FOR !DELETED() ou FOR .NOT. DELETED() e nao resolveu
nao sei onde esta o problema vou fazer mais alguns testes, mas acho que vou ter que adotar a programação POG (programação orientada a gambiarra )
abraços
na TAG do indice eu tinha colocado FOR !DELETED() ou FOR .NOT. DELETED() e nao resolveu
nao sei onde esta o problema vou fazer mais alguns testes, mas acho que vou ter que adotar a programação POG (programação orientada a gambiarra )
abraços
ajuda KeyCount()
Tente isso:
nTotalRegistros:=0
&(Alias())->(DbEval({||nTotalRegistros++},{||!&(Alias())->(Deleted()) .AND. !&(Alias())->(Eof())}))
nTotalRegistros:=0
&(Alias())->(DbEval({||nTotalRegistros++},{||!&(Alias())->(Deleted()) .AND. !&(Alias())->(Eof())}))
►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)
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)
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
ajuda KeyCount()
ola amigos
asimoes, com sua instrução consegui chegar a um parametro ideal
em meu sistema coloquei a seguinte instrução:
se o layout for NATURAL nao soma a varialvel NDEL, entao a funcao QTDE_REGISTRO_BROW( 'SGC020101FORM', 'TOTREG', NDEL ) ficou assim:
valeu, abraços
asimoes, com sua instrução consegui chegar a um parametro ideal
em meu sistema coloquei a seguinte instrução:
Código: Selecionar todos
IF ALLTRIM( SGC020101NOME_NOVO_LAYOUT ) == 'Layout natural (Ctrl+F6)' .AND. lAdmin
NDEL := 0
ELSE
&( Alias() )->( DbEval( { || NDEL++ },{ || &( Alias() )->( Deleted() ) .AND. !&( Alias() )->( Eof() ) } ) )
ENDIFCódigo: Selecionar todos
PROCEDURE QTDE_REGISTRO_BROW( NOME_FORM_PAI , NOME_CONTROLE, NDEL )
DO EVENTS
SETPROPERTY( ( NOME_FORM_PAI ), ( NOME_CONTROLE ), "VALUE" , NTrim(KeyNo()) + "/" + NTrim( KeyCount()-NDEL ) )
RETURN- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
ajuda KeyCount()
ola amigos
bem, com a ultima instruçao passada pelo colega ASIMOES o rultado surtir de forma agradavel, mais existe um porem, quando eu abro minha aplicação esta demora +- 1.40 (hum minuto e quarenta segundos) para preencher o TSBROWSE quando que se eu nao utilizar a instrução o preenchimento é instantaneo, so que se eu fechar a aplicação e abrir novamente esta tempo ja diminui para alguns segundos ( o tempo parece ser pequeno mais para o usuario final é motivo para falar que o sistema é lerdo e tudo mais, nos programados sabemos bem o quanto o usuario gosta de colocar defeito no sistema para dizer que nao fez tal coisa.) bem mais isso na verdade nao é so com a instrução em questao acontece tambem quando eu peço para totalizar uma determinada coluna no TSBROWSE a primeira vez que faço a totalização demora depois as outras vai mais rapido, isso tambem acontece se eu fizer um filtro.
se alguem tiver alguma ideia post por favor, vou ralar mais um pouco quem sabe encontro uma solução.
abraços
bem, com a ultima instruçao passada pelo colega ASIMOES o rultado surtir de forma agradavel, mais existe um porem, quando eu abro minha aplicação esta demora +- 1.40 (hum minuto e quarenta segundos) para preencher o TSBROWSE quando que se eu nao utilizar a instrução o preenchimento é instantaneo, so que se eu fechar a aplicação e abrir novamente esta tempo ja diminui para alguns segundos ( o tempo parece ser pequeno mais para o usuario final é motivo para falar que o sistema é lerdo e tudo mais, nos programados sabemos bem o quanto o usuario gosta de colocar defeito no sistema para dizer que nao fez tal coisa.) bem mais isso na verdade nao é so com a instrução em questao acontece tambem quando eu peço para totalizar uma determinada coluna no TSBROWSE a primeira vez que faço a totalização demora depois as outras vai mais rapido, isso tambem acontece se eu fizer um filtro.
se alguem tiver alguma ideia post por favor, vou ralar mais um pouco quem sabe encontro uma solução.
abraços
ajuda KeyCount()
Tenta o uso da função OrdScope() você vai ganhar velocidade de processamento.
Ex.
OrdScope do campo indexado:
&(Alias())->(DbSetOrder(1))
OrdScope(0,'A')
OrdScope(1,'B')
&(Alias())->(DbGoTop())
A partir daqui você pode contar registros fazer qualquer leitura que a faixa de registros estará somente entre a letra A e B
Adapte para sua situação.
Com OrdScope você elimina o uso do set filter
Ex.
OrdScope do campo indexado:
&(Alias())->(DbSetOrder(1))
OrdScope(0,'A')
OrdScope(1,'B')
&(Alias())->(DbGoTop())
A partir daqui você pode contar registros fazer qualquer leitura que a faixa de registros estará somente entre a letra A e B
Adapte para sua situação.
Com OrdScope você elimina o uso do set filter
►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)
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)
