Как пересоздать индексы?

procedure TForm1.Button4Click(Sender: TObject);
var
 aExclusive, aActive: Boolean;
begin
 with Table1 do
 begin
  aActive := Active;
  Close;
  aExclusive := Exclusive;
  Exclusive := True;
  Open;
  Check(DbiRegenIndexes(Table1.Handle));
  Close;
  Exclusive := aExclusive;
  Active := aActive;
  Check(DbiSaveChanges(Table1.Handle));
 end;
end;

As when calling any BDE API function, the BDE API wrapper unit BDE (for Delphi 1, the units DbiTypes, DbiErrs, and DbiProcs) must be referenced in the Uses section of the unit from which the call is to be made. The BDE API function DbiSaveChanges, used here, forces any data changes in memory buffer to be written to disk at that point.
Another way to handle this situation -- if you know at design-time all the indexes that will exist for the table -- would be to iterate through the items in the TIndexDefs object of the TTable component, delete each index (DeleteIndex method), and then add all needed indexes back (AddIndex method).

procedure TForm1.Button3Click(Sender: TObject);

var

 aName: string;

 i: Byte;

 aExclusive, aActive: Boolean;

begin

 with Table1 do

 begin

  aActive := Active;

  Close;

  aExclusive := Exclusive;

  Exclusive := True;

  IndexDefs.Update;

  i := IndexDefs.Count;

  while i > 0 do

  begin

  aName := IndexDefs.Items[i - 1].Name;

  DeleteIndex(aName);

  Dec(i);

  end;

  AddIndex('', 'MainField', [ixPrimary]);

  AddIndex('Field1', 'Field1', []);

  AddIndex('Field2', 'Field2', []);

  IndexDefs.Update;

  Exclusive := aExclusive;

  Active := aActive;

  Check(DbiSaveChanges(Table1.Handle));

 end;

end;

Взято с Delphi Knowledge Base: http://www.baltsoft.com/

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...