Discussion:
Globale Variable definieren
(zu alt für eine Antwort)
J?rgen K?hler
2005-02-02 20:25:35 UTC
Permalink
Hallo Access-Gemeinde,
vermutlich ist dieses Thema schon 1000mal hier abgehandelt worden, ich
finde nur keine Lösung und bin am Verzweifeln.
Mein Problem:
Ich möchte beim Starten einer Datenbank eine Tabelle auslesen lassen,
die Informationen wie 'Rabattsatz'(z.B. heute 3%, morgen 0%) enthält
oder einen Gruss passend zur Jahreszeit (in Kürze: Frohe Ostern, etwas
später: Frohe Weihnachten). Der Anwender sucht sich die passende Info
aus, die dann bis zur nächsten Änderung in der Tabelle stehen und
fortan bei der Arbeit verwendet werden.
Die besagten Infos tauchen dann an (natürlich) unterschiedlichen
Stellen der Anwendung wieder auf:
1.) mit dem Rabattsatz wird berechnet ob bzw. wieviel Rabatt der
Käufer als Gutschrift auf dem Rabattkonto erhält
2.) der Gruss erscheint am Ende eines Kassenzettel (oder auch nicht)

Ich möchte nun auf die beiden als Beispiel genannten Variablen in div.
Formularen und Reports zugreifen können und dachte, dass geht
'irgendwie' mit einem Eintrag in einem Modul wo die Variable als
Public (oder Global) definiert (z.B. Public Rabatt as Integer, Public
Gruss as string) und anschließend der aktuelle Wert zugeordnet wird.
Und dann, so mein Wunsch, stehen mir die Variablen immer und überall
zur Verfügung. Leider klappt es nicht so, ich erhalte zwar keine
Fehlermeldungen, aber auch keine verwertbaren Infos. Wer kann mir
helfen?

Besten Dank im Voraus

Jürgen Köhler

PS: Bisher habe ich das Problem immer so gelöst, dass ich im
Steuer-elementinhalt auf ein Formular, welches im HIntergrund ruht,
verwiesen habe (also: Formulare![Formularname]![Gruss]). Das
funktioniert zwar, aber ich möchte auch noch etwas dazulernen :-)
Jürgen Volke
2005-02-02 22:37:02 UTC
Permalink
Hallo Jürgen
Post by J?rgen K?hler
Ich möchte beim Starten einer Datenbank eine Tabelle auslesen lassen,
die Informationen wie 'Rabattsatz'(z.B. heute 3%, morgen 0%) enthält
oder einen Gruss passend zur Jahreszeit (in Kürze: Frohe Ostern, etwas
später: Frohe Weihnachten).
Ich möchte nun auf die beiden als Beispiel genannten Variablen in div.
Formularen und Reports zugreifen können und dachte, dass geht
'irgendwie' mit einem Eintrag in einem Modul wo die Variable als
Public (oder Global) definiert (z.B. Public Rabatt as Integer, Public
Gruss as string) und anschließend der aktuelle Wert zugeordnet wird.
Und dann, so mein Wunsch, stehen mir die Variablen immer und überall
zur Verfügung. Leider klappt es nicht so, ich erhalte zwar keine
Fehlermeldungen, aber auch keine verwertbaren Infos. Wer kann mir
helfen?
Im Prinzip geht das, indem du beim Start eine Funktion aufrufst, die die
Variablen füllt.
Aber globale Variablen sind nicht gut, da sie den Hang haben ihren
Inhalt zu verlieren, wenn irgendwo ein Fehler auftritt.
Deine Lösung mit dem Formular ist doch gar nicht so schlecht.
Alternativ kannst du auch mit Dlookup auf die Tabelleneinträge zugreifen.

