Alle Einträge aus DBGrid/Datenbank löschen?
-
oder
TRUNCATE TABLE tabellenname
-
Ähmm, schon wieder Bahnhof...
Keine Ahnung von SQL... und SQL-Anweisungen...
Datenbank-Frontend... ist die DBGrid-Komponente?
TQuery oder äquivalente Komponenten... TQuery, nie benutzt. Äquivalente Komponenten: Ich hab da noch ne Table- und ne Data-Source-Komponente im Angebot, die damit zu tun haben, aber keine Ahnung wer da für wen was bereitstellt oder wer wen wann steuert...!?!
Ich bin damit hoffnungslos überfordert... Ich bin nur dafür verantwortlich, dass die Daten in die Ursprungs-Datei kommen und in einem bestimmten Format bereitgestellt werden - mit der Datenbanksache hab ich nix zu tun, hatte ich auch noch nie... bin ja auch Elektrotechniker und kein Informatiker
Wo muss ich jetzt
DELETE FROM Table1hinschreiben und was passiert dadurch???
-
Machen wir es anders:
Ich hatte mir ja schon einen Trick einfallen lassen, bin aber nicht zum Ergebnis gekommen: Ich kann ja einen DBNavigator-Klick simulieren, wodurch ein Eintrag gelöscht wird:
void __fastcall TForm2::ButtonDeleteAllClick(TObject *Sender) { DBNavigator1->BtnClick(nbDelete); } //---------------------------------------------------------------------------Was ich jetzt noch wissen müsste ist, wieviel Einträge im DBGrid sind, dann könnte ich den Knopfdruck in einer Schleife autmatisieren und mir wäre geholfen!
Also: wie bekomme ich die Anzahl der Einträge (Zeilen) im DBGrid heraus? (daran bin ich letztens gescheitert)
-
In dem Startmenü Eintrag vom BCB3 müßte es die Einträge 'Datenbank-Explorer' und 'Datenbankoberfläche' geben.
Mit denen kannst du dann auf die Datenbanken (auch ohne eigenes Programm) zugreifen.
Du mußt dann nur deine Datenbank öffnen und kannst dann die SQL-Befehle eingeben:
- zum Anzeigen: SELECT * FROM table
- zum Löschen aller Daten: DELETE FROM table
- zum Löschen v. bestimmten Daten: DELETE FROM table WHERE conditionWelche Datenbank verwendet ihr denn?
-
Hallo
Die Anzahl der Zeilen eines DBGrids entspricht der Anzahl der Datensätze im DataSet, also TTable::RecordCount.
Es sollte aber eigentlich reichen immer den ersten Datensatz zu löschen, schließlich wird das Grid nach jedem Löschen aktualisiert.Dir ist aber schon klar das das eine sehr schlechte Variante ist? Arbeite dich lieber in die Grundlagen von SQL und den Datenbank-Komponenten ein.
bis bald
akari
-
Th69 schrieb:
In dem Startmenü Eintrag vom BCB3 müßte es die Einträge 'Datenbank-Explorer' und 'Datenbankoberfläche' geben.
Ja, das hab ich schonmal gesehen.
Th69 schrieb:
Mit denen kannst du dann auf die Datenbanken (auch ohne eigenes Programm) zugreifen.
Naja, ich würds bequemerweise schon gerne im Programm machen...
Th69 schrieb:
Du mußt dann nur deine Datenbank öffnen und kannst dann die SQL-Befehle eingeben:
- zum Anzeigen: SELECT * FROM table
- zum Löschen aller Daten: DELETE FROM table
- zum Löschen v. bestimmten Daten: DELETE FROM table WHERE conditionIch komme drauf zurück, wenn nötig, Danke!
Th69 schrieb:
Welche Datenbank verwendet ihr denn?
Sag ich dir gerne! Wo steht das?
akari schrieb:
Die Anzahl der Zeilen eines DBGrids entspricht der Anzahl der Datensätze im DataSet, also TTable::RecordCount.
Ähm... daran scheiterts schon. Wenn ich mit
int ZeilenAnzahl= DataModule7->Table1->RecordCount;die Zeilenanzahl hole, steht da 59779 drin, das DBGrid wird aber momentan leer angezeigt!?!
akari schrieb:
Es sollte aber eigentlich reichen immer den ersten Datensatz zu löschen, schließlich wird das Grid nach jedem Löschen aktualisiert.
Weißer Mann spricht in Rätseln zu Programmier-Noob-Indianer vom Stamme VerflixterCode...

akari schrieb:
Dir ist aber schon klar das das eine sehr schlechte Variante ist?
Ja, ich will nur Datenbank und DBGrid mal schnell leeren können, damit ich meine eigenen Tests hier vernünfig über die Bühne bekomme...
akari schrieb:
Arbeite dich lieber in die Grundlagen von SQL und den Datenbank-Komponenten ein.
Du bist gut... Ich hab noch nicht mal GUI-Programmierung und C++ richtig verstanden, da soll ich mich in Datenbanken einarbeiten.
Das ist nicht mein Gebiet und wird es auch nicht werden.
-
Ich versuche nochmal den Ablauf zu beschreiben: Ich habe Daten in einer Datei vorliegen. Diese Datei öffne ich und packe die Daten Datensatzweise in eine Struktur. Die Struktur wird danach mit
const TVarRec Values[]= { //... }; const int nCount= sizeof(Values)/ sizeof(Values[0]); Table1->InsertRecord(Values, nCount-1);in Table1 eingetragen (Table1 ist die Schnittstelle zur Datenbank?). Das Ganze geschieht sooft, wie ich in einem Edit vorher angebe (damit nicht immer die gesamte Datei eingetragen wird). Zur Zeit funktioniert aber nichmal das. Ich bekomme bei InsertRecord immer einen Indexfehler(exception), wenn ich 2 Datensätze in Table1 eintragen lassen will...
Woher jetzt das DBGrid seine Daten zum Anzeigen nimmt und warum in Table1 soviel Records sind, aber keine im DBGrid- keine Ahnung.
-
Ein TQuery auf die Form.
Query1->SQL->Clear(); Query1->SQL->Add("DELETE FROM Table1;"); Query1->ExecSQL();
-
Gut, ich habe jetzt (da nix mehr ging und mir bei jeder Operation nur noch Indexfehler-exceptions um die Ohren geflogen sind) mal Th96's Weg verfolgt: In der Datenbankoberfläche die *.db geöffnet (Datei->Öffnen->Tabelle) und geleert (Tools->Tabellenoperationen->Leeren...). Jetzt kann ich wieder Werte aus der Datei eintragen lassen und "Alles löschen" funktioniert auch
:void __fastcall TForm2::ButtonDeleteAllClick(TObject *Sender) { int ZeilenAnzahl= DataModuleXYZ->Table1->RecordCount; for(; ZeilenAnzahl>0; ZeilenAnzahl--) { DBNavigator1->BtnClick(nbDelete); } } //---------------------------------------------------------------------------Und die Lösung von db_indianer (anscheinend ein wissender Krieger vom Stamme DatenbankAhoi) einfach in die Button-Methode (plus TQuery auf die Form) bringt dasselbe Ergebnis? Wird das DBGrid so auch gleich mitgeleert?
-
Und die Lösung von db_indianer (anscheinend ein wissender Krieger vom Stamme DatenbankAhoi) einfach in die Button-Methode (plus TQuery auf die Form) bringt dasselbe Ergebnis? Wird das DBGrid so auch gleich mitgeleert?
Ja und das sogar erheblich schneller.