Tabelle für Settings

11/02/2009 - 13:12 von Thomas Wolf | Report spam
Hallo zusammen

Ich habe eine Tabelle 'tsysSettings', welche sich im BE befinden. Dort sind
Daten abgelegt, welche sich wàhrend der ganzen Zeit, wo das FE offen ist,
nie àndern (z.B. Startoptionen der DB, Farbangaben für Ansichten etc.). Auch
Pfadangaben sind vorhanden. Diese können auch aus mehreren Eintràgen
vorhanden sein.
Gleichzeitig habe ich eine Tabelle 'tsysSettingsLocal', welche der
Einfachheit halber genau gleich aufgebaut ist wie 'tsysSettings'. Sie
befindet sich im FE. Die Daten dieser Tabelle werden wàhrend dem Betrieb
immer wieder geàndert, z.B. userspezifische Startoptionen von Formularen
etc.

Zum Auslesen der Daten habe ich folgende Funktion. Wegen dem Zusammenbau
der Pfadangaben kann sich diese Funktion rekursiv aufrufen:
'_______________________________________ Funktion start
_______________________________________

Function fctRetrieveSettings(strSettingName As String, Optional bytSettings
As twSettings = 1) As String
Dim rst As DAO.Recordset
Dim strSettings As String

Select Case bytSettings
Case 1
strSettings = "tsysSettings"
Case 2
strSettings = "tsysSettingsLocal"
End Select

Set rst = prpCurrentDBC.OpenRecordset("SELECT SettingPathName, SettingValue
FROM " & strSettings & " " _
& "WHERE (((SettingName)='" &
strSettingName & "')) " _
& "ORDER BY SettingFrom;")

With rst
If Nz(!SettingPathName, vbNullString) <> vbNullString Then
fctRetrieveSettings = fctRetrieveSettings(!SettingPathName) &
!SettingValue
Else
fctRetrieveSettings = !SettingValue
End If
.close
End With

Set rst = Nothing

End Function
'_______________________________________ Funktion end
_______________________________________

Soweit làuft auch alles einwandfrei.

Jetzt habe ich aber das Problem, das beim Abfragen von einigen Daten gleich
nacheinander ich für jede Option meine Funktion erneut aufrufe, wobei diese
dann immer ein neues rst öffnet und anschliessend wieder schliesst, was sehr
Zeitintensiv ist.

Beispiel:

Für eine Anzeige von Absenzen benötige ich diverse verschiedene Farben.
lbl0 = fctRetrieveSettings("ColorStandard")
lbl1= fctRetrieveSettings("ColorAbsent")
lbl3= fctRetrieveSettings("ColorHoliday")
...

Das benötigt dann viel Zeit. Ich bin sicher ihr habt da
Verbesserungsvorschlàge.

Danke und Gruss
Thomas
 

Lesen sie die antworten

#1 Sascha Trowitzsch
11/02/2009 - 13:42 | Warnen spam
Hi Thomas,

"Thomas Wolf" schrieb im Newsbeitrag
news:
Hallo zusammen

Ich habe eine Tabelle 'tsysSettings', welche sich im BE befinden. Dort sind
Daten abgelegt, welche sich wàhrend der ganzen Zeit, wo das FE offen ist, nie
àndern (z.B. Startoptionen der DB, Farbangaben für Ansichten etc.). Auch
Pfadangaben sind vorhanden. Diese können auch aus mehreren Eintràgen vorhanden
sein.
Gleichzeitig habe ich eine Tabelle 'tsysSettingsLocal', welche der Einfachheit
halber genau gleich aufgebaut ist wie 'tsysSettings'. Sie befindet sich im FE.
Die Daten dieser Tabelle werden wàhrend dem Betrieb immer wieder geàndert,
z.B. userspezifische Startoptionen von Formularen etc.

Zum Auslesen der Daten habe ich folgende Funktion. Wegen dem Zusammenbau der
Pfadangaben kann sich diese Funktion rekursiv aufrufen:
'_______________________________________ Funktion start
_______________________________________

Function fctRetrieveSettings(strSettingName As String, Optional bytSettings
As twSettings = 1) As String
Dim rst As DAO.Recordset
Dim strSettings As String

Select Case bytSettings
Case 1
strSettings = "tsysSettings"
Case 2
strSettings = "tsysSettingsLocal"
End Select

Set rst = prpCurrentDBC.OpenRecordset("SELECT SettingPathName, SettingValue
FROM " & strSettings & " " _
& "WHERE (((SettingName)='" &
strSettingName & "')) " _
& "ORDER BY SettingFrom;")

With rst
If Nz(!SettingPathName, vbNullString) <> vbNullString Then
fctRetrieveSettings = fctRetrieveSettings(!SettingPathName) &
!SettingValue
Else
fctRetrieveSettings = !SettingValue
End If
.close
End With

Set rst = Nothing

End Function
'_______________________________________ Funktion end
_______________________________________

Soweit làuft auch alles einwandfrei.

Jetzt habe ich aber das Problem, das beim Abfragen von einigen Daten gleich
nacheinander ich für jede Option meine Funktion erneut aufrufe, wobei diese
dann immer ein neues rst öffnet und anschliessend wieder schliesst, was sehr
Zeitintensiv ist.

Beispiel:

Für eine Anzeige von Absenzen benötige ich diverse verschiedene Farben.
lbl0 = fctRetrieveSettings("ColorStandard")
lbl1= fctRetrieveSettings("ColorAbsent")
lbl3= fctRetrieveSettings("ColorHoliday")
...

Das benötigt dann viel Zeit. Ich bin sicher ihr habt da
Verbesserungsvorschlàge.



Ich habe ein àhnliches System im Einsatz.
- Einmal die Recordset-Lösung, wobei da das Settings-Recordset global bzw.
modulglobal angelegt ist - damit muss es nicht immer neu geöffnet werden. Bein
Start der DB gibt's den Prozeduraufruf InitSettings(), der das RS öffnet.
- Dann noch die Variante, dass der Inhalt der Tabelle in eine Collection oder
ein Dictionary eingelesen wird. Die Items haben dabei als Key die Namen der
Einstellungen. Das ist sicherlich die schnellste Variante. (BTW: Unter A2007
kommt statt Collection die Tempvars-Auflistung infage.)
Beim Beenden der DB werden die evtl. geànderten Werte - geht nur beim Dictionary
oder Tempvars- in die Tabelle zurückgeschrieben.

Ciao, Sascha

Ähnliche fragen