Schleifenabfrage von Datenbankwert

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Lukas95.

    Schleifenabfrage von Datenbankwert

    Hallo liebe Community,

    ich stehe vor folgendem Problem bzw Denkfehler:

    Und zwar habe ich eine aktive Abfrage aus einer Mysql Datenbank laufen. Funktioniert auch alles soweit.
    Zweck dieser Abfrage ist es, den Wert "InterneNr" aus der Tabelle abzufragen. Von jedem Datensatz.
    Dieser Wert wird mit einer Listbox verglichen, ob dieser bereits vorhanden ist. Funktioniert auch.
    Das Programm soll nun, sollte dieser Wert in der Listbox nicht vorhanden sein, eine Aktion ausführen.
    Funktioniert aber nur bedingt - und zwar klappt diese Prozedur, aber nur mit dem aktuellsten Datensatz. Sprich, wenn ich Datensatz1 und Datensatz2 in der Tabelle in der Datenbank habe,
    checkt er nur Datensatz2 und lässt Datensatz1 links liegen.

    Die Abfrage läuft wie folgt:

    VB.NET-Quellcode

    1. Dim wert1 as String
    2. Dim Inhalt as String
    3. '
    4. cmd.CommandText = "SELECT * FROM Tabelle WHERE Status='0'"
    5. Try
    6. reader = cmd.ExecuteReader()
    7. Do While reader.Read
    8. wert1 = reader("InterneNr")
    9. Inhalt = reader("Inhalt")
    10. Loop
    11. reader.Close()
    12. conn.Close()
    13. Catch ex As Exception
    14. 'Fehler
    15. End Try


    Der abgefragte Wert verfügt über einen weiteren Wert, den 'Inhalt'.
    Dieser wird im weiteren Verlauf ebenfalls verglichen.
    Weiter folgt der Code aber erst einmal mit dem oben beschriebenen Vergleich der Listbox Items.

    VB.NET-Quellcode

    1. If Inhalt.Contains(LokalerStringMitfestgelegtemInhalt) Then
    2. 'Wenn Inhalt des Datensatzes mit LokalemDatensatz übereinstimmt
    3. If ListBox1.Items.Contains(wert1) Then
    4. 'Wiederholung der Abfrage (per Timer)
    5. Timer1.Start
    6. Else
    7. AktionAusführen()
    8. ListBox1.Items.Add(wert1)
    9. End If
    10. Else
    11. 'Inhalt des Datensatzes stimmt nicht mit LokalemDatensatz überein
    12. Timer1.start 'Abfrage startet erneut
    13. End if


    Mein Problem ist allerdings wie oben schon leicht angerissen, dass die Abfrage immer den letzten bzw neuesten Wert aus der Tabelle abfragt. Ist ja auch richtig so, da die Loop Abfrage nach einem Wert stoppt.
    Sobald ich den Rest von der Lokalen Abfrage allerdings in den Loop Bereich packe, startet er die Abfrage mitten in der Abfrage erneut und immer wieder. ?(

    Was ich brauche ist einfach folgendes: Abfrage der Spalten Wert1 und Inhalt aus der Datenbank. Vergleich, ob Wert1 bereits in Listbox vorhanden, wenn nicht

    VB.NET-Quellcode

    1. AktionAusführen()
    und die Listbox mit Wert1 als Item ergänzen. Und bei vorhandensein des Items Abfrage weiter durchführen mit jedem der Datensätze in der Tabelle.

    Ich mach mir das vermutlich selber komplizierter als es eigentlich ist, aber darum hätte ich ganz gerne einmal eine Anregung von euch, um meine grauen Zellen auf den richtigen Weg zu bringen... :D
    Vielen lieben Dank schon einmal...
    Willkommen im Forum.
    Leider ist nicht klar, wie Do-Schleife und If-Statement codetechnisch im Zusammenhang stehen. Und was meinst Du mit 'Wiederholung der Abfrage (per Timer)? Steht die Do-Schleife etwa im Timer_Tick-EventHandler? Dann braucht man sich ggf. über gar nix zu wundern. Zu wenig Infos für mich, um weiterhelfen zu können.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke schon einmal für deine Antwort.

    Um das ganze oben einmal außen vor zu lassen:

    Mir geht es eigentlich nur darum, dass per Timer eine Datenbankabfrage stattfindet, und die Datensätze mit einem bestimmten Wert herausgefiltert werden, mit einer lokalen Listbox verglichen werden, ob der Datensatz bzw die Datensatz ID schon vorhanden ist, und wenn nicht, auf diesen Reagiert wird. Vielleicht ist das ein wenig verständlicher :D