Entwickler-Ecke
Datenbanken - Komplette Tabelle leeren
alexschultze - Di 03.12.02 15:25
Titel: Komplette Tabelle leeren
hiho
ich habe eine kleine Datenbank, welche die aktuell angemeldeten User registriert. Da beim Start keine User angemeldet sind, soll die Tabelle jedes mal komplett geleert werden, aber nicht gelöscht.
Ich hab diverses probiert, aber irgendwie gabs immer Probleme. Was ist die 'saubere' Leerung einer Datenbank?
Quelltext
1: 2: 3: 4: 5:
| table2.Edit; //table2.ClearFields; datasource2.Enabled:=false; table2.Exclusive:=true; table2.EmptyTable; |
alex
LCS - Di 03.12.02 15:28
Hi
die einfachste Lösung wäre mittels TQuery und dieser SQL-Anweisung.
Quelltext
1:
| DELETE FROM DeineTabelle |
Gruss Lothar
Udontknow - Di 03.12.02 15:43
Es geht sogar ohne Query. Einfach Database.Execute('delete from tabelle').
alexschultze - Di 03.12.02 15:58
gibts nicht noch ne einfachere Variante a la
table2.clear ?
LCS - Di 03.12.02 15:59
@Udontknow
Das ist ja mal ein typischer Fall von: Man lernt nie aus :mrgreen: TDatabase verwende ich nun wirklich schon seit Jahren, aber die Methode ist mir noch nie aufgefallen.
:think: Guter Tipp
Gruss Lothar
Scrat - Mi 04.12.02 09:28
Hallo zusammen,
ich habe das auch mal ausprobiert (Tabelle leeren).
Aber ich bekomme eine Fehlermeldung.
Mein Quelltext:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if key = '1' then begin if MessageDlg('Sollen wirklich alle Bestellungen gelöscht werden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin Material_bestellung2.Richedit1.Lines.clear; Table1.DatabaseName:= 'c:\delphi\dynamische_infopost\'; Table1.TableName := 'Bestell.dbf'; Table1.open; Datsour1.Enabled:=false; Table1.Exclusive:=true; Table1.Database.Execute('delete from tabelle'). MessageDlg('Alle Bestellungen wurden gelöscht.', mtInformation, [mbOk], 0); end; |
Die Fehlermeldung:
[Fehler] Verwaltung.pas(144): Record, Objekt oder Klassentyp erforderlich
Danke im Vorraus
Gruß
Scrat
LCS - Mi 04.12.02 09:39
Hi
jetzt wärs natürlich noch ganz nett gewesen wenn du uns geschrieben hättest, welche Zeile Delphi da bemängelt :wink:. Zwei Fehlerchen hab ich aber gefunden.
1. Du versuchst eine Tabelle Exklusiv zu verwenden
nachdem du sie geöffnet hast. Das funktioniert nicht. Die Tabelle muss dazu geschlossen sein.
2. Ich nehme mal an du möchtest den Inhalt von BESTELL.DBF löschen. Dann musst du das natürlich auch mit SQL formulieren:
Gruss Lothar
Jagg - Mi 04.12.02 09:54
und wie geht das ohne SQL !
Table1.Delete ???
Jagg !
LCS - Mi 04.12.02 10:18
TTable.EmptyTable (Einschränkungen beachten)
Jagg - Mi 04.12.02 11:27
aber bevor man das aufruft muss man doch die tabelle schließen oder nicht ?
Jagg !
neojones - Mi 04.12.02 11:44
Ob mans schließen muss oder nicht kommt auf die zu Grunde liegende Datenbank an. Meistens reicht es, wenn man sie Exclusive öffnet. Bei mySQL geht es auch mitten im Laufenden Betrieb, solange kein LOCK auf die Tabelle gesetzt ist und die GRANTS ausreichen.
Jagg - Mi 04.12.02 12:35
wenn ich exclusive := true mache sagt er mir immer Tabelle in gebrauch !
dann muss ich sie doch schließen oder nicht,aber wenn ich es mache geht es dann auch nicht !
oder ist die tabelle noch woanders geöffnet !
alexschultze - Mi 04.12.02 14:41
vermutlich von der BDE?
alexschultze - Mi 04.12.02 14:46
also, soweit geht es bei mir (in dieser Reihenfolge):
Datasource2.Enabled:=false;
table2.close;
Table2.Exclusive:=true;
EmptyTable geht immer noch nicht
Udontknow - Mi 04.12.02 21:39
Hi!
Nun, wenn das alles nicht klappt, kann man es natürlich auch noch umständlich machen.
Quelltext
1: 2: 3:
| Table.First; While not Table.eof do Table.Delete; |
Cu, :)
Udontknow
LCS - Do 05.12.02 09:12
@alexschulte
Wenn's so wie du geschrieben hast nicht klappt, ist die Tabelle noch irgendwo anders geöffnet. Beispielsweise im Explorer der IDE. Zum Löschen mit EmptyTable muss die Tabelle Exklusiv zur Verfügung stehen. Ob sie beim Löschen geöffnet oder geschlossen ist spielt keine Rolle.
@Udontknow
Das funktioniert zwar, aber wenn du auf diese Art und Weise 10000 Datensätze löschen willst, die irgendwo auf einem Server liegen, hast du nen Bart bis er damit fertig ist.
Gruss Lothar
Udontknow - Do 05.12.02 10:17
LCS:
Klar ist das langsam. Ist ja auch nur eine Notlösung. Wenn halt nichts anderes klappt... :wink:
Cu,
Udontknow
alexschultze - Do 05.12.02 15:39
die eof Variante ist für mich voll und ganz in Ordnung ;) danke ;)
das ganze mit Exklusive etc.... mich nervt es auch *g*
Darum, danke UdOntKnow
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!