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.