Недавно добавленные исходники

•  TDictionary Custom Sort  3 227

•  Fast Watermark Sources  2 992

•  3D Designer  4 751

•  Sik Screen Capture  3 259

•  Patch Maker  3 469

•  Айболит (remote control)  3 530

•  ListBox Drag & Drop  2 904

•  Доска для игры Реверси  80 799

•  Графические эффекты  3 843

•  Рисование по маске  3 172

•  Перетаскивание изображений  2 544

•  Canvas Drawing  2 674

•  Рисование Луны  2 501

•  Поворот изображения  2 094

•  Рисование стержней  2 121

•  Paint on Shape  1 525

•  Генератор кроссвордов  2 183

•  Головоломка Paletto  1 731

•  Теорема Монжа об окружностях  2 159

•  Пазл Numbrix  1 649

•  Заборы и коммивояжеры  2 017

•  Игра HIP  1 262

•  Игра Go (Го)  1 201

•  Симулятор лифта  1 426

•  Программа укладки плитки  1 179

•  Генератор лабиринта  1 512

•  Проверка числового ввода  1 297

•  HEX View  1 466

•  Физический маятник  1 322

•  Задача коммивояжера  1 357

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Обработка исключения index not found



Как мне открыть таблицу dBASE без требуемого MDX-файла? Я постоянно получаю исключение "Index not found..." (индекс не найден).

Во время создания таблицы dBASE с production-индексом (MDX) в заголовке DBF-файла устанавливается специальный байт. При последующем открытии таблицы, dBASE-драйвер читает этот специальный байт и, если он установлен, он также пытается открыть файл MDX. Если попытка открыть файл MDX заканчивается неудачей, возникает исключительная ситуация.

Для решения этой проблемы вам необходимо обнулить этот байт (28-й десятичный байт) в файле DBF, избавляющий таблицу от зависимости MDX-файла.

Нижеприведенным модуль является простым примером того, как можно обработать исключение при открытии таблицы, обнулив этот байт в DBF-файле и вновь открыв таблицу.


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);
{ Данная процедура использует в качестве параметра имя файла DBF   }
{ и исправляет его заголовок для того, чтобы не требовать MDX-файл }
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);
{ Данная процедура вызывается в ответ на нажатие кнопки. Она }
{ пытается открыть таблицу и, если файл .MDX не найден,      }
{ DBF-файл исправляется и управление вновь передается данной }
{ процедуре для повторного открытия таблицы, но уже без MDX  }
begin

  try
    { устанавливаем каталог таблицы }
    Table1.DatabaseName := ThheTableDir;
    { устанавливаем имя таблицы }
    Table1.TableName := TheTableName;
    { пытаемся открыть таблицу }
    Table1.Open;
  except
    on E: EDBEngineError do
      { Нижеследующее сообщение указывает на то, что файл MDX не найден: }
      if Pos('Index does not exist. File', E.Message) > 0 then
      begin
        { Сообщаем пользователю о наличии проблемы. }
        MessageDlg('Файл MDX не найден. Попытка открытия
          без индекса.', mtWarning, [mbOk], 0);
          { удаляем байт MDX из заголовка таблицы }
          RemoveMDXByte(TheTableDir + TheTableName);
          { Посылаем кнопке сообщение для эмуляции ее нажатия. }
          { Этот трюк заставит данную процедуру выполниться    }
          { повторно, и таблица будет открыта без файла MDX    }
          PostMessage(Button1.Handle, cn_Command, bn_Clicked, 0);
      end;
  end;
end;

end.





Похожие по теме исходники

IMod (обработка изображений)

Askue (обработка XML)

Yet Another Sokoban

Notepad GNU

 

Notepad SE

Delphi Notes Splitter

Notebook Battery Info

Service Notifyer

 



Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте