Hello,

I have a stored procedure declared in a SQL Server 2005 database, declared as followed:

Qt Code:
  1. CREATE PROCEDURE insertCustomer
  2. @CustomerMap varchar(32),
  3. @Result int OUT,
  4. @Message nvarchar(255) OUT AS
  5.  
  6. SELECT * FROM Customers WHERE MapName = @CustomerMap
  7. IF @@ROWCOUNT <> 0 BEGIN
  8. SET @Message='Er bestaat al een klantmap met deze naam...'
  9. SET @Result=1
  10. RETURN
  11. END
  12.  
  13. INSERT INTO Customers (MapName, Status) VALUES (@CustomerMap, 'N')
  14. SET @Message='OK'
  15. SET @Result=0
  16. RETURN
To copy to clipboard, switch view to plain text mode 

In Qt, I want to execute this procedure, and get my result and message back.

I amusing the following code:

Qt Code:
  1. OdbcDbHandler(QString OdbcDriver, QString Host, QString Database, QString User, QString Password)
  2. {
  3. m_dbDriver = OdbcDriver;
  4. m_dbHost = Host;
  5. m_dbDatabase = Database;
  6. m_dbUser = User;
  7. m_dbPass = Password;
  8.  
  9. QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
  10. db.setDatabaseName("Driver={" + OdbcDriver + "};Server=" + Host + ";Database=" + Database + ";");
  11. db.setUserName(m_dbUser);
  12. db.setPassword(m_dbPass);
  13. }
  14.  
  15. bool open()
  16. {
  17. return QSqlDatabase::database().open();
  18. }
  19.  
  20. bool execProcedure (DbProcedure Procedure)
  21. {
  22. QSqlDatabase db = QSqlDatabase::database();
  23.  
  24. if (!db.isOpen())
  25. {
  26. if (!db.open())
  27. return false;
  28. }
  29.  
  30. QSqlQuery query;
  31.  
  32. query.prepare("{ CALL insertCustomer (?, ?, ?) }");
  33.  
  34. QVariant Map = "customermap";
  35. QVariant Result = -1;
  36. QVariant Message("");
  37.  
  38. query.bindValue(0, Map);
  39. query.bindValue(1, Result, QSql::Out);
  40. query.bindValue(2, Message, QSql::Out);
  41.  
  42. if(!query.exec())
  43. {
  44. QString error = query.lastError().text();
  45. return false;
  46. }
  47.  
  48. query.nextResult();
  49.  
  50. Result = query.boundValue(1);
  51. Message = query.boundValue(2);
  52.  
  53. return true;
  54. }
To copy to clipboard, switch view to plain text mode 

The stored procedures executes as expected and my result code is set, to 0 or 1, depending on what i put int.
However, Message always seems to be empty, while this should be set too.

Anyone any clue what I'm doing wrong?