[Eine Seite zurück] [Übersicht] [Eine Seite vor]

Benutzung auf eigene Gefahr !
Keine Garantie für garnichts !

Datensätze in Log-Tabelle verschieben

Sprache / Programm: Access ab Version 97
Beschreibung

Mit dieser Funktion können alte Datensätze aus einer Datenbank entfernt und in einer anderen Datenbank gesichert werden. daurch können alte Daten regelmäßig aus der Datenbank entfernt werden (z.B. nach einem Jahresabschluß) und die Leistungsfähigkeit der Datenbank bleibt erhalten.

Andererseits kann jede Änderung durch Aufruf der Funktion so protokolliert werden.

Die Funktion verschiebt Datensätze in eine andere Tabelle, die auch in einer anderen Datenbank liegen kann.

Voraussetzung für die korrekte Funktion ist, dass die ZielTabelle wie die Quelltabelle aussieht, ausgenommen

  • Alle Eintragungen in den Feldern 'Gültigkeitsregel' und 'Standardwert' werden entfernt

  • Alle Beziehungen, Indizes und Schlüssel werden entfernt

  • Autowert-Felder werden in den Typ LONG umgewandelt

  • Es muß ein zusätzliches Feld Typ 'Datum/Zeit' ergänzt werden, in dem das Datum der Verschiebung eingetragen wird.

  • Es muß ein Feld 'LogUser' vom Typ 'Text 20' angefügt werden
VBA-Quelltext
Private Declare Function GetComputerName Lib "kernel32" (ByVal lpBuffer As String, nSize As Long) As Long

Public Sub MoveRecordSets(QuellTab As String, ZielTab As String, Optional WHERE As String, Optional ZielDB As String, Optional Benutzer As String, Optional LogDatum As Date)
    Dim FROM As String, TempName As String
   
    If LogDatum = 0 Then LogDatum = Now
    If Benutzer = "" Then
        TempName = Space$(255)
        GetComputerName TempName, 255
        Benutzer = Left(TempName, InStr(TempName, vbnullchar) - 1) & DBEngine.Workspaces(0).UserName
    End If
    FROM = " * FROM [" & QuellTab & IIf(WHERE = "", "];", "] WHERE (" & WHERE & ");")
   
    DoCmd.SetWarnings False
   
    On Error GoTo FehlerBeimVerschieben
   
    DBEngine.BeginTrans
        DoCmd.RunSQL "INSERT INTO [" & ZielTab & "] ([LogDatum], [LogUser]) " _
                & IIf(ZielDB = "", "", " In '" & ZielDB & "' ") & "SELECT " _
                & CSql(LogDatum, dbDate) & " As [LogDatum], """ _
                & Benutzer & """ As [LogUser]," & FROM
        DoCmd.RunSQL "DELETE" & FROM
    DBEngine.CommitTrans
   
Exit Sub

FehlerBeimVerschieben:
    DBEngine.Rollback
    MsgBox Err.Description
End Sub
Argumente der Funktion/Prozedur

QuellTab

Name der Tabelle, aus der die Daten entfernt werden sollen.

ZielTab

Name der Tabelle, in welche die Daten übertragen werden sollen.

WHERE

Optionales Argument, entspricht dem WHERE-Abschnitt in SQL. Keine Eingabe = Die gesamte Quelltabelle wird gelöscht und ihre Daten werden in den Log-File übertragen.
ZielDB

Optionales Argument. Vollständiger Pfad der Datenbank, in der sich ZielTab befindet.

Keine Eingabe = ZielTab befindet sich in der aktuellen Datenbank.

Benutzer

Optionales Argument. Benutzer, der die Änderungen vornimmt.

Keine Eingabe = Aktueller Benutzer

LogDatum

Optionales Argument. Name des Feldes, in dem das LogDatum eingetragen wird. Keine Eingabe = Aktuelles Systemdatum
Anwendungsgebiete, Fehler und Warnungen

Verwendet die DAO Objektbibliothek. Ab Access 2000 muss diese explizit im VBA-Editor über 'Extras' -> 'Verweise' als 'Microsoft DAO 3.6' (oder höher) eingebunden werden und vor die 'Microsoft ADO 2.1' (oder höher) Bibliothek gesetzt werden.