timer+db abfrage funzt net

  • VB.NET

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

    timer+db abfrage funzt net

    hi

    ich verzweifele bald... ich krieg das nicht hin...


    ich habe einen timer der alle 1000 millisekunden etwas aus einer db abfragen soll. und das funktioniert schon nicht, ich kriege immer die meldung:
    Die 'ConnectionString'-Eigenschaft darf nicht geändert werden.Der aktuelle Status der Verbindung ist 'Geöffnet'.

    aber der Status kann gar nicht 'geöffnet' sein, da ich einmal den ganzen code bis auf die timer sub auskommentiert habe und diese meldung trotzdem kommt.
    wenn der code nicht auskommentiert ist werden alle offenen connection wieder direkt nach der abfrage geschlossen.

    mein code:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim con As New Odbc.OdbcConnection
    3. Dim cmd As New Odbc.OdbcCommand
    4. Dim reader As Odbc.OdbcDataReader
    5. con.ConnectionString = "Provider=MSDASQL;Driver={MySQL ODBC 3.51 Driver};Server=127.0.0.1;Uid=root;Database=nachrichten;"
    6. cmd.Connection = con
    7. cmd.CommandText = "SELECT * FROM nachrichten WHERE empfaengerid = '" & intUserid & "'"
    8. Try
    9. con.Open()
    10. reader = cmd.ExecuteReader
    11. Do While reader.Read
    12. If reader("neue_nachricht") = "1" Then
    13. MessageBox.Show("neue nachricht")
    14. Else
    15. MessageBox.Show("keine neue nachricht")
    16. End If
    17. reader.Close()
    18. con.Close()
    19. Loop
    20. Catch ex As Exception
    21. MessageBox.Show(ex.Message)
    22. con.Close()
    23. End Try
    24. End Sub


    ich hoffe ihr könnt mir helfen oder mir sagen wie es anders (vlt. besser) geht.
    danke schonmal im vorraus.


    mfg
    wsl
    hi,

    das hab ich jetzt geschafft das problem zu lösen.
    aber jetzt habe ich ein andres:

    da ich einen timer verbaut habe bekomme ich alle 1000 Millisekunden eine MessageBox angezeigt, was ich nicht will.
    ich will die messagebox nur 1mal angezeigt kriegen und dann nicht mehr. aber wie mach ich das?
    mein derzeitiger code:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim con As New Odbc.OdbcConnection
    3. Dim cmd As New Odbc.OdbcCommand
    4. Dim reader As Odbc.OdbcDataReader
    5. con.ConnectionString = "Provider=MSDASQL;Driver={MySQL ODBC 3.51 Driver};Server=127.0.0.1;Uid=root;Database=messenger;"
    6. cmd.Connection = con
    7. cmd.CommandText = "SELECT * FROM nachrichten WHERE empfaengerid = '" & intUserid & "'"
    8. Try
    9. con.Open()
    10. reader = cmd.ExecuteReader
    11. reader.Read()
    12. If reader("neue_nachricht") = "1" Then
    13. MessageBox.Show("neue nachricht")
    14. Else
    15. MessageBox.Show("keine neue nachricht")
    16. End If
    17. reader.Close()
    18. con.Close()
    19. Catch ex As Exception
    20. MessageBox.Show(ex.Message)
    21. End Try
    22. End Sub

    VB.NET-Quellcode

    1. Dim mes As Boolean = false
    2. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    3. [...]
    4. Else
    5. If mes = false Then
    6. MessageBox.Show("keine neue nachricht")
    7. mes = true
    8. End If
    9. End If


    Also einmal wirds angezeigt(mes = false) und dann nicht mehr (mes = true)