MySQL lekerdezes ciklusban + Qt [MEGOLDVA]

Sziasztok!

Ket program van osszekapcsolva adatbazison keresztul. Egyik beirja a valtoztatast az adatbazisban, a masiknak eszre kell vennie es reagalni.

A masodik programmal lenne kerdesem, amelyik figyeli a valtoztatasokat.
Inditottam egy szalat, amelyben talalhato egy ciklus:


while (!exit)
{
if (query.exec(sql_cmd))
{
while(query.next())
{
//Lekerdezes eredmenyenek a begyujtese
}

// Lekerdezes eredmenyenek az osszehasonlitasa az elozo eredmennyel.
// Ha van valtozas akkor reagalni ra.
}
}

A problema, hogy csak bizonyos iteracio szam alatt mukodik, az felett a QSqlQuery kulonfele hiba uzeneteket ad vissza:
-MySQL server has gone away QMYSQL: Unable to execute query
-Lost connection to MySQL server during query QMYSQL: Unable to execute query
-Valami olyasmi hogy nem tudja az eroforrasokat felszabaditani.

Elgondolkodtam hogy ez-e a helyes ut? Mert azert ez folyamatos szerver terheltseget okoz. Talan be kellene tennem egy timer-be a kodot es mondjuk 500ms-ra allitva az ismetelt vegrehajtasi idot.
Mi a velemenyetek?
Mit mondana a nagy konyv?
Ugyanis olvastam informaciot a isActive() finish() metodusokrol de nem segitett.

Elore is koszonom a tanacsokat.
ui: Hogyan kell hasznalni a -t? Mert nekem nem csinalt "code indent".

Ugy tunik meg van a hiba!!
Nem figyeltem es ez okozott problemat es rejtelyes hibauzeneteket.

Fo szalban letrehoztam az adatbazis kapcsolatot (ami qsqldatabase tipusu persze). Munkaszalakban ugyanugy letrehoztam mas kapcsolatnevvel az adatbazis kapcsolatot pl.: QSqlDatabase db; db.addDatabase("QMYSQL","1");

Eddig OK. DE! A munkaszalban elegansan es nem figyelve ezt hasznaltam:
QSqlQuery query;
query.exec("AKARMILYEN SQL PARANCS");

Mi a baj? A QSqlQuery query az alapertelmezett adatbazis kapcsolatot hasznalja fel, ami a foszalban talalhato. Ha tobb szalbol probaltam futtatni a query.exec()-et akkor osszeomlott a program.

Megoldas? QSqlQuery query(db); MINDEN KULON SZALBAN!!!!!!!

Hozzászólások

a kapcsolatot vagy mindig ujraepited, vagy ciklus elejen megnezed el-e meg

Ez azért fura, milyen mennyiség felett döglik meg? Jobb híján kliens oldali iterációt csináltam már, hasonlóan nagy terhelés, sosem dobta a kapcsolatot.

Mindenesetre a várakoztatás beiktatása bölcs dolognak hangzik, gondolom a GUI felé kell kommunikálni, fél másodperc nem hiszem hogy sok különbséget jelent és könnyen lehet hogy megoldja a problémádat. Legrosszabb esetben újratervezés: kliens-szerver leprogramozása és akkor nagyobb kontroll van az egész felett, ez sem végtelenül bonyolult.

Elsonek, [ + code + ] kell hasznalnod.
Masodjara: while ciklusban nem szep dolog lekerdezni, foleg minden kesleltetes nelkul
Harmadjara: tegyel timestampet a tabladba, es modositaskor frissitsd, a masik oldalon meg csak azt kerdezd le, ami az elozo frissites ota tortent