Note: Forums will be making significant UX changes to address key usability improvements surrounding search, discoverability and navigation. To learn more about these changes please visit the announcement which can be found HERE.

已答覆 > >= = irgendwie dynamisch ablegen

  • Mittwoch, 9. Mai 2012 19:08
     
     

    Hi zusammen,
    ich möchte innerhalb eines Programms eine Zahl folgender Maßen prüfen

    if Variable> 1 then
    if Variable>= 1 then
    if Variable= 1 then

    jetzt möchte ich aber irgendwie den Operator dynamisch halten. Ich möchte gerne irgendwie
    if Variable meinOperator 1 then

    kann ich sowas irgendwie lösen, oder müßte ich das anders machen (select case ? )

    Gruss

Alle Antworten

  • Mittwoch, 9. Mai 2012 19:53
     
     Beantwortet

    Hallo Thomas,

    man könnte das über eine eigene Funktion machen. Etwa so:


    Public Class Form1

      Public Enum enmCompareOperator
        Equal = 1
        Greater_Or_Equal
        Greater
      End Enum


      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Variable As Integer = 1
        Dim meinOperator As enmCompareOperator

        meinOperator = enmCompareOperator.Greater
        MsgBox(Compare(Variable, meinOperator, 1).ToString)

        meinOperator = enmCompareOperator.Greater_Or_Equal
        MsgBox(Compare(Variable, meinOperator, 1).ToString)

        meinOperator = enmCompareOperator.Equal
        MsgBox(Compare(Variable, meinOperator, 1).ToString)
      End Sub


      Public Function Compare(ByVal Value1 As Integer, _
                                           ByVal CompareOperator As enmCompareOperator, _
                                           ByVal Value2 As Integer) As Boolean
        Select Case CompareOperator
          Case enmCompareOperator.Equal
            If Value1 = Value2 Then
              Return True
            Else
              Return False
            End If

          Case enmCompareOperator.Greater_Or_Equal
            If Value1 >= Value2 Then
              Return True
            Else
              Return False
            End If

          Case enmCompareOperator.Greater
            If Value1 > Value2 Then
              Return True
            Else
              Return False
            End If

          Case Else
            Throw New ArgumentException("Invalid CompareOperator: " & CompareOperator.ToString)

        End Select
      End Function

    End Class


  • Mittwoch, 9. Mai 2012 20:18
     
     Beantwortet Enthält Code

    Servus Thomas

    also ich bin hier nicht der Experte, aber ich habe mal das Problem mit einem Sql-Statement gelöst.

    als Beispiel:

    Select 1>2 as Erg     gibt 0 zurück

    Select 1<2 as Erg     gibt -1 zurück

    Der Vorteil ist, das ein SQL-String/Statement dynamisch aufgebaut werden kann und SQL eine Menge solcher Vergleiche oder Prüfungen zuläst und unterstützt. Dies gilt insbesonder dann, wenn der Vergleich durch User defeniert werden und bei Programmerstellung nicht alle Möglichkeiten definiert werden können.

    Ich hoffe das hilft dir weiter ... mfg eem monarch

    PS: Auch komplexe Math-Ausdrück lassen sich so auflösen :-)

    Hier noch ein Codebeispiel

        Dim con As New OleDbConnection
        Dim cmd As New OleDbCommand
        Dim Erg As String
        Private Sub Statements()
            Dim Statements(3) As String
            'Hier können die Statements dynamisch aufgebaut werden (ich gebe für das Beispiel mal 4 Statements vor)
            Statements(0) = "1>2"
            Statements(1) = "1<2"
            Statements(2) = "(20-4)/8"
            Statements(3) = "0/3 + Halligalli"
            For i = 0 To 3
                MsgBox(SQLAuswertung(Statements(i)) & "(" & Statements(i) & ")", vbOKOnly)
            Next
        End Sub
        Private Function SQLAuswertung(ByVal Statement As String) As String
            Try
                con.ConnectionString = My.Settings.MonarchUFPConnectionString
                cmd.Connection = con
                con.Open()
                cmd.CommandText = "Select " & Statement & " as Erg"
                SQLAuswertung = cmd.ExecuteScalar
            Catch
                SQLAuswertung = "FEHLER im Statement"
            End Try
            con.Close()
        End Function

  • Mittwoch, 23. Mai 2012 15:53
    Besitzer
     
     

    Hallo Thomas Klinger2,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.