Russian Qt Forum
Сентябрь 30, 2024, 20:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: MySQL ошибка при выполнении запроса, возвращающего NULL  (Прочитано 2097 раз)
z11t3
Гость
« : Октябрь 11, 2010, 11:48 »

Два запроса:
Цитировать
sqlQuery.prepare("SELECT * FROM ti ORDER BY tiid DESC LIMIT 1");
            sqlQuery.exec();
            sqlQuery.next();
            Archiver.countTI = sqlQuery.value(0).toInt();//полученное количество записей в текущей рабочей таблице

            sqlQuery.prepare("SELECT * FROM messages ORDER BY msgid DESC LIMIT 1");
            sqlQuery.exec();//ВЫЛЕТАЕТ ТУТ
            sqlQuery.next();
            Archiver.countMS = sqlQuery.value(0).toInt();//так-же для сообщений
Вылетает следующий эксцепшн:



Таблица ti содержит примерно 700к записей.
Таблица messages содержит примерно 0 записей.
Как обойти сей момент кодом?

Пробовал:
Цитировать
if (sqlQuery.exec())
            {
               sqlQuery.next();
               Archiver.countMS = sqlQuery.value(0).toInt();//так-же для сообщений
            }
            else
               Archiver.countMS = 0;
Что-то никак не найду в документации нужной инфы, ну не создавать же в конце концов запись в таблице =(
Есть идея запросить размер так:
Цитировать
sqlQuery.prepare("SELECT COUNT(*) FROM tc");
Но она несколько не устраивает
1) запрос этот дольше вышеприведенного
2) не гаратируется точность (проверено для таблиц >>1M записей)
Записан
shirushizo
Гость
« Ответ #1 : Октябрь 11, 2010, 17:47 »

Код:
f (sqlQuery.exec())
            {
               sqlQuery.next();
               Archiver.countMS = sqlQuery.value(0).toInt();//так-же для сообщений
            }
            else
               Archiver.countMS = 0;

bool QSqlQuery::exec() возвращает true, если запрос выполнен успешно, даже при нулевом количестве возвращаемых записей, а bool QSqlQuery::next() возвращает true, если курсор не вышел за датасэт. Так должно сработать:
Код:
if (sqlQuery.next())
               Archiver.countMS = sqlQuery.value(0).toInt();//так-же для сообщений
            else
               Archiver.countMS = 0;
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 22.