Página 1 de 1
ajuda KeyCount()
Enviado: 29 Mar 2012 12:39
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
ajuda KeyCount()
Enviado: 30 Mar 2012 19:02
por Toledo
Amigo, se com este arquivo (DBF) tiver algum arquivo de índice aberto, tente mudar KeyCount por OrdKeyCount.
Abraços,
ajuda KeyCount()
Enviado: 02 Abr 2012 20:42
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...
ajuda KeyCount()
Enviado: 03 Abr 2012 12:13
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
ajuda KeyCount()
Enviado: 05 Abr 2012 08:44
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
ajuda KeyCount()
Enviado: 05 Abr 2012 14:15
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
ajuda KeyCount()
Enviado: 07 Abr 2012 19:00
por asimoes
Tente isso:
nTotalRegistros:=0
&(Alias())->(DbEval({||nTotalRegistros++},{||!&(Alias())->(Deleted()) .AND. !&(Alias())->(Eof())}))
ajuda KeyCount()
Enviado: 10 Abr 2012 08:57
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
ajuda KeyCount()
Enviado: 11 Abr 2012 09:00
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
ajuda KeyCount()
Enviado: 11 Abr 2012 10:46
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