Привет. 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, " "); но это, как бы так сказать, не эротично. 

В чём причина такого странного поведения?