Hercules hat geschrieben:Hallo erst mal an alle!
Ich habe in der folgenden Prozedur den Inhalt einer Datenbank gelöscht:
procedure TForm1.Button1Click(Sender: TObject);
begin
Dbf1.First;
While NOT Dbf1.EOF DO Dbf1.Delete;
end;
Das hat zwar funktioniert, wenn ich aber wieder neue Sätze einfüge, dann
zählt der Index weiter, hier im Beispiel ID = 30. Ich würde aber gern wieder mit 0 anfangen.
Kann mir da jemand helfen ?
Gruß Hercules, und allen ein frohes Weihnachtsfest und einen guten Rutsch!
Tut mir leid, aber ich fürchte, Du bist auf dem Holzweg.
1. Normalerweise bleiben IDs, man fängt (außer zu Testzwecken) nicht wieder von vorn an. Hintergrund: ID steht für identitifizieren. Sollte irgendwo extern noch ein solcher Datensatz rumdümpeln, dann hast Du ein Problem (angenommen, jemand hat sich die Tabelle gestern ausgedruckt, Meier hat die ID 3. Du löscht heute die Daten, fängst vorn an und jetzt bekommt Müller die 3. Morgen bekommst Du einen Anruf, was denn los sei: Wieso bekommt Meier plötzlich 10000€ Gehalt und Müller nur noch 500€. Wenn die 3 nicht mehr existiert, dann weißt Du sofort: Moment mal, ich habe hier gar keinen mit der ID 3.
2. Es hängt sehr vom Datenbanksystem ab, wie diese fortlaufenden Zahlen erzeugt werden. Oracle beispielsweise sieht vor, dass Sequenzen benutzt werden. Du fragst also eine Sequenz ab und erhältst einen Wert. Dieser Wert wird (typischerweise) von dieser Sequenz nie wieder verwendet, egal, ob Du letztlich einen Datensatz anlegst, oder nicht. Um diese Sequenz von vorn loslaufen zu lassen, könntest Du sie löschen und neu bauen. Wie es andere DB- Systeme (insbesondere das von Dir verwendete) handhaben, weiß ich nicht.
3. Im Normalfall sind Datenbanken Multi- User- Systeme. Wenn ein Programm sagt, dass es eine neue Nummer haben will, diese aber erst ein paar Sekunden später in einen Datensatz einfügt, ein anderes widerum beschließt, in der Zwischenzeit die Daten zu löschen und den Zähler von vorn anfangen zu lassen, dann kann es leicht passieren, dass das erste Programm seinen Datensatz mit der ID 30 in eine frisch gelöschte Datenbank schreibt, der Zähler aber wieder vorn beginnt. Irgendwann wird dann vermutlich auch die 30 erreicht werden und das System meldet einen Konflikt, den sich keiner mehr erklären kann.
Also wahrscheinlich läßt sich Deine Frage nicht zufriedenstellend beantworten, es sei denn, Du schilderst ein Szenario, bei dem es auf das eine oder andere Problem nicht ankommt.
Andreas