Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

If, Und, Oder Dann Problem

Begonnen von Brallu, November 15, 2019, 18:33:39

⏪ vorheriges - nächstes ⏩

Brallu

Hallo Gemeinde,  :)
ich brauche für dieses, warscheinlich einfache Problem mal eure Hilfe.

Also ich möchte in einem FRM über einen Speicherbutton einen Datensatz speichern.
Über fncPruefen soll geprüft werden ob einige Felder gefüllt werden.
Hier im FRM habe ich jetzt eine Auswahlmöglichkeit bei der Zeiteingabe mit eingebaut.
Also entweder Me!optEintaegig und Me!txtBerStdEin oder Me!optMehrtaegig und Me!txtMehrtaegigBerechnet haben Werte.
Die andere Beiden Felder werden bei der Auswahl Ein- oder Mehrtägig deaktiviert.

Wenn ich die Zeile If Not IsNull(Me!optEintaegig) And Not IsNull(Me!txtBerStdEin) einzeln ohne oder (wie unten) verwende funktioniert es.
Hoffe das könnt ihr jetzt verstehen und könnt mir helfen.

Gruß Danny

If (Not IsNull(Me!optEintaegig) And Not IsNull(Me!txtBerStdEin)) Or (Not IsNull(Me!optMehrtaegig) And Not IsNull(Me!txtMehrtaegigBerechnet))

Then strFehlerText = strFehlerText & intFehlerzahl & ". Zeit fehlt oder ist ungültig" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
    End If


DF6GL

Hallo,

was ist nun die Frage?


Das If-Statement sollte so aussehen:

If (Not IsNull(Me!optEintaegig) And Not IsNull(Me!txtBerStdEin)) Or (Not IsNull(Me!optMehrtaegig) And Not IsNull(Me!txtMehrtaegigBerechnet)) Then

    strFehlerText = strFehlerText & intFehlerzahl & ". Zeit fehlt oder ist ungültig" & vbCrLf
.
.
End If



Evtl. müssen die beiden And-Ausdrücke separat "abgefragt" werden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Brallu

Hallo und danke für die Antwort. Aber es ist doch immer nur eine Doppelkombi möglich!
Wenn ich die einzeln abfrage dann gibt er mir ja den Fehler das die andere Kombi nicht erfüllt ist.

Oder liege ich da falsch?


DF6GL

Hallo,

  habe von "beiden And-Ausdrücken" gesprochen, nicht von einzelnen If-Bedingungen...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

PhilS

Zitat von: Brallu am November 15, 2019, 18:33:39
Also entweder Me!optEintaegig und Me!txtBerStdEin oder Me!optMehrtaegig und Me!txtMehrtaegigBerechnet haben Werte.
opt... klingt entweder nach Optiongroup oder nach OptionButton. - Bei diesen Steuerelementen ist eine Prüfung auf NULL nicht so zielführend. - Ich würde einen Standardwert für die Optiongroup vergeben und dann explizit auf die jeweiligen Werte der einzelnen Optionen prüfen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Brallu

Hallo und danke für eure Antworten,
leider bekomme ich es nicht hin :-[
Findet einer meinen Fehler?
-1 (optEintaegig) und 0 (optMehrtaegig) sind die Standartwerte. (AuswahlEinOderMehr) ist die Optionsgruppe.

Hier der letzte Code:

'hier wird für alle Geprüft ob Daten in den Feldern vorhanden
Public Function fncPruefen()
Dim strFehlerText As String, intFehlerzahl As Integer: intFehlerzahl = 1
    fncPruefen = True

      'prüfen ob Stunden berechnet wurden leer
    If (Me!AuswahlEinOderMehr) = "-1" And Not IsNull(Me!txtBerStdEin) Or _
       (Me!AuswahlEinOderMehr) = "0" And Not IsNull(Me!txtMehrtaegigBerechnet) Then
        strFehlerText = strFehlerText & intFehlerzahl & ". Zeit wurde nicht berechnent" & vbCrLf
        intFehlerzahl = intFehlerzahl + 1
        fncPruefen = False
    End If
   
   
    If fncPruefen = False Then
        If intFehlerzahl = 2 Then strFehlerText = Mid(strFehlerText, 1) '10 = Anzahl der Prüfpunkte
        Select Case MsgBox("Es gibt noch " & intFehlerzahl - 1 & " Fehler" & vbCrLf & vbCrLf & strFehlerText _
        & vbCrLf & vbCrLf & "mit OK zurück, Abbrechen verwirft den begonnenen Datensatz", vbOKCancel, "Achtung!")
            Case vbCancel
                Me.Undo
        End Select
    End If
End Function


Private Sub cmdSpeichern_Click()
If fncPruefen = True Then
        DoCmd.RunCommand acCmdSaveRecord
        Me.Requery
    End If
End Sub

DF6GL

Hallo,


Zahlen werden mit Zahlen verglichen, nicht mit Text:
ZitatIf (Me!AuswahlEinOderMehr) = -1 And Not IsNull(Me!txtBerStdEin) Or _
       (Me!AuswahlEinOderMehr) = 0 And Not IsNull(Me!txtMehrtaegigBerechnet) Then
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

PhilS

Zitat von: Brallu am November 16, 2019, 15:00:36
leider bekomme ich es nicht hin :-[
Findet einer meinen Fehler?
Wie äußert sich dein Fehler denn?

Ich habe deine Erläuterungen nicht bis ins Detail gelesen, aber mir erscheint das NOT in den Bedingungen falsch zu sein.
    If (Me!AuswahlEinOderMehr.Value = Me.optEintaegig.OptionValue And IsNull(Me!txtBerStdEin)) _
       Or _
       (Me!AuswahlEinOderMehr.Value = Me.optMehrtaegig.OptionValue And IsNull(Me!txtMehrtaegigBerechnet)) _
    Then
        strFehlerText = strFehlerText & intFehlerzahl & ". Zeit wurde nicht berechnent" & vbCrLf
        intFehlerzahl = intFehlerzahl + 1
        fncPruefen = False
    End If
Auf die OptionValue-Eigenschaften verweise ich nur, weil es den Code lesbarer macht und du die Werte (0 / -1) nur noch an einer Stelle pflegen musst. Einen funktionalen Unterschied macht das nicht.

Deine Logik mit strFehlerText und intFehlerzahl ist für mich unklar.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Brallu

Danke Phil,
das war die Lösung!!!! :)

ZitatDeine Logik mit strFehlerText und intFehlerzahl ist für mich unklar.
Da jetzt noch mehr Punkte geprüft werden wird dem Benutzer dann beim Speichern-Klick eine Nachricht ausgegeben welche Punkte er noch ausfüllen muß.

Also nochmals Danke für eure Mühe und die schnelle Hilfe.