Bedingung in VBS

Versuche in VBS mehrere Bedingungen zu kombinieren, aber es klappt nicht.

If (rs.Fields(„Gewicht“) >= 1 AND rs.Fields(„Gewicht“) <= 950) then
            ts.Write             rs.Fields(„price“) & vbTab
        Else
            ts.Write             rs.Fields(„price“) + 5 & vbTab
        End if

Das hier klappt, aber ich kann keine zweite und dritte Bedingung anfügen. Weder mit AND, noch mit einer zweiten IF-Zeile. Nehme ich AND berechnet er im Endergebnis immer mit der ELSE-Zeile, nehme ich eine zweite IF-Zeile, macht er aus allen Preisen „1“ …

Was mache ich verkehrt? Bin Anfänger. :smile:

Hallo Jörg,

wie sehen denn deine Versuche mit der 3. AND-Bedingung aus? Zeig mal den Code.

Gruß, Andreas

Hallo Jörg,

wie schon gesagt, poste mal deine Versuche. Allerdings habe ich mit solchen Schachtelungen immer palaver. Oftmals kann dann ein select helfen:

Select Case rs.Fields(„Gewicht“)
Case Is = 100, Is = 500, Is

If rs.Fields(„Gewicht“) >= 1 AND rs.Fields(„Gewicht“) <= 950 Then
            ts.Write             rs.Fields(„price“) & vbTab
        Else
            ts.Write             rs.Fields(„price“) + 5 & vbTab
        End if
        
So klappt es noch.

Aber wenn ich jetzt die zusätzlichen Bedingungen ranhänge …

        If rs.Fields(„Gewicht“) >= 1 AND rs.Fields(„Gewicht“) <= 950 AND rs.Fields(„Hoehe“) < 35 AND rs.Fields(„Breite“) < 30 AND rs.Fields(„Schmalruecken“) < 14 Then
            ts.Write             rs.Fields(„price“) & vbTab
        Else
            ts.Write             rs.Fields(„price“) + 5 & vbTab
        End if

… springt er auf den Fall Else und haut gnadenlos überall immer die 5 drauf. Die Case-Sache sieht gut, aber das ist ein Beispiel, um begrenzte Daten aus einem einzigen Feld zu ziehen. Das funktioniert bei mir. Mein Problem ist, daß die Bedingungen aus mehreren Feldern erfüllt werden müssen.

Hallo Joerg,

dann must wohl du ein komplexeres Beispiel posten.

Als Idee: Ich gehe dann schon mal hin und setze quasi einen Startwert mit einem Default (am einfachsten Boolean).

Dann prüfe ich die einzelnen Kriterien und setze jewweils den Startwert ggfs. neu. Die weiteren Bedingungen testen dann zunächst den Startwert, um ggfs. weiter diesen zu verändern.

Am Ende hat der Startwert dann den „gesamten“ Kenntnisstand im Bauch.

So kann man die „Untersuchung“ portionieren.

fg

Dirk.P

Hallo Jörg,

also an der Syntax kann ich keinen Fehler sehen. Bist du denn sicher, dass „Hoehe“, „Breite“ und „Schmalruecken“ auch die richtigen Werte haben. Das kannst du ja leicht mit einer MsgBox testen.

Gruß, Andreas

Hallo Jörg,

habe gerade noch mal deine Antwort und den Kommentar von Andreas gelesen. Also alternativ:

Dim Zuschlag as boolean

If rs.Fields(„Gewicht“) >= 1 AND rs.Fields(„Gewicht“) = 1 AND rs.Fields(„Gewicht“)

Hallo Dirk und alle anderen, die sich die Zeit genommen haben :smile:,

a.) ich bin ein Kamel, den ich habe übersehen/vergessen mitzuteilen, daß sehr häufig die Felder Höhe/Breite/Schmalrücken leer(!) sind

b.) If (rs.Fields(„Gewicht“) >= 1) AND (rs.Fields(„Gewicht“) „“ hinzuschreiben - aber es klappt nicht …

Wer hat jetzt eine Idee??
Dickes Danke an alle!!!

Hallo Dirk und alle anderen, die sich die Zeit genommen haben :smile:,

a.) ich bin ein Kamel, den ich habe übersehen/vergessen mitzuteilen, daß sehr häufig die Felder Höhe/Breite/Schmalrücken leer(!) sind

b.) If (rs.Fields(„Gewicht“) >= 1) AND (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Hoehe“) < 35) AND (rs.Fields(„Breite“) < 30) AND (rs.Fields(„Schmalruecken“) < 14) Then
ts.Write rs.Fields(„price“) & vbTab
Else
ts.Write rs.Fields(„price“) + 5 & vbTab
End if

liefert das richtige Ergebnis (Klammern!!), aber das Ergebnis ist unerwünscht falsch, wenn eines oder alle der genannten Felder leer sind. Nun dachte ich, dieses mit einem einfach OR hinzubekommen, die Anweisung zu verdoppeln und <> „“ hinzuschreiben - aber es klappt nicht …

Wer hat jetzt eine Idee??
Dickes Danke an alle!!!

Hallo Jörg,

schon mal so probiert:
If (rs.Fields(„Gewicht“) >= 1) AND (rs.Fields(„Gewicht“)

Ist zwar lästig, aber:

val(rs.Fields(„price“)) liefert eine 0, wenn das Feld leer ist. (hab es nur so: val("") getestet)

Bitte beachten „“ und Null sind nicht dass selbe! Gggfs. haut das auch nicht hin, wenn das Feld Null ist, also nicht wenigstens 0 zugewiesen wurde. (Wenn du die Felder aufbaust könntest du Defaults zuweisen, alle 0?)

fg

Dirk.P

Die Lösung ist:

VBS akzeptiert mehrere Bedingungen, wenn es um ein identisches Feld aus der Datenbank geht, Wenn es mehrere Felder sind, müssen es mehrere Bedingungen sein.

Dann ist es ganz einfach:

If (rs.Fields(„Gewicht“) >= 1) AND (rs.Fields(„Gewicht“) <= 950) Then
            ts.Write rs.Fields(„price“) & vbTab
        Else
            ts.Write rs.Fields(„price“) + 5 & vbTab
        End if
        
        If (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Hoehe“) ="") Then
            ts.Write rs.Fields(„price“) & vbTab
        End if
        
        If (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Hoehe“) >= 35) Then
            ts.Write rs.Fields(„price“) + 5 & vbTab
        End if
        
        If (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Breite“) ="") Then
            ts.Write rs.Fields(„price“) & vbTab
        End if
        
        If (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Breite“) >= 30) Then
            ts.Write rs.Fields(„price“) + 5 & vbTab
        End if
        
        If (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Schmalruecken“) ="") Then
            ts.Write rs.Fields(„price“) & vbTab
        End if
        
        If (rs.Fields(„Gewicht“) <= 950) AND (rs.Fields(„Schmalruecken“) >= 15) Then
            ts.Write rs.Fields(„price“) + 5 & vbTab
        End if