Usuwanie indeksów z Table (dbf)

0

Witam.
Mam plik .dbf i poniższą procedurą dorabiam sobie indeks , powstaje plik .mdx- tu wszystko działa ok.

procedure TForm1.Button1Click(Sender: TObject);
var
ATable: TTable;
begin
Table1.Close;
ATable := TTable.Create(nil);
with ATable do
try
TableName := 'data\artykuly.dbf';
Exclusive := TRUE;
Open;
IndexDefs.Clear;
AddIndex('Katidx','Nr_katal',[ixExpression]);
finally
ATable.Close;
Exclusive:=False;
ATable.Free;
end;
end;

Pytanie : jak po wykasowaniu pliku .mdx skasować informacje w pliku .dbf ,że .mdx istnieje.
Prościej : kasuje .mdx uruchamiam ponownie procedurę tworzenia indeksów i w linii Open wywala mi:
'...Index does not exist. File c:...\artykuly.mdx'
Podstawiam nowy plik .dbf i znów raz mogę stworzyć dla niego plik indeksowy .mdx.
Czyli w dbf jest zapisana informacja że został utworzony mdx - jak ją skasować?
Przestawienie IndexDefs.Clear przed Open nic nie zmienia.
Na formie do eksperymetów mam tylko Table1 i Button1.
Pozdrawiam i dziękuję za wszelkie sugestie.
R.J.

0

poszukaj bo jest tego od metra
hint: trzeba ustawić któryś bajt w pliku dbf

0

dla leni

Krzysztof Szyszka na pl.c.l.d napisał(a)

Musisz wyzerowaæ 28 bajt nag³ówka bazy. Mo¿esz to zrobiæ tak:

procedure Zeruj;
var
F: File of Byte;
B: Byte;
begin
AssignFile(F, 'Baza.DBF');
Reset(F);
Seek(F, 28);
B := 0;
Write(F, B);
CloseFile(F);
end;

0

Witam.
Szukałem co prawda jakiejś wbudowanej funkcji odwrotnej do AddIndex (coś w stylu Table.DeleteIndex ale ta w moim wypadku nie działa) - nie chciałem bezpośrednio grzebać w nagłówku pliku ale skoro inne rozwiązanie nie jest znane to dobre jest każde inne działające.
Dziękuje i pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1