SQLQuery + Timer + ListView + Form



  • Hallo,

    ich hab ein kleines Problem und weiß nicht genau wo ich ansetzen soll.
    Undzwar hab ich ListView deren Einträge alle 5 sek. durch Daten aus einer Datenbank erstellt wird. Das funktioniert auch alles soweit wunderbar, jedoch ändert sich der Curser jedesmal in crHourGlas während die ListView aktualisiert wird. Das alleine würde mich ja noch nichtmal stören, jedoch kann man in der Zeit keine Eingaben mehr im Edit vornehmen bzw. die vorgenommenen Eingaben werden erst nach dem Update der Listview eingetragen.

    Was mich noch unsicherer macht, ist die Tatsache das der Cursor sich sogar
    auf nem 2. Form verändert wenn diese Abfrage durchläuft obwohl das eigentlich Form wo der Update stattfindet versteckt (Hide) ist.

    Da ich nicht genau weiß ob die "Eingabe-Blockade" durch den Update der TListView, die SQLQuery oder den Timer verursacht wird währe ich dankbar wenn mir jemand von euch evtl. nen Tipp geben kann.

    Ach ja, btw. es ist auch nicht schön das die ListView beim Refresh der Daten
    kurz Leer und dann wieder voll ist...auf die dauer nervt das ziemlich 🙂
    Kann man nicht einfach irgendwie der ListView sagen "und jetzt bitte reloaden
    undzwar so schnell das das Auge es garnicht sieht"? 😉

    Vielen Dank schonmal für eure Hilfe.

    Gruß
    czarnetz



  • Erster Ansatz währe zu überlegen ob ein Update per Timer nötig ist.
    Oder wird deine Datenbank von einem anderen Programm mit Daten gefüllt ?
    Wenn deine Datenbank etwas größer ist dauert die Lieferung von mySQL an deine Query auch einige Zeit ....



  • Hi xy,

    ja, es ist eine art Online-Status. Und in der Datenbank stehen
    die User mit Ihrem Status (online/offline). Der Status wird verändert
    über einen Click auf einer Webseite demnach muss das Programm alle x sek. sich die aktuellste Liste vom Server holen.

    Gruß



  • Bevor du den ListView leerst:

    ListView1->Items->BeginUpdate();
    
    ListView1->Clear();
    //Alle Items hinzufügen
    
    ListView1->Items->EndUpdate();
    

    Dadurch wird der ListView während der Änderung nicht neu gezeichnet.



  • Hehe 😉

    genau das hab ich auch grad rausgefunden und es funzt *gg*

    Nur bleibt mein Problem mit dem Mauscursor der in jedem anderen Form als Sanduhr dargestellt wird und während des ListViewUpdates keine Eingaben in Edit-Felden möglich ist 😞



  • dann solltest du mal überlegen die sql queries in einem eigenen thread ablaufen zu lassen. somit bleibt deine eingabe maske immer aktiv


Anmelden zum Antworten