Página 1 de 1

DBSETORDER(0)

Enviado: 30 Mai 2012 11:39
por jelias
Amigos,

Migrei a mais ou menos um ano para xHarbour 1.2.1 e uso DBFCDX e não tive tempo de "melhorar" minhas rotinas. Como terminei os famosos SPED'S, tirei um tempo para faz isso e me recordei de um detalhe já há muito esquecido. Eu usava Clipper 5.2e + Blinker 7 + Six e quando e no momento da inclusão de dados no banco eu fazia da seguinte forma:

SELE AL_CLIEN
DBSETORDER(0)
APPEND BLANK

Minha dúvida é quanto a necessidade do uso do DBSETORDER(0). Pelo que me recordo, eu usava este comando para forçar a atulização de todos os índices deste banco de dados, ou seja, que o novo registro fosse atulização em todos os arquivos de índices.
Isso é realmente necessário?

Att.
Júlio.

DBSETORDER(0): Desnecessário para atualizar indices...

Enviado: 30 Mai 2012 13:40
por Imatech
EXEMPLO CODIFICAÇÃO PARA APRENDIZADO...

Código: Selecionar todos

  *----------------------------------------------------------*
  * INSERE NOVO REGISTRO
  *----------------------------------------------------------*
  NOME_TABELA->( DBAPPEND() )

  *----------------------------------------------------------*
  * ATRIBUI VALORES AOS CAMPOS
  *----------------------------------------------------------*
  NOME_TABELA->CAMPO_IND_ := REPL( 'A', 10 )
  NOME_TABELA->DESCRICAO_ := 'CONTEUDO DO CAMPO: TODOS OS INDICES SÃO ATUALIZADOS AUTOMATICAMENTE'

  *----------------------------------------------------------*
  * SALVA ALTERAÇÕES DA TABELA
  *----------------------------------------------------------*
  NOME_TABELA->( DBCOMMIT() )

DBSETORDER(0)

Enviado: 30 Mai 2012 14:24
por alxsts
Olá!

Essa chamada de função é totalmente desnecessária. Todos os índices abertos são atualizados quando de uma inclusão de registro ou alteração de campos-chave.

Deve-se tomar o cuidado de manter todos os índices abertos, principalmente com o RDD DBFNTX. Já para o DBFCDX, se estiver configurado com AUTOPEN ativo, os índices são abertos automaticamente na abertura do respectivo DBF. Creio que o driver Six se comporte da mesma forma que o DBFCDX quanto a esta função.

DBSETORDER(0)

Enviado: 30 Mai 2012 14:27
por Jairo Maia
Olá Jelias,
jelias escreveu:Minha dúvida é quanto a necessidade do uso do DBSETORDER(0). [...] Isso é realmente necessário?
Não. Como foi dito acima, quando você salva rehostros num banco de dados, todos os indices ABERTOS são automaticamente atualizados.

Quando vc usa DBSetOrder(0), você trabalha com o banco de dados sem nenhum indice ativo. Para voce ativar um indice na área, precisa especificar sua ordem, ou seja, tipo: DBSetOrder(3), seleciona o indice aberto na area do banco de dados, e na ordem 3. A ordem é a ordem usada na sequência de abertura dos indices.

Se você usar o comando DBSeek("cConteudo"), numa aéa sem indice ativo, você receberá o erro de: Área não indexada.

DBSETORDER(0)

Enviado: 30 Mai 2012 17:48
por rochinha
Amiguinho,

A simples movimentação do ponteiro pode fazer com que ocorra esta atualização. A atualização de registros na tabela podem ocorrer:

- Se voce usar um SKIP
- Se voce usar um COMMIT

O dbSetOrder(0) pode provocar este procedimento inadivertidamente pois ao ser usado, outras engrenagens podem sofrem a ação do movimento. Mas ele não foi projetado para tal fim.

Sugestão é seguir o padrão. Usar comandos que foram feitos para o real intuito. Usar o dbSetOrder() para este fim é como bater pregos com martelo de bater carne. Funciona, mas não foi projetado para isto.

DBSETORDER(0)

Enviado: 30 Mai 2012 18:16
por jelias
Amigos,

Obrigado a todos pelo esclarecimento.

Abraço.
Júlio.