Russian Qt Forum

Qt => Базы данных => Тема начата: admsasha от Сентябрь 21, 2009, 08:14



Название: query.lastError().text() не выводит ошибку
Отправлено: admsasha от Сентябрь 21, 2009, 08:14
Код:
    
    QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("test");
    db.setUserName("mylogin");
    db.setPassword("mypassword");
    db.setHostName("127.0.0.1");


Этот код работает замечательно.
Код:
   QSqlQuery query(QSqlDatabase::database("test"));
   query.prepare("SELECT table from user");
   if(!query.exec()){
        qDebug() <<  query.lastError().text();
    }else{
         qDebug() << query.value(0);
    }
   

случайно ошибаюсь и пишу так
Код:
   QSqlQuery query(QSqlDatabase::database("test"));
   query.prepare("SELECT tble from user");
   if(!query.exec()){
        qDebug() <<  query.lastError().text();
    }else{
        qDebug() << query.value(0);
    }
   
но query.lastError().text() выдает "". Почему нет текста ? Как правильно вывести текст ошибки ?


Название: Re: query.lastError().text() не выводит ошибку
Отправлено: ecspertiza от Сентябрь 21, 2009, 11:01
Если я правильно понимаю то prepare() немного для другого предназначен

попробуй так
Код:
   QSqlQuery query;
   if(!query.exec("SELECT tble from user")){
        qDebug() << "Error" << query.lastError();
    }else{
        qDebug() << query.value(0);
    }


Название: Re: query.lastError().text() не выводит ошибку
Отправлено: admsasha от Сентябрь 21, 2009, 11:34
Если я правильно понимаю то prepare() немного для другого предназначен

попробуй так
Код:
   QSqlQuery query;
   if(!query.exec("SELECT tble from user")){
        qDebug() << "Error" << query.lastError();
    }else{
        qDebug() << query.value(0);
    }


Да, так показывает. Но мне нужно вставлять параметры в SQL, в случае prepare я делал это через bindValue, а тут как быть ?


Название: Re: query.lastError().text() не выводит ошибку
Отправлено: ecspertiza от Сентябрь 21, 2009, 12:24
Я просто думаю что это зависит от запросов, если ты делаешь просто Select то наверное не стоит пользоваться prepare()

А вот если с подстановкой параметров то можно и с prepare();

может prepare() если без параметров не отрабатывает или ещё что, точно сказать не могу.

Ты можешь формировать сначала строку запроса просто в QString а потом подставлять её в exec();

Ну и накройняк ты после выполнения exec() можешь посмотреть какой у тебя запрос в БД пошёл QSqlQuery::lastQuery();


Название: Re: query.lastError().text() не выводит ошибку
Отправлено: lit-uriy от Сентябрь 21, 2009, 12:54
Можно попробовать ещё тип ошибки проверять.
У меня были случаи, когда возвращается ошибка типа QSqlError::ConnectionError, но текста тоже ни какого.