Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Ken am August 28, 2012, 13:53:24

Titel: Tabelle aus andere DB nach Namen löschen
Beitrag von: Ken am August 28, 2012, 13:53:24
Hallo,

ich erstelle in eine andere DB immer eine Sicherheitstabelle mit folgendem Code:

tabname = "Sicherung_" + CStr(Format(Now, "dd_mm_yyyy_hh_nn_ss"))
Diese wird gespeichert:
DoCmd.DeleteObject acTable, "c:\test\Backup.mdb", "Sicherung"

Ich sichere die Tabelle also mit einen Timestamp, weil ich am Tag verschiedene Sicherungen habe.
Da nach X-Tagen die DB zu groß wird, möchte ich gerne diese Tabellen wieder automatisch löschen (wobei die letzten 3 Tage immer bleiben sollen).

So nun meine Frage, weiß jemand wie ich die Sicherungstabellen am besten packen kann. Da sie eine Uhrzeit im Namen führen, kann ich sie nicht direkt ansprechen. Mir fehlt aber das Wissen, wie ich ein delete nur mit Sicherung und Datum schreiben soll, zumal ich nicht weiß ob er sie dann auch erkennt, das sie ja auch noch die Uhrzeit führen.

Über jeden Tipp würde ich mich freuen, gerne auch andere Anregungen.

Danke


Titel: Re: Tabelle aus andere DB nach Namen löschen
Beitrag von: DF6GL am August 28, 2012, 17:08:55
Hallo,

nur Tipp, umsetzen musst Du ihn selber..   ;)  8)


Selektiere in einem Recordset alle Tabellen aus der Tabelle "MSysobjects" mit Namen "Sicherung*" (like "Sicherung*") , dem Datum kleiner als Maxdatum - 3 Tage (erfordert ein bisschen Stringmanipulation, um aus dem Namensteil ein gültiges Datum zu generieren...)  und sortiert nach dem Tabellennamen. Damit erhältst Du alle Sicherungstabellen die Du mittels Durchlauf durch den Recordset löschen kannst. Möglicherweise ist bei jedem Durchgang ein Requery des Recordsets vonnöten.


Mit "DoCmd.DeleteObject ..."  kannst Du keine Massenlöschung erreichen.


Gruß
Franz, DF6GL


Titel: Re: Tabelle aus andere DB nach Namen löschen
Beitrag von: Ken am August 28, 2012, 17:54:27
Hallo Franz,

das mit dem MSysobjects ist ja genial! Wusste gar nicht, dass es so etwas gibt.
Ich gebe mich mal daran und hoffe, dass ich es hinbekomme :-)

Wenn ich fertig bin sende ich den Code hier.

Danke
Ken
Titel: Re: Tabelle aus andere DB nach Namen löschen
Beitrag von: Beaker s.a. am August 28, 2012, 22:07:48
Hallo Franz,
Zitatmittels Durchlauf durch den Recordset löschen kannst.
Aber nicht direkt in MSysObjects, die ist IMO schreibgeschützt.
Ich bin auch kein Freund der Verwendung von MSys...-Tabellen, die sind
sicher nicht umsonst standardmässig ausgeblendet.
Für die gefragte Anforderung würde ich eher die Auflistung .TableDefs
verwenden. Würde vom Code her (Tabellenname ermitteln) ja ähnlich
funktionieren, ausser, dass man zum Löschen statt DoCmd.DeleteObject
die Methode .Delete der Auflistung verwenden würde/könnte.
gruss ekkehard
Titel: Re: Tabelle aus andere DB nach Namen löschen
Beitrag von: DF6GL am August 29, 2012, 08:38:38
Hallo,


um Missverständnissen vorzubeugen:  Es sind auch nicht die Einträge im MsysObjects gemeint, die sind sowieso nicht änderbar/löschbar, sondern die Tabellen-Objecte selber (z. B. durch die angesprochene Tabeldefs-Auflistung).


Andererseits gibt es ja mehrere Wege, die nach Rom führen    :D ;)
Titel: Re: Tabelle aus andere DB nach Namen löschen
Beitrag von: Ken am August 29, 2012, 09:09:25
Hallo,

habe noch ein kleines Problem, vielleicht kann mir jemand helfen.
Hier erstmal der Code:

Dim dbs As Database
Dim rst As Recordset
Dim strSQL As String
Set dbs = OpenDatabase("c:\test\Backup.mdb")

strSQL = "SELECT MSysObjects.Name, MSysObjects.Type, MSysObjects.DateCreate" _
& " FROM MSysObjects" _
& " WHERE (((MSysObjects.Name) Not Like 'msys*'" _
& " And (MSysObjects.Name) Not Like '~sq*'" _
& " And (MSysObjects.Name) Like 'Sicherung_*')" _
& " AND ((MSysObjects.Type)=1 Or (MSysObjects.Type)=6)" _
& " AND ((MSysObjects.DateCreate)<Date()))"


Set rst = dbs.OpenRecordset(strSQL)

With rst
Do Until .EOF
dbs.TableDefs.Delete !Name
.MoveNext
Loop
End With

rst.Close
Set rst = Nothing
Set dbs = Nothing


Folgendes passiert nun, Sicherung wird gelöscht, aber Sicherung_28_08_2012_usw. bleibt stehen. Also alles bleibt stehen was mit _Datum und Uhrzeit endet. Hat jemand eine Idee warum das so ist?
Danke!
Titel: Re: Tabelle aus andere DB nach Namen löschen
Beitrag von: Ken am August 29, 2012, 11:00:33
Hallo,

alles OK, hatte nur ein Datumsproblem. Code funktioniert.