MySQL Abfrage über Timer - Message Box bei neuem Eintrag in die Datenbank

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    MySQL Abfrage über Timer - Message Box bei neuem Eintrag in die Datenbank

    Hallo, ich schreibe gerade an einem Tool, das alle 30 Sekunden in einer Mysql Datenbank unseres Radios die Wunschboxeinträge auslesen soll und in einem DatagridView Darstellen soll.

    Das klappt bisher schon ganz gut, ausser an 3 Problemen an denen ich gerade sitze.
    Es sei dazu gesagt das ich noch in der Lernphase bin mit VB .NET 2013 und hier und da einen kleinen Schuber benötige wie ich an die Lösung komme.

    1. Problem das ich habe.

    Im Datagridview wird eine Leerzeile aufgeführt wenn ich die Wünsche aus der Datenbank auslesen möchte, und kein Eintrag vorhanden ist.
    Ich habe bereits versucht mit einem Clear Befehl diese Zeile zu entfernen Ohne erfolg.

    Hier ein Screenshot zum veranschaulichen:


    Der Code dazu der das Füllen soll ist folgender:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. 'Dim Conn As New MySqlConnection
    3. Dim da As MySqlDataAdapter
    4. Dim dt As New DataTable
    5. Con.ConnectionString = sqlConnString
    6. da = New MySqlDataAdapter("SELECT rsgb_user_name AS Name, rsgb_user_ort AS Ort, rsgb_interpret AS Interpret, rsgb_title AS Titel, rsgb_gruss AS Grusstext, rsgb_time AS Zeit FROM fusion7g961_gr_radiostatus_grussbox", Con)
    7. da.Fill(dt)
    8. DataGridView1.DataSource = dt
    9. Label2.Text = DataGridView1.RowCount - 1
    10. If Label2.Text > 0 Then
    11. MsgBox("Es sind Musikwünsche in der Wunschbox")
    12. End If
    13. Con.Close()
    14. End Sub


    2. Problem: Message Box soll erscheinen wenn neuer Eintrag in Datenbank Dazukommt.


    Es kann ja nun passieren, das Schon 4 Wünsche oder so eingetragen sind. Sollte nun ein 5. Hinzukommen soll die Message Box wie oben im Code angegeben erscheinen.
    Bisher erscheint sie ja immer wenn ein Eintrag in der Datenbank ist.

    Mein Denkansatz ist der, das ich aus der Zeitspalte den Timestamp aufzeichnnen kann und in einer Variablen Speichern könnte.
    Dann könnte ich bei jedem Tick des Timers abfragen wann der letzte Eintrag war.
    Sollte der letzte Eintrag einen Höheren wert haben, könnte ich die Message Box einblenden.

    Ich weiss leider nicht wie ich das genau Umsetzen kann

    Das 3. Problem was ich habe ist, das ich den Timestamp aus der Datenbank gerne im Datagridview als Datum und Zeit Anzeigen lassen möchte.

    Hier habe ich keinen Lösungsansatz. bestimmt auch aus Mangel an Erfahrung.

    Zum Abschluss noch ein Bild wie es Aussieht wenn ein Eintrag in der Wunschbox steht.




    Ich hoffe ich habe alles verständlich ausgedrückt und bedanke mich Schon mal im Voraus für die Hilfe
    zu 1): Stell im Designer DGV.AllowUserAddRows=False ein.
    Weil die "Leerzeile" ist die Zufügezeile, die dem User eiglich ermöglicht, Datensätze einzutragen (was hier ja nicht gewünscht ist).

    zu 2)
    Ich rate immer dringend von untypisierten Datasets und untypisierten DataTables ab, und rate, stattdessen sich die Mühe zu machen, die typisierte Dataset-Technologie richtig zu erlernen.

    Zum Beispiel führt das in endlose Probleme, wenn alle 30 Sekunden die gesamte DGV-Datasource weggeschmissen und eine neue untergeschoben wird.

    Stattdessen binde an ein ordentlich aufgezogenes typisiertes Dataset, und binde nur einmal daran, und befülle es dann.
    Das würde dir auch die Möglichkeit eröffnen, gezielt nur die neuesten User-Wünsche dazuzuladen, statt jedesmal alle Datensätze.

    Aber ist viel Lernstoff, und du musst von vorne anfangen: Datenverarbeitungs-Vorraussetzungen

    Geht aber nix drumrum, denn letztlich - wenn du dein Projekt zuende bringst, wirst du das alles gelöst haben müssen, und wenn du es anners löst, als im gegebenen Link als Vorgehensweise vorgeschlagen -
    Dann ist höchstwahrscheinlich, dass deine Lösungen Murx sind: unnötig umständlich, unperformant, buggy, unwartbar.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    zu 2.)

    Da kann ich mich meinem Vorredner nur anschließen. Das ist zwar viel Lektüre aber wenn man es mal begriffen hat, kann man mit einem typisierten Dataset solche Projekte wie von dir beschrieben mit ein paar wenigen Codezeilen sehr schnell und komfortabel umsetzen. Und vor allem ist das Endprodukt dann nicht so fehleranfällig. Bei einem typisierten Dataset kümmert sich das Visual Studio schon um so viele Dinge auf die du bei einem untypisierten Dataset immer selbst achten musst. Dadurch wird der Code dann unnötig kompliziert und voll mit Fehlern die du kaum noch findest.
    Ich danke schon einmal für die Antworten.
    Gerne nehme ich mir die Zeit mich dort einzulesen, Schliesslich möchte ich ja was lernen und da denke ich spielt zeit keine rolle.
    Es wäre nur nicht schlecht einen Mentor zu haben, da ich mich im Selbststudium ein wenig schwer tu ab und zu.