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!!!!!!!
- 4799 megtekintés
Hozzászólások
a kapcsolatot vagy mindig ujraepited, vagy ciklus elejen megnezed el-e meg
- A hozzászóláshoz be kell jelentkezni
En is lattam mar ezt a javaslatot a neten :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
100-2000 Select utan
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Koszi, Sleep-et tettem a thread-ba 200 ms-al (mivel a valos vilagot lemodellezve, nincs olyan gyors valtozas ami indokolna a folyamatos lekerdezest.)
Mukodik rendben a program.
Ezek szerint a QSqlQuery::exec() aszinkron es muszaj kesleltetest betenni. Koszi tippet a timestamp-ra! :)
- A hozzászóláshoz be kell jelentkezni