Dynamische Layouts

Layout speichern

Nachdem also wenigstens einigermaßen klar ist, welches Fenster eigentlich gerade geöffnet ist, sollen dessen Spalten-Eigenschaften gesichert werden. Wie in Listing 4 zu sehen ist, schreiben Sie zuerst den Masterdatensatz in tblLayouts.

Sub Speichern()
Dim objActive As Object
Dim ctlControl As Control
Dim varID As Variant
Dim strObjName As String
Dim strName As String
Dim strNamePlus As String
Dim strSQL As String
Dim lngID As Long
strObjName = Application.CurrentObjectName
strName = InputBox("Bitte geben Sie den neuen Namen ein:", _
"Layout speichern unter")
If strName = "" Then 'also Abbrechen
Exit Sub
End If
strNamePlus = Replace(strName, "'", "'")
varID = DLookup("LID", "qryLayoutsPersoenlich", _
"LName = '" & strNamePlus & "' AND " & _
"LObjektname = '" & strObjName & "'")
If Not IsNull(varID) Then
MsgBox "Der Layout-Name '" & strName & _
"' ist schon vorhanden!", vbCritical
Exit Sub
End If
strSQL = "INSERT INTO tblLayouts " & _
"(LName, LObjektname, LHashwert, LBenutzer) " & _
"VALUES ('" & strNamePlus & "', '" & strObjName & "', '" & _
RechneHashwert() & "', " & CurrentUser() & ")"
CurrentDb.Execute strSQL, dbFailOnError
[...weiter Listing Fehler! Verweisquelle konnte nicht gefunden werden.]

Zuerst wird der gewünschte Name per Input- Box ermittelt, um dann sicherheitshalber darin enthaltene Hochkommata zu maskieren, also zu verdoppeln. Andernfalls gäbe es Konflikte mit der SQL-Syntax, die dieses Zeichen als String-Ende interpretieren würde.

Bild 1: Definition von tblLayouts mit Mehrfachindex.
Bild 1: Definition von tblLayouts mit Mehrfachindex.

Damit keine schon vorhandenen Layoutnamen erneut benutzt werden können, wird mit DLookup geprüft, ob für dieses Objekt schon der gewählte Name vorhanden ist. Die LID ist Null, wenn der Name noch frei ist. Danach können Sie mit einer Anfüge-Abfrage die Layout-Daten in tblLayouts schreiben.

Das funktioniert auch mit verknüpften Tabellen, beispielsweise zu Oracle, deren LID im Gegensatz zu Access ja erst nach dem Speichern eines Datensatzes zur Verfügung steht. Der LHashwert ist zurzeit noch ohne Bedeutung und könnte auch einen Leerstring enthalten.