Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: jagger am Juni 01, 2019, 14:27:03

Titel: Funktion in Kriterium für Abfrage
Beitrag von: jagger am Juni 01, 2019, 14:27:03
Hallo in die Runde,

ich habe eine Funktion, die mir einen Formularnamen ausliest. KLNDR789()
Wie bekommen ich nun diese Funktion in mein Kriterium?
"Wie [Formulare]![frm_Kalender_NK7]![WJ]"
Like [Formulare]![frm_Kalender_NK7]![WJ]
Der Teil "[frm_Kalender_NK7]" soll durch den Wert der Funktion ersetzt werden.
Wie muss das geschrieben werden?
Geht das so überhaupt?

Für einen guten Tipp, schon einmal Danke im Voraus.
LG
jagger
Titel: Re: Funktion in Kriterium für Abfrage
Beitrag von: ebs17 am Juni 01, 2019, 22:31:03
Wenn die Funktion in einem Standardmodul liegt:
WHERE XYZ = KLNDR789()
Titel: Re: Funktion in Kriterium für Abfrage
Beitrag von: jagger am Juni 02, 2019, 18:47:29
Hallo Ebs17,

ich bekomme den String nicht hin.
WHERE  IsoWeekAndYear([tDate]) Like [Formulare]KLNDR789()![WJ]
Ich habe schon sämtliche Klammervarianten um und hinter "KLNDR789()" durch. Es klappt nicht.
Die Fehlermeldung kommt schon im Editor.
"Der von Ihnen eingegebene Ausdruck enthält einen ungültigen .- (Punkt) oder !-Operator oder ein ungültiges Klammerpaar()"

Die Funktion "KLNDR789()" liefert das gewünschte Ergebnis und liegt in einem Standardmodul.

Function KLNDR789() As String
Dim KLNDR As String
KLNDR = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
MsgBox KLNDR
End Function


In vba geht das mit einer Variablen ja ganz easy.
Z.B.:

      Dim KLNDR789 As String
      KLNDR789 = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
      If IsMissing(ArgJahr) Then ArgJahr = Forms(KLNDR789)![kaJ]

Also: ..."Forms(KLNDR789)![kaJ]

Aber in dem Abfragekriterium klappt es nicht.
Wie muss denn so ein zusammengesetzter String aufgebaut sein? Ich kann auch nichts dazu im www finden.

Mit Dank im Voraus

LG
jagger
Titel: Re: Funktion in Kriterium für Abfrage
Beitrag von: Josef P. am Juni 02, 2019, 19:58:08
Hallo!

Zitat
Function KLNDR789() As String
Dim KLNDR As String
KLNDR = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
MsgBox KLNDR
End Function
ZitatDie Funktion "KLNDR789()" liefert das gewünschte Ergebnis ...
Das glaube ich dir nicht. Die Funktion zeigt in der Msgbox das gewünschte Ergebnis, aber sie liefert es nicht.

Zum Ausprobieren:
sub Test()
   msgbox KLNDR789()
end sub

=> Kein Text in der Messagebox.

Fehler: Es fehlt der Code für die Funktionsrückgabe.
Function KLNDR789() As String
   Dim KLNDR As String
   KLNDR = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
   'MsgBox KLNDR
   KLNDR789 = KLNDR
End Function


mfg
Josef
Titel: Re: Funktion in Kriterium für Abfrage
Beitrag von: jagger am Juni 02, 2019, 20:10:04
@Josef P.,

oops, Du hast natürlich mit der Funktion völlig recht.
Die msgbox hatte ich da nur drin, um zu sehen, ob sich da was tut. Die Funktionsrückgabe hat natürlich in meinem Beispiel gefehlt. Sorry. ???
Aber das löst leider nicht das Problem mit dem String für die Abfrage.
Danke fürs Mitmachen und Helfen!

LG
jagger
Titel: Re: Funktion in Kriterium für Abfrage
Beitrag von: Josef P. am Juni 02, 2019, 22:00:14
Warum verwendest du nicht noch eine Funktion, die die Werte liefert?

Public function FormularWert(byval FormName as String, byval ControlName as string) as Variant
     FormularWert = Forms(FormName).Controls(ControlName).Value
end function


oder direkt mit der KLNDR789-Funktion:
Public function KLNDR789Wert(byval ControlName as string) as Variant

     dim FormName as String
     FormName = KLNDR789()
     KLNDR789Wert = Forms(FormName).Controls(ControlName).Value

end function


Damit hast du Funktionen, die in der Abfrage ohne Forms(...) verwendet werden können.

[OT]
Ich bin allerdings kein besonderer Freund von Funktionen in Abfragen, die ein geöffnetes Formular benötigen, da mir das eine Abfrage zu abhängig macht.

mfg
Josef
Titel: Re: Funktion in Kriterium für Abfrage
Beitrag von: jagger am Juni 02, 2019, 22:15:57
Josef P.,

das klingt gut. Also den kompletten Sting in der Funktion zusammensetzen und dann im Kriterium der Abfrage nutzen.

ZitatIch bin allerdings kein besonderer Freund von Funktionen in Abfragen, die ein geöffnetes Formular benötigen, da mir das eine Abfrage zu abhängig macht.

Die Abfrage(n) "füllen" die Ufos.
Wenn das HF nicht geöffnet ist, sind auch die Ufos nicht in Gebrauch.

Danke für Deinen guten Tipp!

LG
jagger