Sziasztok!
Qt-ben kezdtem el írni egy hálózat menedzsment programot (V2),
és a Qt és PostgreSql viszonylatában ütköztem egy problémába. Hiba esetén ugye a QSqlError objektumból tudhatjuk meg a hiba paramétereit. Itt a szöveges hibaüzenetekből szépen kiderül, hogy mi a hibát kiváltó ok. A programból is kényelmesen kezelhető numerikus hiba kódot viszont nem adja vissza a QSqlError osztály. A number() metódus mindig -1 -et ad vissza.
Ha valaki használ Qt-t és PostgreSql-t (egyszerre) árulja már el, miből találja ki, hogy mi volt a hiba, ha nem sikerül egy adatbázis művelet?
- 1236 megtekintés
Hozzászólások
Szia,
Talán segít, nekem VS2010 alatt debuggolva a következő sor a MySQL serverrel nem létező host ("unknown MySQL server host...") esetén 2005-ös hibakódot adott vissza. Ugyan ez a kód PostgreSQL esetén nálam is -1 értékkel tér vissza.
//conDB --> PSqlDatabase*
this->conDB->setHostName(host);
this->conDB->setPort(port);
this->conDB->setDatabaseName(dbname);
this->conDB->setUserName(username);
this->conDB->setPassword(password);
bool bResult = this->conDB->open();
if (!bResult)
{
error = this->conDB->lastError().text();
int iError = this->conDB->lastError().number();
delete this->conDB;
this->conDB = 0;
}
Ez PSQL plugin hiba...
Itt egy PATCH a hibára. Én 4.7.1-et használok, most jött ki a 4.7.2, de szerintem még mindig nem javították!!!!
Szerk.: Így nézegetve a PATCH-et, szerencsére csak a setNumber hiányzik :-(. A szöveges üzenet azért jó ==>> megmondja mi volt a hiba! Logolni is jó (persze szebb lenne hibakóddal), a felhasználó felé is inkább a szöveges üzenetet mutatom. Azt egy jó struktúra segít eldönteni futás közben a programban, hogy kapcsolódni nem tudunk vagy az SQL hibázik.
Attila, Perger
-----------------------------------------------------
"Az a szoftver, amelyiket nem fejlesztik, az halott!"
- A hozzászóláshoz be kell jelentkezni
Azért a postgresql is szégyellje magát, amiért 42P19 meg XX002 hibakódokat ad vissza. Ezt persze, hogy nem lehet értelmesen számmá konvertálni. Nem csodálom, hogy a Qt még annyi év után nem olvasztotta be ezt a patch-et.
- A hozzászóláshoz be kell jelentkezni
A postgresql doksijában azt írják (ha jól értem), hogy ők az SQL szabványt követik a hibaüzeneteknél. Ha ez igaz, akkor a Qt-nek vagy ha a szabvány rossz, akkor az SQL szabvány készítőinek kéne szégyellnie magát.
Mindenesetre nekem elég radikális nézeteim vannak a programhibák kezelése terén: Minden olyan programozót, aki elnagyolja, vagy ne agy isten elfelejti a korrekt hibakezelést, az udvariasan, de határozottan egy baseball ütővel kell eltanácsolni a billentyűzet közeléből. (Kivéve a hobbi projekteket, ott az ő baja.)
- A hozzászóláshoz be kell jelentkezni
Nem merültem bele annyira mint Attila.
A lastError().type()-ot kezdtem el használni, mert az jól működik. Viszont a number() tényleg -1 et ad vissza postgresql stop után is (Qt 4.6.2).
http://doc.qt.nokia.com/4.7-snapshot/qsqlerror.html#ErrorType-enum
- A hozzászóláshoz be kell jelentkezni
A lastError.type() enyhén szólva durva felosztása a hibáknak. Egy duplikált kulcs miatt meghiúsult insert-nél például "SQL statement syntax error."-t kapok, ami nem sokat segít, és még csak nem is igaz.
Nagyon gáznak tartom. hogy erre, a hiba riportokban évekkel ezelőtt megjelent problémára nem tudják elvégezni a javítást, úgy, hogy az igazándiból már létezik, csak hát leszarják. A pach-elés pedig jelentősen megnehezíti egy program telepítését, legalábbis nekem fogalmam sincs hogyan magyarázom el a csomagkezelőnek, hogy ezt a csomagot ne bántsa, ne akarja telepíteni. Van rá esély, hogy a Qt-t nem csak az én programom használja.
- A hozzászóláshoz be kell jelentkezni
Amennyire én tudom, kb ez van, a különféle SQL driverek ennyire vannak megírva, a MySQL driverből is hiányzik egy halom dolog implementációja. A sima errortext ami még általában használható.
Más dolgok foglalták le a fejlesztők figyelmét, főként, mikor a nokiának nyomni kellett a sok okosságot...
- A hozzászóláshoz be kell jelentkezni
törölve
- A hozzászóláshoz be kell jelentkezni