Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Index not found Exception

01.01.2007
{Q: How do I open a dBASE table without the required MDX file?
   I keep getting an "Index not found..." exception.}
 
{A: When you create a dBASE table with a production index (MDX), a
   special byte is set in the header of the DBF file.  When you
   subsequently attempt to re-open the table, the dBASE driver
   will read that special byte, and if it is set, it will also
   attempt to open the MDX file.  When the MDX file cannot be
   opened, an exception is raised.
 
   To work around this problem, you need to reset the byte (byte
   28 decimal) in the DBF file that causes the MDX dependency
   to zero.
 
   The following unit is a simple example of how to handle the
   exeption on the table open, reset the byte in the DBF file,
   and re-open the table.}
 
unit Fixit;
 
interface
 
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids;
 
type
  TForm1 = class(TForm)
    Table1: TTable;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
const
  TheTableDir = 'c:\temp\';
  TheTableName = 'animals.dbf';
 
procedure RemoveMDXByte(dbFile: string);
  { This procedure accepts a DBF file as a parameter.  It will patch}
  { the DBF header, so that it no longer requires the MDX file }
const
  Value: Byte = 0;
var
  F: file of byte;
begin
  AssignFile(F, dbFile);
  Reset(F);
  Seek(F, 28);
  Write(F, Value);
  CloseFile(F);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
  { This procedure is called in response to a button click.  It    }
  { attempts to open a table, and, if it can't find the .MDX file, }
  { it patches the DBF file and re-execute the procedure to        }
  { re-open the table without the MDX  }
begin
  try
    { set the directory for the table }
    Table1.DatabaseName := ThheTableDir;
    { set the table name }
    Table1.TableName := TheTableName;
    { attempt to open the table }
    Table1.Open;
  except
    on E: EDBEngineError do
      { The following message indicates the MDX wasn't found: }
      if Pos('Index does not exist. File', E.Message) > 0 then
      begin
        { Tell user what's going on. }
        MessageDlg('MDX file not found.Attempting to Open
          without Index.', mtWarning, [mbOK], 0);
        { remove the MDX byte from the table header }
        RemoveMDXByte(TheTableDir + TheTableName);
        { Send the button a message to make it think it was }
        { pressed again.  Doing so will cause this procedure to }
        { execute again, and the table will be opened without }
        { the MDX }
        PostMessage(Button1.Handle, cn_Command, bn_Clicked, 0);
      end;
  end;
end;
 
end.

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php