Página 1 de 3

Filtro com OrdScope()

Enviado: 21 Mai 2008 19:17
por Grings
A função OrdScope() não funciona com índices compostos ? Preciso indexar um campo data + tipo e filtar um intervalo de datas com um determinado tipo para exibir em um Tbrowse, mas não estou conseguindo.
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: Mensagem recuperada através de citações de outros usuários. Pois esta mensagem foi re-editada pelo próprio autor apagando o seu conteúdo e prejudicando o entendimento do tópico. Esta prática não é aceita no fórum.

Re: Filtro com OrdScope()

Enviado: 21 Mai 2008 23:17
por sygecom
Grings escreveu:A função OrdScope() não funciona com índices compostos ? Preciso indexar um campo data + tipo e filtar um intervalo de datas com um determinado tipo para exibir em um Tbrowse, mas não estou conseguindo.
Olá Grings,
Funciona sim, abaixo um exemplo:

Código: Selecionar todos

USE RECEBER ALIAS RECEBER SHARED  // ABRINDO DBF
INDEX ON DTOS(DATA)+STR(CAIXA,2)+SITUACAO TAG 1 to RECEBER  // CRIANDO INDICE ONDE PRIMEIRO CAMPO É DO TIPO DATA,SEGUNDO DO TIPO NUMÉRICO E TERCEIRO CARACTER.
SET INDEX TO RECEBER  // ABRINDO INDICE CASO NÃO ESTEJA UNSANDO SET AUTOPEN ON

SELE RECEBER
DBSETORDER(1)
ORDScope(0, DTOS(wDATA)+STR(wCAIXA,2)+"P") 
ORDScope(1, DTOS(wDATA)+STR(wCAIXA,2)+"P")

Espero ter ajudado.

Abraços
Leonardo Machado

Enviado: 23 Mai 2008 10:09
por Grings
Não funcionou. Consigo filtrar somente a data, o tipo não, aparecem todos.
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: Mensagem recuperada através de citações de outros usuários. Pois esta mensagem foi re-editada pelo próprio autor apagando o seu conteúdo e prejudicando o entendimento do tópico. Esta prática não é aceita no fórum.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 10:18
por sygecom
Grings escreveu:Não funcionou. Consigo filtrar somente a data, o tipo não, aparecem todos.
Olá Grings,
Post um pequeno exemplo demonstrando seu problema e como você esta fazendo, se esta usando CDX ou que ?

Abraços
Leonardo Machado

Enviado: 23 Mai 2008 11:21
por Grings
OrdScope(0,Dtos(dDataIni), + '1')
OrdScope(1,Dtos(dDataFin), + '1')
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: Mensagem recuperada através de citações de outros usuários. Pois esta mensagem foi re-editada pelo próprio autor apagando o seu conteúdo e prejudicando o entendimento do tópico. Esta prática não é aceita no fórum.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 11:25
por sygecom
Grings escreveu: OrdScope(0,Dtos(dDataIni), + '1')
OrdScope(1,Dtos(dDataFin), + '1')
Olá Grings,
Voce esta colocando uma virgula a mais, deve fica apenas assim:

OrdScope(0,Dtos(dDataIni) + '1')
OrdScope(1,Dtos(dDataFin) + '1')

.

Enviado: 23 Mai 2008 11:43
por Grings
.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 11:56
por sygecom
Grings,
Realmente isso esta muito estranho, como foi demostrado nos topicos acima, eu uso muito tudo isso e não tenho problemas, deve ter alguma outra cosia que não esta sendo prevista, me diga uma coisa esse campo "TIPO" é CARACTER mesmo ou Numérico ?

.

Enviado: 23 Mai 2008 14:37
por Grings
.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 17:56
por Hasse
Testei o PRG acima e funcionou CORRETAMENTE, sem qualquer problema.
HBmake - Windows XP SP2 - xHarbour 1.0.0-beta

Com as versões < 0.99.60 >, < 0.99.70 > e < 1.1.0 > também funcionou.

.

Enviado: 23 Mai 2008 18:22
por Grings
.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 19:02
por Hasse
Olá Grings.

Veja que o OrdScope() não é um filtro. Nele se estabelece onde está localizado o primeiro registro que atende ao limite e em seguida aquele que atende ao segundo limite. Todos os registros intermediários são apresentados.

Para fazer isto que você precisa é necessário acionar em seguida um Set Filter to, ou DBSetFilter(). Para arquivos pequenos basta usar o filtro, mas para arquivos grande é bom combinar as duas funções que acelera muito o resultado.

O xHarbour também tem uma função de filtro, mas não me lembro do nome dela. Com uma pequena pesquisa certamente você acha.

E se não achar, solta o verbo que a gente te ajuda.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 19:12
por MARCELOG
Caro Grings, se você estiver fazendo que nem o Leonardo postou acho que não vai dar certo.
É que ele está criando o índice com o STR, que converte o número em string mas deixa espaços à esquerda.
Se for o caso, use alltrim(str(...)) que vai dar certo.
Verifique o índice ativo com indexkey(0) ou &indexkey(0) para comparar com o filtro que você está realizando.

MarceloG

.

Enviado: 23 Mai 2008 19:28
por Grings
.

Re: Filtro com OrdScope()

Enviado: 23 Mai 2008 20:48
por sygecom
Grings, vc esta com razão seu pequeno exemplo teoricamente funcionaria, pelomenos para min. Mas compile com a versão 1.1.0 e não esta filtrando direito, porem tenho Diversas rotinhas que usam isso, inclusive o exemplo que postei bem no começo foi pego de um filtro de contas a receber meu.