HTH Jürgen
Henry Habermacher [MVP Access]
2005-02-03 04:02:49 UTC
Permalink
Hallo Jürgen
Post by J?rgen K?hler
Ich möchte nun auf die beiden als Beispiel genannten Variablen in div.
Formularen und Reports zugreifen können und dachte, dass geht
'irgendwie' mit einem Eintrag in einem Modul wo die Variable als
Public (oder Global) definiert (z.B. Public Rabatt as Integer, Public
Gruss as string) und anschließend der aktuelle Wert zugeordnet wird.
Und dann, so mein Wunsch, stehen mir die Variablen immer und überall
zur Verfügung. Leider klappt es nicht so, ich erhalte zwar keine
Fehlermeldungen, aber auch keine verwertbaren Infos. Wer kann mir
helfen?
Eine Möglichkeit ist, das über Public Functions in einem Klassenmodul zu
machen (ungetestet):

Dim dblRabattsatzHeute As Double
Dim dblRabattsatzMorgen As Double
dim varFloskel as Variant

Public Function setGlobalVariables()
dblRabattsatzHeute = ...
dblRabattsatzMorgen = ...
varFloskel = ...
End Function


Public Function getGlobalVariables(VariableName as String) as variant
IF Nz(varFloskel, "") = "" And varFloskel <> "bereits initialisiert"
then
'wahrscheinlich noch nicht initialisiert, also
call setGlobalVariables()
if Nz(varFloskel, "") = "" then
varFloskel = "bereits initialisiert"
end if
End If
Select Case VariableName
Case "RabattsatzHeute"
getGlobalVariables = dblRabattsatzHeute
Case "RabattsatzMorgen"
getGlobalVariables = dblRabattsatzMorgen
Case "Floskel"
if varFloskel <> "bereits initialisert" then
getGlobalVariables = varFloskel
else
getGlobalVariables = ""
end if
Case Else
getGlobalVariables = "unbekannte Variable!"
End Select
End Function

Nun kannst Du einfach beim Report oder auf einem Formular als
Datenherkunft eines Feldes reinschreiben:

=getGlobalVariables("RabattHeute")

oder eben "RabattMorgen" rsp. "Floskel"

Du kannst diese Funktion sogar in Queries als Funktionsaufruf verwenden,
um den Rabattsatz oder die Floskel auch in eine Datenquelle für einen
Report reinzubekommen und um beispielsweise mit dem Rabattsatz zu
rechnen.

Die Initialisierung der Variablen musst Du in der Funktion
setGlobalVariables noch ergänzen (dort wo die ... drin stehen). Am
besten schreibst Du das in eine Tabelle weg, von wo Du es dann mit
DLookup() einfach auslesen kannst.
Zusätzliche Anmerkung:
Falls die varFloskel nicht gesetzt ist, geht das Programm davon aus,
dass die Variablen noch nicht Initialisiert sind und wird diese
versuchen zu initialisieren. Wenn Du die Floskel weglassen willst, wird
das also jedes Mal der Fall sein, was u.U. zu Performance Einbussen
führt, abhängig davon, wie Du die Einstellungen verwaltest. Du kannst
hier auch einen anderen Mechanismus ausdenken, wie die
getGlobalVariables() erkennen kann, ob die Variablen initialisiert sind,
z.B. durch das setzen eines Flags (ebenfalls als globale Variable
ausgelegt) oder einfach durch ein automatisches Initialisieren der
Variablen beim Programmstart. Du musst dann aber berücksichtigen, dass
während der Entwicklung diese Variablen teiwleise den Inhalt verlieren
und dann nicht initialisiert werden. Ich habe versucht das über das
Literal "bereits initialisiert" zu zeigen, was ich meine.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com (neu mit Suchfunktion!)
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org
J?rgen K?hler
2005-02-04 09:11:22 UTC
Permalink
BESTEN DANK an Jürgen und Henry für euere Unterstützung.
Ihr habe mir weitergeholfen.

Gruß
Jürgen

Lesen Sie weiter auf narkive:
Loading...