src/sql/drivers/tds/qsql_tds.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/src/sql/drivers/tds/qsql_tds.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/sql/drivers/tds/qsql_tds.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -164,13 +164,13 @@
 
 extern "C" {
 static int CS_PUBLIC qTdsMsgHandler (DBPROCESS* dbproc,
-                            DBINT /*msgno*/,
+                            DBINT msgno,
                             int msgstate,
                             int severity,
                             char* msgtext,
-                            char* /*srvname*/,
+                            char* srvname,
                             char* /*procname*/,
-                            int /*line*/)
+                            int line)
 {
     QTDSResultPrivate* p = errs()->value(dbproc);
 
@@ -181,9 +181,20 @@
     }
 
     if (severity > 0) {
-        QString errMsg = QString::fromLatin1("%1 (%2)").arg(QString::fromAscii(msgtext)).arg(
-                                    msgstate);
+        QString errMsg = QString::fromLatin1("%1 (Msg %2, Level %3, State %4, Server %5, Line %6)")
+                         .arg(QString::fromAscii(msgtext))
+                         .arg(msgno)
+                         .arg(severity)
+                         .arg(msgstate)
+                         .arg(QString::fromAscii(srvname))
+                         .arg(line);
         p->addErrorMsg(errMsg);
+        if (severity > 10) {
+            // Severe messages are really errors in the sense of lastError
+            errMsg = p->getErrorMsgs();
+            p->lastError = qMakeError(errMsg, QSqlError::UnknownError, msgno);
+            p->clearErrorMsgs();
+        }
     }
 
     return INT_CANCEL;