PDA

Vollständige Version anzeigen : Datensätze nach Löschen in einer Excel Tabelle speichern


KAB
07.07.2006, 07:45
Hallo,

ich schon wieder!

Ich hätte gern folgendes vor:

Ich lösche Datensätze, die schon älter als 1 Jahr sind und möchte diese aber dann in einer Excel Tabelle speichern!

Hat jemand ne Idee wie ich das machen kann?

:upps:

J_Eilers
07.07.2006, 08:08
Hi,

verwende eine Abfrage, die alle Daten heraussucht, die älter als 1 Jahr sind, exportiere diese mit DoCmd.Transferspreadsheet und lösche sie danach. Wo soll ich denn genau anfangen?

KAB
07.07.2006, 08:48
Hallo,

Ich hab ne Abfrage gemacht mit:

DELETE BesucherErfassung.KommtDatum, *
FROM BesucherErfassung
WHERE DATEADD("yyyy",1,BesucherErfassung.KommtDatum)<Date();


Hier werden alle Daten gelöscht, die älter als ein Jahr sind.

Soll ich jetzt einfach statt DELETE - > SELECT schreiben?

Und dann?

exportiere diese mit und lösche sie danach.

Wo muss ich das DoCmd.Transferspreadsheet einfügen?

J_Eilers
07.07.2006, 09:56
Das geht am einfachsten über VBA:

Dim strSQL As String

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Name deiner Abfrage", "C:\DeineDateie.xls", True
strSQL = "DELETE * FROM BesucherErfassung WHERE DateAdd('yyyy', 1, BesucherErfassung.KommtDatum)"
DBEngine(0)(0).Execute strSQL, dbFailOnError

Dafür musst du einmal deine Löschabfrage mit einem SELECT ersetzen und die Abfrage speichern. Wobei mir die Abfrage nicht vollständig vorkommt.

KAB
07.07.2006, 10:23
Hallo,

Danke für die Hilfe!
Klappt so weit ganz gut!
Nur leider werden die Datensätze immer in Excel überschrieben"?

Was mache ich da noch falsch?

J_Eilers
07.07.2006, 10:28
Nichts, das ist bei der Methode leider so. Wenn die Tabelle immer länger werden soll, müsste man einen anderen Weg (http://www.jans-hp.de/?section=access&thema=office&page=xls) gehen.

KAB
07.07.2006, 10:35
Ok!
Ob ich das hin bring! Aber Danke für den Tipp!

Jetzt hab ich aber noch ein Problem!
Alle Datensätze werden jetzt gelöscht, auch die, die noch kein Jahr alt sind!
Wo liegt das Problem?

Das ist mein Code:


Private Sub LöschenNachJahr_Click()

If MsgBox("Sie beabsichtigen Besucher-Daten zu löschen, die älter als 1 Jahr sind!", vbYesNo, "Achtung!") = vbNo Then
Me.Undo 'rückgängig

Else


Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "LöschenNachJahr"
DoCmd.OpenQuery stDocName, acNormal, acEdit

End If


Dim strSQL As String

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "LöschenNachJahr", "D:\Daten\Access.xls", True
strSQL = "DELETE * FROM BesucherErfassung WHERE DateAdd('yyyy', 1, BesucherErfassung.KommtDatum)"
DBEngine(0)(0).Execute strSQL, dbFailOnError


DoCmd.Close

MsgBox "Besucher-Daten wurden gelöscht!", vbInformation, "Achtung!"

End Sub

J_Eilers
07.07.2006, 11:10
Versuchs mal damit:

strSQL = "DELETE * FROM BesucherErfassung "
strSQL = strSQL & "WHERE KommtDatum < DateAdd('y', -1, Date())"

KAB
07.07.2006, 12:44
Vielen Dank,

ich glaub es funktioniert!
Jetzt muss ich "nur" noch das hin bekommen, dass die Daten in Excel nicht immer überschrieben werden!

balloni
07.07.2006, 13:41
Hallo Leute

Ist so was auch möglich via Button oder sogar automatisch alle 6 Stunden den X-Bericht als X-PDF zu speichern?

Gruss
balloni

J_Eilers
10.07.2006, 06:38
Das könnte man nur über ein Formular machen, in dem ein Timer läuft.