Seite 1 von 1

QSqlQuery Fehlerauswertung

Verfasst: 16. Juli 2012 11:34
von Schubi
Hi ich versuche Gerade eine Datenbankanbindung zu schreiben. Soweit Funktioniert das ganze auch.
Nun möchte ich eine Fehlerauswertung durchführen. Um z.B. den Benutzer mitzuteilen was evtl. an seinem Datensatz falsch ist. Wie z.B. das der Primärschlüssel schon vergeben ist, oder es nicht erlaubt ist das eine null in gewissen feldern steht. Mein Problem aktuell ist, das bis auf den Datenbanktext alle Fehler die gleiche nummer haben oder vom gleichen Typ sind. Zudem wollte ich wissen ob man das automatische schreiben der Fehlermeldung in der DOS-Box vermeiden kann?
Eine manuelle vorabauswertung im Code des insertstatements ist nicht möglich da in diverse Tabellen der Datenbank geschrieben wird und somit die Datenbank die Fehlerfeststellung übernehmen soll. Und danach nur noch der entsprechende Fehler ausgewertet werden soll.

Die Verbindung wird über ODBC zu einem SQL Server hergestellt hier der Code

Code: Alles auswählen

    QString connectionString = "Driver={"+ driver + "};Server=" + server + ";Database=" + dbName;

    db = QSqlDatabase::addDatabase("QODBC", "MainDBConnection");
    db.setDatabaseName(connectionString);
    db.setUserName("xxx");
    db.setPassword("xxx");
	if (!db.open()){
		error = db.lastError().text();
		qDebug() << error << endl;
		status = false;
	}
	else
		qDebug() << "Verbindung steht" << endl;
Und hier der Code wie ich aktuell Versuche an den Fehler ran zu kommen. Leider sind die Informationen bis auf den databaseText nicht brauchbar da egal bei welchem Fehler identisch. Und jetzt jedes mal den String nach Schlagwörtern zu durchsuchen erscheint mir ein wenig unelegant zu sein. Hoffe ihr könnt mir einfachere Wege aufzeigen. Würde z.B. auch gern bei einem Insert von mehreren Datensätzen gern wissen welcher Key die PRIMARY KEY violation hervorruft.

Code: Alles auswählen

	 QSqlQuery query(db);
	 query.setForwardOnly(true);
         query.prepare(querry);
	 if(query.exec())
		qDebug() << "erfolgreich" << endl;
	  else
	  {
		qDebug() << "Datenbank Text: " <<query.lastError().databaseText() << endl;
		qDebug() << "Treiber Text: " <<query.lastError().driverText() << endl;
		qDebug() << "Fehler nummer: " <<query.lastError().number() << endl;
		qDebug() << "Text: " <<query.lastError().text() << endl;
		qDebug() << "Fehler type: " <<query.lastError().type() << endl;
	}

	 query.clear();
Danke schon mal für eure Hilfe

Gruß

Schubi