Bei der Arbeit in Access benötigen Sie häufig eine Routine, die einen Datensatz, z. B. zu Sicherungs- oder Dokumentationszwecken, von einer Tabelle in eine andere verschiebt. Eine Lösungsmöglichkeit wäre hier eine VBA-Routine, aber wesentlich einfacher und flexibler kommen Sie mit SQL-Anweisungen zum Ziel.
Die Datenbank benötigt das Modul „modDSVerschieben“, das Sie nach Installation zunächst in Ihre Datenbank übertragen. Anschließend können Sie die Funktion „DSVerschieben()“ wie unten erläutert einsetzen. Die Funktion „modDSVerschieben“ erwartet in den ersten beiden Parametern „strQuelle“ und „strZiel“ die Namen der Quell- und der Zieltabelle. Der dritte Parameter „strFeldname“ definiert den Namen des Feldes, das nach dem über den vierten Parameter „varFeldwert“ angegebenen Wert durchsucht werden soll. Das eigentliche Verschieben erfolgt in zwei Schritten: Zunächst wird der Datensatz per SQLAnweisung „INSERT INTO…“ kopiert:
strSQL = „INSERT INTO
[“ & strZiel & „] “
strSQL = strSQL & „SELECT
[“ & strQuelle & „].* FROM
[“ & strQuelle & „] “
strSQL = strSQL & „WHERE
[“ & strQuelle & „].
[“ & strFeldname & „] = “
DoCmd.RunSQL strSQL, False
Speichern Sie das Modul unter den Namen „modDSVerschieben“ ab.
Function DSVerschieben(strQuelle As String, _
strZiel As String, _
strFeldname As String, _
varFeldwert As Variant) As Integer
Dim strSQL As String
DSVerschieben = 0
strSQL = „INSERT INTO [“ & strZiel & „] „
strSQL = strSQL & „SELECT [“ & strQuelle & „].* FROM [“ & strQuelle & „] „
strSQL = strSQL & „WHERE [“ & strQuelle & „].[“ & strFeldname & „] = „
If TypeName(varFeldwert) = „String“ Then
strSQL = strSQL & „‚“ & varFeldwert & „‚;“
Else
strSQL = strSQL & varFeldwert & „;“
End If
On Error Resume Next
DoCmd.RunSQL strSQL, False
If Err <> 0 Then
Beep
MsgBox „Fehler beim Übertragen: “ & Err.Description, _
vbOKOnly + vbExclamation, _
„!!! Problem !!!“
DSVerschieben = 1
Exit Function
End If
strSQL = „DELETE * FROM [“ & strQuelle & „] „
strSQL = strSQL & „WHERE [“ & strQuelle & „].[“ & strFeldname & „] = „
If TypeName(varFeldwert) = „String“ Then
strSQL = strSQL & „‚“ & varFeldwert & „‚;“
Else
strSQL = strSQL & varFeldwert & „;“
End If
Err = 0
DoCmd.RunSQL strSQL, False
If Err <> 0 Then
Beep
MsgBox „Fehler beim Löschen: “ & Err.Description, _
vbOKOnly + vbExclamation, _
„!!! Problem !!!“
DSVerschieben = 2
Exit Function
End If
End Function