Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Berechnetes Feld - Ausdruck zu lang/komplex

Begonnen von VatosCorsos, August 16, 2013, 13:07:41

⏪ vorheriges - nächstes ⏩

VatosCorsos

Schönen Guten tage liebe Forenmitglieder,

wie ihr aus dem Betreff entnehmen könnt habe ich das Problem das mein Ausdruck viel zu lang für das Berechnete Feld ist.

Wenn(IstNull([Schriftzug]) Und IstNull([2_Farbe]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;70;Wenn(IstNull([2_Farbe]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;85;Wenn(IstNull([Schriftzug]) Und IstNull([2_Farbe]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;85;Wenn(IstNull([2_Farbe]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;100;Wenn(IstNull([Schriftzug]) Und IIstNull([2_Farbe]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;100;Wenn(IstNull([2_Farbe]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;115;Wenn(IstNull([Schriftzug]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;78;Wenn(IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;93;Wenn(IstNull([Schriftzug]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;93;Wenn(IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;108;Wenn(IstNull([Schriftzug]) Und IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;108;Wenn(IstNull([3_Farbe]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;123;Wenn(IstNull([Schriftzug]) Und IstNull([4_Farbe]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;82;Wenn(IstNull([4_Farbe]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;97;Wenn(IstNull([Schriftzug]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;97;Wenn(IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;112;Wenn(IstNull([Schriftzug]) Und IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;112;Wenn(IstNull([4_Farbe]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;127;Wenn(IstNull([Schriftzug]) Und 1_Motiv = FALSCH Und 2_Motiv = FALSCH;86;Wenn(1_Motiv = FALSCH Und 2_Motiv = FALSCH;101;Wenn(IstNull([Schriftzug]) Und 1_Motiv = WAHR Und 2_Motiv = FALSCH;101;Wenn(1_Motiv = WAHR Und 2_Motiv = FALSCH;116;Wenn(IstNull([Schriftzug]) Und 1_Motiv = WAHR Und 2_Motiv = WAHR;116;131)))))))))))))))))))))))

Habt ihr irgendwelche Lösungsvorschläge?

MfG VatosCorsos

VatosCorsos


database

Hallo,

du könntest aus dem Verschachtelunsgewirr eine Public Function in einem Standardmodul basteln und dem Textfeld das Ergebnis der Selbigen zuweisen.

z.B.:

Public Function GibHer() As Date
   GibHer = Date()
End Function


in die Datenherkunft deines Textfeldes Schreibst du dann:

= GibHer()

HTH

VatosCorsos

Hi,

meinst du mit Standardmodul:
Erstellen --> Modul (im Makros und Code Bereich)

1. wo definiere ich den Rückgabeparametertyp? (Benötige integer)
2. meine verschachtelter Ausdruck füge ich in den Klammern von "Date" ein?
3. Viele Dank :)

btw ich nutze Access 2013

database

Hallo,

ja, meine ich ...

Den Rückgabeparametertyp bestimmst du in der Kopfzeile der Function ...

Public Function Funktionsname(etwaige Übergabeparameter) As Ausgabeparametertyp

wie in meinem Beispiel oben:

Public Function GibHer() As Date  ... gibt das Ergebnis der Function als Datum zurück

Dein verschachtelter Ausdruck wird zwischen Public Function und End Function zu einem auswertbaren VBA-Konstrukt 'umgewandelt'.

Entweder verwendest du dabei die If Then Else ... ElseIf ... Konstrukte oder aber auch Select Case ...
Siehe dazu die VBA-Hilfe im VBE

Z.B.

If IsNull(Forms!frmDeinFormular!Schriftzug) AND IsNull(Forms!DeinFormular!2_Farbe) And .....

In jedem Fall wird das eine recht komplexe Geschichte werden, an die du dich am Besten schrittweise herantastest.
Soll heißen, jede Verschachtelungsebene nach der anderen implementieren und das Ergebnis durch Testdaten überprüfen..


ebs17

Zitat2_Farbe, 3_Farbe, 4_Farbe
1_Motiv, 2_Motiv, 99_Motiv

Wenn man so etwas liest, könnte man auch erst einmal an einen zusätzlichen Normalisierungsschritt denken. Mit ordentlichen Tabellen würde man dann auch zu einer anderen Abfragelogik kommen als dieses "übersichtliche" Wenn-Dann-Sonst-Trallala.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
um es etwas deutlicher als ebs zu formulieren, das Datenmodell ist ziemlich verkorkst.
Bei Aufzählungsfeldern (Felder mit einer fortlaufenden Zahl ...1..., ...2....) kann man immer davon ausgehen, dass das Datenmodell falsch ist.
Und bei so vielen Wenn auch. Meines Wissens, gehen ohnehin nur 7 Wenns in einer Formel.

@database
mich wundert, dass Du da keine Anmerkung dazu gemacht hast.  ;D ;D
Gruß Klaus

database

Hallo,

@MzKlMu
Keine Angst, mir ist das schon aufgefallen, wollte aber erst mal auf das angefragte Problem reagieren.
Andererseits gab's keinen Hinweis darauf, dass das Formular an eine Tabelle oder Abfrage gebunden ist - und Feldbezeichnungen können
sehr phantasiereich ausfallen.

Nichts desto trotz stimmt natürlich deine Aussage zum Datenmodell generell ...

Zitatgehen ohnehin nur 7 Wenns in einer Formel
... und maximal 255 Zeichen in dieser - beides leicht überschritten 8)

VatosCorsos

Hab es anders und viel einfacher gelöst. Vielen Dank für eure Bemühungen! Adios!

~closed

ebs17

"Löse es anders ..." ... ist doch der ultimative Tipp.
Im Wiederholungsfall würdest Du damit in helle Begeisterung ausbrechen.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

database

Hallo,

ZitatHab es anders und viel einfacher gelöst

...und das WIE bleibt ein streng gehütetes Geheimnis  8)