Ir para conteúdo
Fórum Script Brasil
  • 0

Indices Para Dbf


José Luiz

Pergunta

Quando eu crio índices através do DataBase Desktop, os arquivos tem a extensão NDX, e quando eu crio estes índices de dentro do programa, os índices são MDX.

Como fazer para que os índices de dentro do programa sejam NDX ?

Por exemplo :

A rotina abaixo irá criar um arquivo ARQTESTE.DBF e um arquivo ARQTESTE.MDX.

Eu gostaria que fossem criados os arquivos

ARQTESTE.DBF e os arquivos TESTE_01.NDX e TESTE_02.NDX

procedure TForm1.FormCreate(Sender: TObject);

var

NovaTabela : TTable ;

begin

NovaTabela := TTable.Create ( Form1 ) ;

With NovaTabela do

Begin

Active := False ;

TableName := 'ARQTESTE' ;

TableType := ttDBase ;

FieldDefs.Clear ;

FieldDefs.Add ( 'NOME' , ftString, 30, False );

FieldDefs.Add ( 'CPF' , ftString, 11, False );

FieldDefs.Add ( 'ENDERECO', ftString, 30, False );

FieldDefs.Add ( 'TELEFONE', ftString, 8, False );

IndexDefs.Clear ;

IndexDefs.Add ( 'TESTE_01', 'NOME', [] );

IndexDefs.Add ( 'TESTE_02', 'CPF' , [] );

CreateTable ;

end ;

end;

Obrigado.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá...

Já passei por isso há muito tempo atrás...

Veja... se você precisa abrir tabelas usando o DBaseIII+, tudo bem... continue usando índices NDX

Agora, se você precisa abrir as tabelas usando o Clipper, seria melhor usar MDX

E se precisar abrir as tabelas usando o VisualFoxPro, seria melhor usar CDX

Para resolver essa encrenca de uma vez por todas, eu adotei a indexação apenas via sql:

With Query1 do Begin;
  Close;
  SQL.Clear;
  SQL.Add('create table clientes');
  SQL.Add('(');
  SQL.Add('idcliente autoinc,');
  SQL.Add('nome char(30),');
  SQL.Add('cpfcnpj char(16)');
  SQL.Add(')');
  ExecSQL;`
  Close;
  SQL.Add('create index nome on clientes (nome)');
  ExecSQL;`
  Close;
  SQL.Clear;
  SQL.Add('create index cpfcnpj on clientes (cpfcnpj)');
  ExecSQL;`
  Close;
End;{With Query}

Depois disso, você tem uma tabela clientes.dbf e um arquivo clientes.mdx com os dois indices dentro dele (nome e cpjcnpj)

Verifique as propriedades do "alias"... (lá no DBExplorer ou BDEAdministrator) assegure-se que seja do tipo DBase

Sugiro que você adote gravar, alterar, excluir os dados apenas por comandos SQL... com isso, nunca (isso é meio forte de dizer, mas deve haver uns cinco anos que não vejo um índice dentro de um MDX ser corrompido) terá problemas de arquivo de índice corrompido;

Ah... você pode comparar, pelo próprio DBExplorer, a pesquisa em um arquivo indexado das três formas: NDX, CDX e MDX

Depois de criar e indexar uma tabela com estes formatos, esperimente executar uma query simples de consulta em um arquivo bem grande (com uns 256mil registros) por exemplo... verá que a velocidade é muito maior nos indices MDX, depois nos CDX e, por ultimo, nos NDX

Em tempo: se optar pelos MDX, experimente criar, sempre, um campo autoincremento em suas tabelas DBF... assim o Delphi vai formata-la sempre como do tipo Visual DBase7, que só gera indice MDX

Já as DBaseIII+ e DBaseIV (acho eu) podem ter NDX...

Ok?

Espero ter ajudado...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...