Как открыть индексированную таблицу dBase, если отсутствует файл индекса
Материал из DRKB
Как открыть индексированную таблицу dBase, если отсутствует файл индекса[править | править код]
процедуру для физического удаления признака индексации в самом dbf-файле и после её применения добавлять индексы заново.
Для этого в заголовок файла dbf по смещению 28(dec) записываешь 0.
По другому никак не выходит(я долго бился)- вот для Paradox таблиц все Ok.
С помощью BDE Callbacks. Примеp для Delphi 2.0, на первом не проверял:
unit Callback;
interface
uses BDE, Classes, Forms, DB, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
CBack: TBDECallback; // определение BDE CallBack
CBBuf: CBInputDesc; // просто буфер
function CBFunc(CBInfo: Pointer): CBRType; // Callback-функция
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
Session.Open; // В это время сессия ещё не открыта
CBack := TBDECallback.Create(Session {Hапример}, nil, cbINPUTREQ, @CBRegBuf,
SizeOf(CBBuf), CBFunc, False); // Определили Callback
Table1.Open;
//^^^^^^^^^^^ - здесь возможна ошибка с индексом, etc.
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CBack.Free; // Освобождаем CallBack
end;
function TForm1.CBFunc(CBInfo: Pointer): CBRType;
begin
with PCBInputDesc(CBInfo)^ do
case eCbInputId of
cbiMDXMissing {, cbiDBTMissing - можно ещё и очищать BLOB-поля}:
begin
iSelection := 3; // Hомеp варианта ответа (1-й - открыть только
// для чтения, 2-й - не открывать, 3-й - отсоединить индекс).
// Возможный источник неприятностей: а вдруг в последующих версиях
// BDE номеpа будут другими?
Result := cbrCHKINPUT; // Обрабатывать введённый ответ
end;
end;
end;
end.
PS: конечно, это лишь примеp, делающий минимум необходимого. В рамках данного письма невозможно дать какое-то описание BDE Callbacks. Информацию я взял из BDE32.HLP, BDE.INT и DB.PAS. В VCL.HLP совсем ничего нет по этому поводу.
Вообще, руки бы отоpвал тем, кто писал справку по Дельфям: я неделю мучался с сабжем, пока случайно не набрёл на Callbacks.
Author: Nomadic
Source: http://delphiworld.narod.ru/
ID: 02716