Wie löscht man den Index einer Datenbank ?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Wie löscht man den Index einer Datenbank ?

Beitrag von Hercules »

Hallo erst mal an alle!
Ich habe in der folgenden Prozedur den Inhalt einer Datenbank gelöscht:

Code: Alles auswählen

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! :D
Dateianhänge
DB.JPG
Zuletzt geändert von Lori am Di 21. Dez 2010, 22:44, insgesamt 1-mal geändert.
Grund: Highlighter

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von MmVisual »

EleLa - Elektronik Lagerverwaltung - www.elela.de

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von Hercules »

Hallo MyVisual, ich glaub den Befehl gibt es bei DBASE nicht :(
Oder hab ich da was falsch verstanden ?

am2
Lazarusforum e. V.
Beiträge: 116
Registriert: Di 21. Dez 2010, 09:59
OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
CPU-Target: 32 Bit

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von am2 »

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! :D


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

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von baba »

Hercules hat geschrieben:procedure TForm1.Button1Click(Sender: TObject);
begin
Dbf1.First;
While NOT Dbf1.EOF DO Dbf1.Delete;
end;


Ganz einfach ...

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Dbf1.Zap;
end;


Baba.

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von shokwave »

Hercules hat geschrieben:procedure TForm1.Button1Click(Sender: TObject);
begin
Dbf1.First;
While NOT Dbf1.EOF DO Dbf1.Delete;
end;


Damit werden die einzelnen Datensätze als gelöscht markiert, aber nicht gelöscht. Um die als gelöscht markierten Datensätze zu entfernen gibt es DBF1.PackTable. Welche Risiken das birgt, wurde schon erklärt.

Der Index(die Sortierereihenfolge) von Dbf-Dateien stehen in einer separaten Datei mit gleichen Name wie die Dbf, aber anderer Endung (z.B.: .mdx). Du müsstest nur die Datei löschen und den Index neu aufbauen.
mfg Ingo

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von af0815 »

shokwave hat geschrieben:Der Index(die Sortierereihenfolge) von Dbf-Dateien stehen in einer separaten Datei mit gleichen Name wie die Dbf, aber anderer Endung (z.B.: .mdx). Du müsstest nur die Datei löschen und den Index neu aufbauen.

Ich glaube, er will nicht den Indes neu aufbauen, sondern die automatische Nummerierung (Generator) zurücksetzen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von Hercules »

Hallo und schönen guten Tag an Alle.
Mir ist schon klar, was das für Auswirkungen hat, wenn ich den Index löschen würde.
Da hast Du schon recht, Andreas. Eigentlich will ich das Ganze ja nur verstehen.
Noch bin ich ja am testen, sonst macht man ja sowas sicher nicht.
Danke auch an baba, shokwave, MmVisual und af0815 für Eure Hilfe. :D
Sollten wir uns nicht mehr lesen, dann wünsche ich Euch allen und allen Anderen ein schönes,
besinnliches und ruhiges Weihnachsfest, alles Gute für 2011 und rutscht gut rein
in das Neue Jahr. :D
Hercules.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Wie löscht man den Index einer Datenbank ?

Beitrag von af0815 »

Hercules hat geschrieben:Noch bin ich ja am testen, sonst macht man ja sowas sicher nicht.

Ich scripte mir für das die Datenbank und Testdaten oder spiele für den Versuch ein Backup ein und mache die Versuche. Bei der zweiten Methode sieht man auch ob das Backup/Restore zuverlässig funktioniert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten