DBSetOrder
Define qual indice a tabela vai usar nas buscas. Indice 1 nem sempre e a chave que voce quer — sempre confira na SIX.
Assinatura: DBSetOrder(nOrdem) -> NIL
Retorna: NIL
Define qual indice ativo a tabela usa nas operacoes seguintes (DBSeek, ranges, navegacao). E pre-requisito do DBSeek — sem definir ordem, voce nao sabe por qual chave esta buscando.
Sintaxe
SA1->(DBSetOrder(1)) // indice 1 (filial + codigo)
SA1->(DBSeek(xFilial("SA1") + cCod))
Como descobrir qual indice e qual
Os indices ficam no dicionario SIX. Use o utilitario AP6 do TDS ou query SQL:
SELECT INDICE, CHAVE, DESCRICAO
FROM SIX010 WHERE INDICE LIKE 'SA1%'
ORDER BY ORDEM
Pegadinhas
- Indice 1 nao e padrao — em algumas tabelas a chave principal e indice 2 ou 3.
- Indices customizados (clientes criam) podem alterar a numeracao default depois de um upgrade.
- Esquecer e usar indice errado — DBSeek retorna .F. nao porque registro nao existe, mas porque busca na chave errada.
- Sempre apos DBSelectArea — ordem da area atual no momento.
Boas praticas
- Faca
DBSetOrdersempre que voce nao tem certeza de qual era a ordem anterior - Em funcoes utilitarias, use
GetArea/RestAreapra restaurar a ordem que estava - Documente a ordem que voce usa em comentario (
// indice 2: filial+CNPJ)
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nOrdem | Numeric | sim | Numero do indice (1, 2, 3...) conforme cadastrado na SIX. |
Exemplos
Buscar por CNPJ (indice diferente)
// Cliente nao esta no indice 1 — indice 3 e por CNPJ
SA1->(DBSetOrder(3))
If SA1->(DBSeek(xFilial("SA1") + cCNPJ))
ConOut("Cliente: " + SA1->A1_NOME)
EndIf