Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Paradox7 Tabelle zurücksetzen (https://www.delphipraxis.net/111518-paradox7-tabelle-zuruecksetzen.html)

scuby 4. Apr 2008 16:23

Datenbank: Paradox • Version: 7 • Zugriff über: DBE / SQL

Paradox7 Tabelle zurücksetzen
 
Hallo zusammen,

ich denke diese Frage wurde sicherlich schon mal beantwortet, leider konnte ich über Suche nichts finden, daher habe ich einfach mal ein neues Topic aufgemacht...

Folgendes habe ich vor:

1.) Löschen aller Datensätze aus einer Paradox7 Tabelle
2.) Zurücksetzen der Tabellenid

Delphi-Quellcode:
begin
if Form1.Label4.Caption <> '2' then showmessage('Sie sind nicht berechtigt diese Funktion zu nutzen!') else
begin
 if messagedlg('Sind sie sicher, dass Sie alle Daten loeschen wollen?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
 begin
  with Query1 do
  begin
    Close;
    SQL.Text := 'DELETE FROM Studenten';
    ExecSQL;
  end;
end;
end;
end;
Mein Code zum Löschen aller Datensätze sieht momentan wie oben gezeigt aus.
Wenn ich diese Prozedur ausführe, werden auch alle Datensätze gelöscht. Lege ich nun einen neuen Datensatz an, so wird die ID aber fortgeführt. Wie bekomme ich es hin, das die ID wieder bei 1 startet?

Bsp.:

1 alter Datensatz
2 alter Datensatz
3 alter Datensatz
4 alter Datensatz
5 alter Datensatz
6 alter Datensatz
LÖSCHUNG aller Daten
nun soll die ID wieder bei 1 anfange....

LG
Scuby

shmia 4. Apr 2008 16:28

Re: Paradox7 Tabelle zurücksetzen
 
Die ID von AutoInc-Felder wird mit dem Löschen nicht zurückgesetzt.
Die Tabelle enthält einen internen Generator, der von Aussen nicht zugänglich ist.
Im Grunde ist das auch nicht nötig; Hauptsache die ID ist immer eindeutig.

Andernfalls gibt es 2 Möglichkeiten:
1.) AutoInc-Feld in ein normales Integer-Feld ändern (mit Datenbankoberfläche) und speichern
wieder zurück nach AutoInc-Feld ändern
2.) Tabelle komplett löschen und neu anlegen

Beide Methoden sind problematisch, wenn es Beziehungen zum ID-Feld gibt.

Thanatos81 4. Apr 2008 16:44

Re: Paradox7 Tabelle zurücksetzen
 
Also wenn wirklich alle Datensätze gelöscht und das AutoInc wieder auf 1 gesetzt werden soll, würde ich auch definitiv zum Löschen der Tabelle und neu anlegen raten. Gerade bei vielen Datensätzen dürfte das auch schneller gehen und vor allem ist der Platz wieder frei. Denn Paradox-Tabellen schrumpfen nicht nach einem Löschvorgang, sondern erst wenn man die Tabellen "packt"m zumindest wenn ich mich noch recht erinnere.

DeddyH 4. Apr 2008 17:27

Re: Paradox7 Tabelle zurücksetzen
 
Wieso soll eigentlich die ID wieder zurückgesetzt werden?

FrankJ28 7. Apr 2008 18:12

Re: Paradox7 Tabelle zurücksetzen
 
Hallo,
ganz einfach, wenn man den Header einer Paradox-Tabelle kennt ;-).

procedure ResetAutoInc(Dateiname:string);
var myStream : TFileStream;
buffer : LongInt;
begin
buffer:=0;
mystream:=TFileStream.Create(Dateiname,fmOpenWrite + fmShareExclusive);
mystream.Seek(73,soFromBeginning);
mystream.WriteBuffer(buffer,4);
mystream.free;
end;

Ciao
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz