Datenbankinhalt löschen

Rosikopter

Mitglied
Wie kann ich den Inhalt einer Datenbank (mit ca. 20 Datenbanktabellen) bei jedem beenden eines Programmes löschen, das ich jedesmal beim Programmstart mit einer leeren Datenbank beginnen kann.
 
Servus!

Mit VBA in Access...

Dim rs as new adodb.recordset

with rs
.ActiveConnection = CurrentProject.Connection
.LockType = AdLockOptimistic
.CursorType = adOpenDynamic
.Open "DROP DATABASE " &DBNAME

.update
end with

//geht auch mit...

DoCmd.RunSQL "DROP DATABASE " & DBNAME

damit löschst du die komplette Datenbank mit allen Tabellen un deren Inhalt... bei jedem Programmstart müsstest du diese aber auch wieder aufbauen... mit "CREATE DATABASE BLABLABKL" und dann musst du auch die Tabellen wieder neu anlegen...

-----

Wenn du nur die Inhalte von allen Tabellen löschen willst, dann benutz als "AbfrageString" doch einfach "DELETE * FROM TABELLE1, DELETE * FROM TABELLE2 ...." usw.

Somit erhälst du tabellenstruktur bei und löschst nur die "Inhalte"...

Gruss Tom
 
Servus!

Fast...

Versuchs mal so:

Dim conn as new AdoDB.Connection
//Bei ner Access DB
conn.Open "Provider=Microsoft.Jet.OLEDB.3.51;" && _
"Data Source =" & App.Path & "\myDB.mdb","username","passwort"
Hierbei muss sich die Access mdb. Datei im selben Verzeichnis wie die vom VB Editor erzeugte exe Datei liegen


//Bei nem SQL Server
conn.Open "Provider=SQLOLEDB;USER ID = username;" &_
"Catalog=meineDB; Data Source=localhost;"

Set rs = New ADODB.Recordset

with rs
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open "Select * from tblBLABLABLA", conn
end with

Müsste so gehen...

Denk aber dran, dass du noch nen Verweis zu der Ado Bibliothek setzten musst ...

Extras->Verweise->Ado ActiveX Data Objects 2.X Library
->Microsoft ADO Ext. 2.6 for DDL and Security

Gruss Tom
 
Zuletzt bearbeitet:
Ich bin nicht ganz sicher, aber DROP DATABASE funktioniert meines Wissens nach mit Access nicht. Kann aber auch sein, dass ich falsch liege.
Wenn Du nur die Inhalte der Tabellen löschen willst, müsstest Du aus der Systemtabelle (MSysObjects - gibt es in jeder Access-DB) die Namen der Tabellen nacheinander auslesen und dann den Inhalt der Tabelle jeweils löschen. Wenn Du die Tabellennamen erstmal hast, kannst Du auch mit DROP TABLE die jeweilige Tabelle ganz löschen.

PS:
Dim rs as new adodb.recordset
Sowas macht man nicht. ;)
 
jaja.... *g*

Dim rs as AdoDB.Recordset

Set rs = new AdoDB.RecordSet


...

Lirion hat recht, DROP DATABASE geht ei Access nicht ...
aber DROP TABLE meineTabelle geht schon... aber wie gesagt, bei deinem Problem würde ich dir die delete Anweisung empfehlen, sonst müsstest du bei jedem Start des Programms deine Tabellen neu Anlegen(TableDef)...

Gruss Tom
 
Zuletzt bearbeitet:
Servus!

Hab da noch ne Lösung gefunden, die jedoch nur dann Funktioniert, wenn du deine Tabellen alle mit tbl starten lässt.. und du auf die ADO Extensions 2.6 (2.5) for DDL and Security einen Verweis gesetzt hast...

tblSchuhe, tblHaus, tblZugriff, tblMember...

Dim cat as ADOX.Catalog
dim rs as adodb.recordset
Dim conn as new AdoDB.Connection
//Bei ner Access DB
conn.Open "Provider=Microsoft.Jet.OLEDB.3.51;" && _
"Data Source =" & App.Path & "\myDB.mdb","username","passwort"
Hierbei muss sich die Access mdb. Datei im selben Verzeichnis wie die vom VB Editor erzeugte exe Datei liegen


//Bei nem SQL Server
conn.Open "Provider=SQLOLEDB;USER ID = username;" &_
"Catalog=meineDB; Data Source=localhost;"

set cat = new ADOX.Catalog
set rs = new adodb.recordset
cat.activeConnection = con

with rs
.activeConnection = con
.Locktype = adLockOptimistic
.CursorType = adOpen
end with

dim i as Integer
i = 0

While (i < cat.Tables.count)
if left(cat.Tables(i).Name,3) = "tbl" then
rs.Open "Delete * FROM " & cat.Tables(i).Name
rs.close
end if
i = i + 1
Wend

set rs = nothing

...eine sehr unperformante Lösung... es wäre Besser, alle Tabellen einmalig zu erfassen und dann jeweils einen etwas "längeren" SQLString mittels eines RecordsetObjekts abzuschiessen...

Gruss Tom
 
Danke für die Hinweise.

Vielleicht mach ichs auch mit temporärem zwischenspeichern einer leeren datenbank, und ersetzte die alte Datenbank immer mit der leeren.

...aber zu was anderem:

Wie kann ich den beenden Button rechts oben abfragen und noch weitere befehle beim betätigen von diesem hinzufügen. z.B. den Datenbankinhalt löschen,....
 
...geht nicht (bzw. hab ichs noch nicht hinbekommen...;-)) diese Funktionalität hab ich immer so gelöst, dass ich den SchliessenButton ("X") nicht anzeigen lasse und statt dessen nen neuen Button "Beenden" auf dem Form platziere... bei diesem wird dann der Code hinterlegt-> Datenbankinhalt löschen;exit form; ... fertig...

Gruss Tom
 
Das mit dem Schliessen-Button des Formulars könntest Du mit dem QueryUnload-Ereignis des Formulars abfangen. Da kannst Du dann noch kurz vor Ende des Programms ein paar Dinge erledigen oder auch das Beenden ganz verbieten.
 
Zurück