Filtro com OrdScope()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Filtro com OrdScope()

Mensagem 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.
Editado pela última vez por Grings em 22 Mai 2009 20:51, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Filtro com OrdScope()

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem 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.
Editado pela última vez por Grings em 22 Mai 2009 20:52, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Filtro com OrdScope()

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem 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.
Editado pela última vez por Grings em 22 Mai 2009 20:52, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Filtro com OrdScope()

Mensagem 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')
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

.

Mensagem por Grings »

.
Editado pela última vez por Grings em 22 Mai 2009 20:46, em um total de 2 vezes.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Filtro com OrdScope()

Mensagem 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 ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

.

Mensagem por Grings »

.
Editado pela última vez por Grings em 22 Mai 2009 20:46, em um total de 1 vez.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Filtro com OrdScope()

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

.

Mensagem por Grings »

.
Editado pela última vez por Grings em 22 Mai 2009 20:47, em um total de 1 vez.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Filtro com OrdScope()

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Re: Filtro com OrdScope()

Mensagem 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
Água mole em pedra dura tanto bate que até espirra!
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

.

Mensagem por Grings »

.
Editado pela última vez por Grings em 22 Mai 2009 20:47, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Filtro com OrdScope()

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder