Wie kann man den Index am besten und einfachsten wieder herstellen. Gibt es
dafür eine Funktion in D5
Vielen Dank
Ingo
Die einfachste Methode ist, alle Alternativ-Keys auf der Platte zu
löschen (Tabelle.yg1, nicht Tabelle.db oder Tabelle.px) und per SQL
(z.B.) die Indizes (alle, außer Primärindex) wieder neu zu erstellen.
Geht allerdings nur, wenn der Primärkey und die Tabelle noch ok sind.
Alternativ kann auch das Tabellenreparatur-Util von Coral-Paradox
benutzt werden. Die älteren PDox-Versionen ignorieren beim "Reparieren"
leider den eingestellten Sprachtreiber.
PDox benutzt dazu eine DLL, die Du (notfalls) auch direkt benutzen
kannst. Heißt irgendwas mit "TUTil*.DLL".
MfG,
Sven.
> Wie kann man den Index am besten und einfachsten wieder herstellen. Gibt
es
> dafür eine Funktion in D5
Einfach alle Daten außer *.px, *.db, *.mb der entsprechenden Datenbankdatei
löschen. Sollte es dann immer noch nicht funktionieren, einfach noch die
"px"-Datei löschen.
MfG,
Arnd
z.B. geht nicht "Datei ist beschädigt, aber nicht der Vorspann"
Wenn es noch geht, steig auf Interbase um.
Heiko
"Ingo Eppmann" <iepp...@web.de> schrieb im Newsbeitrag
news:adtg75$vet$00$1...@news.t-online.com...
>Wie kann man den Index am besten und einfachsten wieder herstellen. Gibt es
>dafür eine Funktion in D5
Bei mir hat - allerdings unter D6 folgendes funktioniert.
Dabei arbeite ich mit einer Mastertable, bei der ich nachschaue, was es für
Indexe gibt, und einer Clienttable, die an der Beschädigten Datei die Indexe
setzt.
Natürlich kann man die Indexdefinitionen auch direkt als Strings angeben. Aber da
ich sowieso immer noch die leeren Basistabellen habe, ist es so flexibler.
procedure TDatenreparaturForm.AlteIndexeLoeschen;
begin
LoeschAllFiles( Path, '*.px' );
LoeschAllFiles( Path, '*.val' );
LoeschAllFiles( Path, '*.xg?' );
LoeschAllFiles( Path, '*.yg?' );
end;
procedure TDatenreparaturForm.DateienNeuIndexieren;
var
found : boolean;
begin
found := FindFirstFiles( Path + '\Muster\*.db' );
repeat
if FileExists( Path + '\' + FileData.cFileName ) then
begin
TableMaster.TableDateiName := FileData.cFileName;
TableClient.TableDateiName := FileData.cFileName;
IndexTable;
end;
found := FindNextFiles;
until ( found = False );
end;
procedure TDatenreparaturForm.IndexTable;
var
I : integer;
IndexName : String;
IndexString : String;
begin
TableMaster.IndexDefs.Update;
// Primärindex
for I := 0 to TableMaster.IndexDefs.Count - 1 do
begin
if Trim( TableMaster.IndexDefs.Items[I].Name ) = '' then
begin
IndexString := TableMaster.IndexDefs.Items[I].Fields;
IndexName := '';
TableClient.AddIndex(IndexName, IndexString, [ixPrimary]);
end;
end;
// Sekundärindex
for I := 0 to TableMaster.IndexDefs.Count - 1 do
begin
if Trim( TableMaster.IndexDefs.Items[I].Name ) <> '' then
begin
IndexString := TableMaster.IndexDefs.Items[I].Fields ;
IndexName := TableMaster.IndexDefs.Items[I].Name;
TableClient.AddIndex(IndexName, IndexString, []);
end;
end;
end;
// Viel Erfolg wünscht Steffen
--
__________________________________________________________
News suchen, lesen, schreiben mit http://newsgroups.web.de
>procedure TDatenreparaturForm.AlteIndexeLoeschen;
>begin
> LoeschAllFiles( Path, '*.px' );
// > LoeschAllFiles( Path, '*.val' );
> LoeschAllFiles( Path, '*.xg?' );
> LoeschAllFiles( Path, '*.yg?' );
>end;
natürlich in Deinem Fall die .val NICHT löschen.
Man sollte doch nicht so einfach Quelltext kopieren.
Gruß Steffen
Gruß Ingo
"Ingo Eppmann" <iepp...@web.de> schrieb im Newsbeitrag
news:adtg75$vet$00$1...@news.t-online.com...