dúvida com SET INDEX TO

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

dúvida com SET INDEX TO

Mensagem por porter »

ola pessoal, uma dúvida, quando seleciono um indice pelo ORDSETFOCUS("indice1") criado, não será mais necessario usar o SET INDEX TO indice1, indice2 para deixar todos os indices abertos como se fazia no Clipper ?

SELECT 1
USE MERCADORIAS
INDEX ON codigo TAG indice1 TO mercadoria1
INDEX ON nome TAG indice2 TO mercadoria1

Para mudar a ordem em um arquivo de índice CDX:


ORDSETFOCUS("INDICE2")

Com esse comando todos os indices já serão abertos, sem precisar usar o SET INDEX TO indice1, indice2, etc

windows, xHarbour.
Avatar do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

dúvida com SET INDEX TO

Mensagem por acelconsultoria »

Olá, Porter.

É assim mesmo. Isso ocorre, porque os índices CDX, depois de criados pelo INDEX ON, são abertos automaticamente após o comando USE. Com isso, só é necessário você apontar a tag desejada, através do comando SET ORDER TO ou da função ORDSETFOCUS().

Tem esse tópico aqui abordando e explicando a situação com mais detalhes:
https://pctoledo.org/forum/viewto ... f=4&t=7399

E caso queria desabilitar a abertura automática dos índices, então você deve colocar no início do seu programa:

Código: Selecionar todos

SET AUTOPEN OFF
Espero ter ajudado !!! Abraços.
Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

dúvida com SET INDEX TO

Mensagem por alxsts »

Olá!

No RDD CDX, se, e somente se, o nome do arquivo estrutural de índices (o arquivo .CDX único que contém todas as tags de índices), também conhecido como Order Bag, tiver o mesmo nome do arquivo .DBF e a opção SET AUTOPEN estiver ON, então, o comando USE detectará isto e abrirá o arquivo de índices automaticamente. Opcionalmente, se a opção SET AUTORDER for especificada, poderá ser especificada uma ordem inicial.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

dúvida com SET INDEX TO

Mensagem por rochinha »

Amiguinhos,

Porter

No código abaixo você usa a todo momento este modo de abertura?

Código: Selecionar todos

SELECT 1
USE MERCADORIAS
INDEX ON codigo TAG indice1 TO mercadoria1
INDEX ON nome TAG indice2 TO mercadoria1
Em primeiro lugar você não deveria usar este método sempre ao abrir a tabela, pois o INDEX ON deve ser usado esporádicamente ou programáticamente.

Um .DBF precisa de arquivos acessórios .NTX ou .CDX mas estes não precisam ser criados a todo momento.

Você tem um arquivo MERCADORIAS, pode muito bem criar o indice-bag MERCADORIAS e quando o número de tags internas ultrapassarem 15 você pode criar mais um indice-bag, e então usar:

Código: Selecionar todos

SELECT 1
USE MERCADORIAS
SET INDEX TO mercadorias, mercadoria1
...
SET ORDER TO mercadoria1
...
SET ORDER TO mercadorias
Se você só tem 1 índice por tabela pode usar o comando Auto Open para abri-los automáticamente.

Em tempo, vale dizer que a anos não uso o comando USE a não ser que eu queira abrir um arquivo em modo exclusivo.

Código: Selecionar todos

#command OPEN <(db)>                                                    ;
             [VIA <rdd>]                                                ;
             [ALIAS <a>]                                                ;
             [<new: NEW>]                                               ;
             [<ex: EXCLUSIVE>]                                          ;
             [<sh: SHARED>]                                             ;
             [<ro: READONLY>]                                           ;
             [INDEX <(index1)> [, <(indexn)>]]                          ;
       => iif( Select( <(db)> )==0, iif( !File( <(db)>+".CDX" ), ( Mensagem( "Arquivo "+<(db)>+" esta sem indices. Abrindo sem indices. Reorganiza primeiro" ), dbNetUseArea( <.new.>, <rdd>, <(db)>, <(a)>, if(<.sh.> .or. <.ex.>, !<.ex.>, NIL), <.ro.>, 0 ) ), ( dbNetUseArea( <.new.>, <rdd>, <(db)>, <(a)>, if(<.sh.> .or. <.ex.>, !<.ex.>, NIL), <.ro.>, 0 ), dbSetIndex( <(db)> ) ) ), ( dbSelectArea( <(db)> ) ) )
A diferença deste comando no meu caso é abrir o .CDX de mesmo nome da tabela e evitar erro de abertura quando o mesmo já está aberto. O diferencial é, que se a tabela já estiver aberta e for dado um comando OPEN na mesma, será setada a área onde a tabela esta aberta atualmente.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder