DBSETORDER(0)

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

DBSETORDER(0)

Mensagem 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.
Editado pela última vez por Pablo César em 30 Mai 2012 19:04, em um total de 1 vez.
Razão: O presente tópico foi movido da seção Harbour, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o Harbour.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

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

Mensagem 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() )
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

DBSETORDER(0)

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

DBSETORDER(0)

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

DBSETORDER(0)

Mensagem 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.
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.
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

DBSETORDER(0)

Mensagem por jelias »

Amigos,

Obrigado a todos pelo esclarecimento.

Abraço.
Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Responder