Announcement

Collapse
No announcement yet.

Variable überprüfen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variable überprüfen

    Ich habe eine Variable1. Diese soll mit Tabelle1.Spalte1 verglichen werden, ob sie darin schon vorhanden ist.
    Das kann man ja mit Select COUNT(*) From Tabelle1 machen.
    Jetzt habe ich einen nun Treffer. Wenn das der Fall ist, ist Variable1=Variable1+1.
    Dies soll dann auch wieder überprüft werden, ob schon vorhanden in Tabelle1. Wenn ich erneut einen Treffer habe, dann wieder Variable1=Variable1+1 usw...
    Aber wie programmiere ich sowas - Schleifen etc. ??? Habe keine Ahnung!

    Ich habe mal was programmiert, was allerdings nicht richtig funktioniert. Hier mal der Code:
    <PRE>
    'hier wird Variable1 belegt
    Dim dr_bez() As DataRow = ds_bez.Tables("beziehungen").Select()
    idbez = dr_bez(i)("IDbez")

    Sprung1: 'ist die Sprungmarke des GoTo
    Dim sql_check As String = "Select COUNT(*) From vw_in_stamm_vorhanden Where IDbez='" & idbez & "' AND IDmat='" & idmat & "' "
    Dim cmd_check As New SqlCommand(sql_check, planconn)
    planconn.Open()
    Dim check As Integer
    check = cmd_check.ExecuteScalar
    planconn.Close()
    'Überprüfung, ob Variable1 in bestimmter Konstellation schon vorhanden ist
    If check > 0 Then
    idbez = dr_bez(i + 1)("IDbez")
    GoTo Sprung1
    End If
    ...
    'jetzt kommt nur noch das Insert-Kommando
    </PRE>

    Die Abarbeitung dauert ewig, wenn eine Übereinstimmung in der DB schon vorhanden ist!!! Ich weiß nicht mehr weiter - bitte helft mir!

    Danke, Rico.

    PS.: Die Benutzung von GoTo war nur eine Ausweichlösung. Normalerweise macht man das ja nicht...

  • #2
    Hallo!

    Für sowas gibt es folgende schleifen:

    Kopfgesteuert<pre>while &lt;Bedingung&gt;
    ...
    end while</pre>

    Fußgesteuert<pre>do
    ...
    loop until &lt;Bedingung&gt;</pre>

    weitere Hilfe -> 'F1

    Comment


    • #3
      Wie müßte bzw. könnte ich die Schleifen denn hier anhand meines Quellcodes realisieren???

      Kopf- und Fußgesteuert... was sagt das aus?

      Ich habe das mal so probiert (GoTo ist rausgenommen):
      <PRE>
      DO
      Dim sql_check As String = "Select COUNT(*) From vw_in_stamm_vorhanden Where IDbez='" & idbez & "' AND IDmat='" & idmat & "' "
      Dim cmd_check As New SqlCommand(sql_check, planconn)
      planconn.Open()
      Dim check As Integer
      check = cmd_check.ExecuteScalar
      planconn.Close()
      'Überprüfung, ob Variable1 in bestimmter Konstellation schon vorhanden ist
      If check > 0 Then
      idbez = dr_bez(i + 1)("IDbez")
      End If
      LOOP
      </PRE>
      Wird da dann die neu berechnete Variable idbez aus der If-Schleife wieder an den SQL-String übergeben??? Ansonsten bringt das ja nichts... würde ja in einer Endlosschleife enden?!
      &#10

      Comment


      • #4
        Hallo!

        Ich hab' das etwas geändert:
        <pre>...
        Dim sql_check As String
        Dim cmd_check As SqlCommand
        Dim check As Integer

        'Schleife solange durchlaufen, bis Variable1 in bestimmter Konstellation <u>nicht</u> vorhanden ist
        <b>Do</b>
        sql_check = "Select COUNT(*) From vw_in_stamm_vorhanden Where IDbez='" & idbez & "' AND IDmat='" & idmat & "' "
        cmd_check = New SqlCommand(sql_check, planconn)

        planconn.Open()
        try
        check = cmd_check.ExecuteScalar
        idbez = dr_bez(i + 1)("IDbez")
        catch ex as Exception
        'Fehlerbehandlung
        debug.writeline("Konstellationen ermitteln: " & ex.Message)
        finally
        planconn.Close()
        end try
        <b>Loop Until (check </b>=<b> 0)</b>
        ...</pre>

        Ich habe eine Fußgesteuerte Schleife gewählt weil sich das logisch am einfachsten mit deiner Problematik vereinbahren läßt - Zu Beginn hast Du ja noch keinen Wert für <font fach"courier">check</font>.<br>Das try-catch-finally ist um Fehler selbst abzufangen und zu beahndeln -> ''F1'' bzw. Google.

        Ein gravierender Fehler ist mir noch aufgefallen - ich bin mir nicht ganz im Klaren wie wichtig das unter .NET mit seiner Garbage-Collection ist, finde es aber doch wichtig zu sagen.<br>Du solltest NIE innerhalb einer Schleife Variablen deklarieren (-> DIM), da:<br>1) diese jedes Mal im Speicher angelegt werden und dadurch Speicher belegen - was mitunter schon mal der gesamte Speicher werden kann...<br>2) durch das wiederholte Anlegen der Variablen diese initialisiert werden und dadurch nie den Wert enthalten den sie zugewiesen bekamen.

        Hier und jetzt diese beiden Schleifen zu erklären finde ich nicht angebracht...<br>TIP: experimentier etwas herum und schreib dir ein paar Test-Programme, aber noch wichtiger, les' ein Buch und google mal nach diesen Themen - selbst damit beschäftigen läßt den "Groschen" meist tiefer fallen!

        Viel Erfolg!<br>
        &nbsp;&nbsp;&nbsp;Nico Stöckigt<br>
        <br&gt

        Comment

        Working...
        X