PDA

Vollständige Version anzeigen : Grundeinstellungen


Edgar Basler
06.05.2011, 13:37
So - nun brauche ich mal wieder Gedankenhilfe.
Ich möchte bestimmte Einstellungen (Pfad, Verzeichnis, Farben, usw.) vom Benutzer der DB vornehmen lassen. Das "wie" (Formular ==> Tabelle) ist kein Thema; das funktioniert.

Problem:
Wie geht man am besten vor, daß beim Start (vor Start von Formularen) der DB alle Einstellungen in Variablen so zwischengespeichert werden, daß ich in allen Bereichen (Formulare, Berichte usw.) auf diese Variablen zugreifen kann?

Atrus2711
06.05.2011, 13:50
Hi,

da gibts viele Wege:

über globale Variablen (einfach und doch schlecht :) )
über Arrays/Collections/Dictionaries und ähnliche listartige Strukturen
über eine Klasse "clsMySettings" (a la VB.Net), die die Einstellungen als Properties kapselt und weitergibt (Nachteil: neue Einstellung erfordert Codeänderung)
für Spezialfälle genügt vielleicht auch eine "Ein-Satz-Tabelle", die man überall als Kreuzprodukt dazupacken kann, um die dortigen Felder direkt zu lesen.

Edgar Basler
07.05.2011, 09:53
über globale Variablen (einfach und doch schlecht :) )

Warum schlecht. Was für Gründe sprechen dagegen?


für Spezialfälle genügt vielleicht auch eine "Ein-Satz-Tabelle", die man überall als Kreuzprodukt dazupacken kann, um die dortigen Felder direkt zu lesen.

Könnte hierzu jemand ein klitze kleine DB als Beispiel erzeugen?

Edgar Basler
08.05.2011, 09:33
Voraussetzung: Ich nehme eine "Ein-Satz-Tabelle"

Wenn ich nun in einem beliebigen Formular bin und dort beispielsweise den Farbwert benötige, wie kann ich mir den am besten "holen"?

Thomas Möller
08.05.2011, 10:27
Hallo Edgar,

Wenn ich nun in einem beliebigen Formular bin und dort beispielsweise den Farbwert benötige, wie kann ich mir den am besten "holen"?

ich würde mir eine Klasse schreiben. Beim Start der Anwendung würde ich einmalig die Werte aus der Tabelle auslesen und in Properties speichern. Auf diese kannst Du dann in Deinem VBA-Code einfach zugreifen:

Irgendwas = Einstellungen.Farbwert

Hier hat die Instanz Deiner Klasse den Namen Einstellungen erhalten. Der Code greift auf die Property Farbwert zu.
Ich finde das gut lesbar.

Du kannst natürlich auf an jeder Stelle, an der Du eine Einstellung benötigst, diese mit DLOOKUP abfragen.

Irgendwas = DLOOKUP("Farbwert", "tbl_Einstellungen")

Von der Performance her ist das etwas langsamer, da bei jedem Zugriff auf eine Eigenschaft die Daten aus der Tabelle gelesen werden. Da Du das aber nicht laufend machst wird das wahrscheinlich weniger ins Gewicht fallen. Auf jeden Fall ist diese Lösung weniger elegant und schlechter lesbar.

CU

Lanz Rudolf
08.05.2011, 13:11
Hallo
habe einmal ein Farbauswahl Dialog gemacht
weiss NICHT ob dir So was Hilft (Lade Dir die MDB hoch)
da könntest Du z.B nach der Auswahl die Properties z.B des Formularfeldes so setzen:
Me![Deinfeld].ForeColor = DeineWahlLngFrgb
Me![Deinfeld].BackColor = DeineWahlLngFrgb
oder/und der ausgewählte Wert zur späteren verwendung in einer Tabelle Speichern.

öffne die MDB
und öffne das Formular "FrmFarbauswahlMitGrundpalette"

Atrus2711
09.05.2011, 08:16
Die Ein-Satz-Tabelle kannst du "ohne Beziehungslinie" in jede beliebige datensatzliefernde Abfrage einbauen. Dabei entsteht ein sog. Kreuzprodukt: es wird jeder Satz der bisherigen Abfrage mit jedem (= einem!) Satz der Ein-Satz-Tabelle kombiniert. Die Gesamtabfrage kann auf alle Felder der beteilgten Tabellen zugreifen, also auch auf die der Ein-Satz-Tabelle.

Globale Variablen haben den Nachteil, dass sie global sind. :) Sie können von überall gelesen werden, können aber eben auch von überall verändert werden. Eine Klasse könnte das über Nur-Lese-Properties verhindern. Auf die Klassenwerte kannst du aber eben auch nur per VBA zugreifen, nicht per SQL.