-
Hallo Qtler,
ich habe eine Stored Procedure die mir NVARCHAR als Output liefern soll.
Mein Problem ist, dass ich auf Qt - Seite eine leeres QString bekomme.
Habe das Problem mit Qt - Version 5.3 und 5.5.1.
Ein resize von QString bringt zwar Resultat zurück,
aber es ist mir nicht bekannt wie groß das Rückgabewert letztendlich sein kann.In mehreren Blogs gefunden, dass das Problem seit Version 5 nicht mehr vorhanden ist.
Bei mir tritt es aber trotzdem auf.Google Tranlate:
Hello Qtler,I have a stored procedure which should give me NVARCHAR as output.
My problem is that I get an empty QString on Qt - page a.
Have the problem with Qt version 5.3 and 5.5.1.
Resizing QString returns result
but I do not know how big the return value can be.In several blogs, the problem is no longer available since version 5.
But it happens to me anyway.FG
Beispielcode:
QSqlDatabase database = QSqlDatabase::database(dbConnectionName); if (database.isValid()) if (!database.isOpen()) database.open(); QString declareVars; // initialize query QSqlQuery qrySql(database); // prepare query // QString qry = QString("EXEC [dbo].[getValueFromDB] :p1, :p2, :p3 OUTPUT, :p4 OUTPUT"); // :p3 = NVARCHAR(max), :p4 = INTEGER qrySql.prepare(qry); // for MSSqlServer only forward qrySql.setForwardOnly(true); // bind values, replace placeholder from input map values QMapIterator<QString, QVariant> itInput(inputVars); while(itInput.hasNext()) { itInput.next(); //qrySql.addBindValue(itInput.value(), QSql::In); qrySql.bindValue(itInput.key(), itInput.value(), QSql::In); } // bind output values, replace place holder from output map values QMapIterator<QString, QVariant> itOut(outputVars); while(itOut.hasNext()) { itOut.next(); if (itOut.value().type() == QVariant::String) { QString outPar = itOut.value().toString(); outPar.resize(100); qrySql.bindValue(itOut.key(), outPar, QSql::Out); } else qrySql.bindValue(itOut.key(), itOut.value(), QSql::Out); } // set cursor to begin outputVars.begin(); // execute stored procedure if(qrySql.exec()) { QMapIterator<QString, QVariant> it(qrySql.boundValues()); while(it.hasNext()) {// test values it.next(); qDebug() << it.key() << " : " << it.value().toByteArray(); } // get output values from stored procedure QMapIterator<QString, QVariant> itRepOut(outputVars); while(itRepOut.hasNext()) { // replace values in to output map outputVars.insert(itRepOut.key(), qrySql.boundValue(itRepOut.key()) ); }