ajuda KeyCount()

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

ajuda KeyCount()

Mensagem por Amparo »

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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

ajuda KeyCount()

Mensagem por Toledo »

Amigo, se com este arquivo (DBF) tiver algum arquivo de índice aberto, tente mudar KeyCount por OrdKeyCount.

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
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

ajuda KeyCount()

Mensagem por Amparo »

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...
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

ajuda KeyCount()

Mensagem por alxsts »

Olá!

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)
Avatar do usuário
Zoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 24 Set 2004 13:08
Localização: Leme/SP

ajuda KeyCount()

Mensagem por Zoc »

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
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

ajuda KeyCount()

Mensagem por Amparo »

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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

ajuda KeyCount()

Mensagem por asimoes »

Tente isso:

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)
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

ajuda KeyCount()

Mensagem por Amparo »

ola amigos

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() ) } ) )
ENDIF
se o layout for NATURAL nao soma a varialvel NDEL, entao a funcao QTDE_REGISTRO_BROW( 'SGC020101FORM', 'TOTREG', NDEL ) ficou assim:

Có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
valeu, abraços
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

ajuda KeyCount()

Mensagem por Amparo »

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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

ajuda KeyCount()

Mensagem por asimoes »

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
►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)
Responder