Привет. Qt 4.6.2, MinGW, Oracle 10g.
Не могу понять почему натыкаюсь на сообщение
"ORA-03106: фатальная ошибка двухзадачного коммуникационного протокола"
в следующем коде:
bool DataDisp::test()
{
if (!db.open())
{
DebugLog::debugWr("test-open:" + db.lastError().text());
return false;
}
db.transaction();
QString res;
try{
QSqlQuery q;
if(!q.prepare("begin ? := 'test'; end;"))
{
DebugLog::debugWr("test-prepare:" + q.lastError().text());
db.close();
return false;
}
QVariant rr(QVariant::String);
//QVariant rr(" ");
q.bindValue(0, rr, QSql::Out);
if (!q.exec())
{
DebugLog::debugWr("test-exec:" + q.lastError().text());
db.rollback();
db.close();
return false;
}
res = q.boundValue(0).value<QString>();
db.commit();
db.close();
}catch(...)
{
db.rollback();
db.close();
throw;
}
}
Если вместо QVariant rr(QVariant::String); использовать QVariant rr(" "); то ошибка пропадает, но при этом q.boundValue(0) возвращает не строку 'test', а только её часть - столько первых символов, сколько было пробелов в QVariant rr(" ");.
Понимаю, что можно сделать QString rr(1024, " "); но это, как бы так сказать, не эротично.
В чём причина такого странного поведения?