Código
Quem trabalha com DBF's já encontrou problemas para criar índices compostos, ou seja,
um índice que tenha mais de um campo, em tempo de execução.
Isto ocorre por dois motivos, embora exista na internet documentação sobre o assunto,
dizendo ser possível, ainda não encontrei ninguem que tenha tido sucesso nesta tarefa.
O outro motivo é a existencia de um parâmetro não documentado, necessário para
arquivos DBF's ixExpression que informa o Delphi que se trata de um índice com mais de
um campo.
Como trabalhar com DBF's é comum para a maioria dos programadores que vem do
Clipper, acho interessante solucionar este problema da melhor forma possível.
assim a criação do índice fica para logo depois da criação da tabela,como mostra o
segmento de codigo abaixo.
}
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, DB, DBTables;
procedure TForm1.Button1Click(Sender: TObject);
var
Table1 : TTable;
begin
{ Criar arquivos }
Table1 := TTable.create(Application);
{ Cria arquivo }
with Table1 do
begin
Active := False;
DatabaseName := 'C:';
TableName := 'teste';
TableType := ttdBASE;
with FieldDefs do
begin
Clear;
Add('Name1', ftString, 20, False);
Add('Name2', ftString, 20, False);
Add('Name3', ftString, 20, False);
Add('Name4', ftString, 20, False);
end;
CreateTable;
AddIndex('Indice1', 'Name1 + Name2', [ixExpression]);
AddIndex('Indice2', 'Name2 + Name3', [ixExpression]);
AddIndex('Indice3', 'Name3 + Name4', [ixExpression]);
end;
end;
// Na prática, criar os índices com AddIndex() logo após CreateTable,
// não vai influenciar em nada o seu programa.
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009