Neuigkeiten:

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

Mobiles Hauptmenü

If Then Else (then wird übersprungen)

Begonnen von elvodia, Dezember 25, 2011, 23:42:13

⏪ vorheriges - nächstes ⏩

elvodia

Frohe Weihnachten erstmal.

Ich versuche mittels einer IF THEN ELSE herauszufinden ob man einen anderen Patienten gewählt hat als vorher.

Private Sub list_rezepte_DblClick(Cancel As Integer)
    VAR_alter_patient = Forms!FM_rezepte_eingabeform.tf_patient
    Var_neuer_patient = Me.list_rezepte.Column(0)
    MsgBox VAR_alter_patient & " " & Var_neuer_patient
    If VAR_alter_patient = Var_neuer_patient Then
        DoCmd.Close acForm, "FM_rezepte_patient_suchen"
    Else
        MsgBox "Sind sie sicher das sie den Patienten dieses Rezeptes ändern möchten?", vbYesNo + vbCritical
            If Response = vbYes Then    ' Auswahl Ja
                Forms![FM_rezepte_eingabeform]![tf_patient] = Me.list_rezepte.Column(0)
                Forms![FM_rezepte_eingabeform].tf_patient.SetFocus
                DoCmd.Close acForm, "FM_rezepte_patient_suchen"
                MsgBox "Änderung vorgenommen"
            Else
                DoCmd.Close acForm, "FM_rezepte_patient_suchen"
            End If
    End If
   
End Sub


Die Oberste Msgbox ist nur zur Kontrolle und egal ob die 2 Werte Gleich sind oder Nicht springt er immer zum ELSE der ersten IF. Beide Werte VAR_alter_patient und Var_neuer_patient enthalten jeweils eine ID als Zahl.

daolix

Die Variablen Var_neuer_patient und VAR_alter_patient beinhalten eventuell unterschiedliche Datentypen. zur Kontrolle ändere mal die erste MSGbox in
MsgBox VAR_alter_patient & " " & Var_neuer_patient & vbcrlf & _
Vartype(VAR_alter_patient) & " " & Vartype(Var_neuer_patient)


Wenn unterschiedlich dann probier folgendes
VAR_alter_patient = clng(Forms!FM_rezepte_eingabeform.tf_patient)
Var_neuer_patient = clng(Me.list_rezepte.Column(0))




database

#2
Hallo,

du solltest in JEDEM Fall JEDE verwendete Variable VOR ihrer Verwendung deklarieren!

Dim VAR_alter_patient As Long
Dim VAR_neuer_patient As Long

und dann erst die Wertzuweisung vornehmen

VAR_alter_patient = Forms!FM_rezepte_eingabeform.tf_patient
Var_neuer_patient = Me.list_rezepte.Column(0)

Stelle zudem in die 2. Zeile JEDES Moduls 'Option Explicit' das zwingt dich zur Deklaration und verhindert VIELE Probleme.
Und stelle unter 'Extras' ... 'Optionen' ein, daß die Variablendeklaration erforderlich ist - Haken setzen - damit wird bei jedem neuen Modul 'Option Explicit' automatisch eingetragen.

Ohne Deklarieren der Variablen erhalten sie den Datentyp 'Variant' und somit ist ein Vergleich der Inhalte mehr als unsicher.
Dukannst das leicht mit untenstehender Routine nachvollziehen, indem du sie in ein Standardmodul kopierst und dann mal ausführst:


Public Sub vergl()

Dim x As Variant
Dim y As Variant

x = 3
y = "3"

If x = y Then
    MsgBox "gleich"
Else
    MsgBox "nicht gleich"
End If

End Sub

elvodia

Das mit der Definition hat wunderbar geklappt.