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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery::size() возвращает -1. В чем может быть дело?  (Прочитано 3213 раз)
bk-201
Гость
« : Май 26, 2012, 16:24 »

Всем привет!

Метод QSqlQuery::size() возвращает -1. Из документации следует, -1 возвращается тогда, когда таблица не выделена, таблица не активна. Также там упоминается, что -1 возвращается, когда невозможно подсчитать размер и, когда бд не содержит информации о кол-ве строк. (Возможно я что-нибудь напутал)

Методы isActive() и isSelect() возвращаю true, значит остаются только последние два варианта. В чем может быть проблема?

Код
C++ (Qt)
void MainWindow::update_doc()
{
QTreeWidget *pTreeWidget = qobject_cast<QTreeWidget*>(dListTask->widget());
QTreeWidgetItem *pitem = 0;
 
qDebug() << task_table.size();
 
if(!task_table.exec("select * from task_list"))
qDebug() << task_table.lastError().text();
 
qDebug() << task_table.isActive();
qDebug() << task_table.isSelect();
qDebug() << task_table.size();
 
// value(int)
// 0 - id
// 1 - task_create
// 2 - task_dead
// 3 - task_rem
// 5 - des
while(task_table.next())
{
pitem = new QTreeWidgetItem(pTreeWidget);
pitem->setText(0, task_table.value(1).toString());
}
}
 
void MainWindow::slot_open_user_database(QString str_user, QString str_path)
{
user_name = str_user;
 
task_database = QSqlDatabase::addDatabase("QSQLITE", "open_database");
task_database.setDatabaseName(str_path + user_name + ".data");
 
       if(!task_database.open())
{
qDebug() << task_database.lastError().text();
return;
}
 
task_table = QSqlQuery(task_database);
 
update_doc();
this->show();
}
 
 
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Май 26, 2012, 16:57 »

Драйвер БД может в принципе не поддерживать такую возможность.
Код
C++ (Qt)
QSqlDriver::hasFeature ( DriverFeature feature ) const
QSqlDriver::QuerySize
// Whether the database is capable of reporting the size of a query.
// Note that some databases do not support returning the size (i.e. number of rows returned) of a query,
// in which case QSqlQuery::size() will return -1.
Записан
bk-201
Гость
« Ответ #2 : Май 26, 2012, 20:02 »

Драйвер БД может в принципе не поддерживать такую возможность.
Код
C++ (Qt)
QSqlDriver::hasFeature ( DriverFeature feature ) const
QSqlDriver::QuerySize
// Whether the database is capable of reporting the size of a query.
// Note that some databases do not support returning the size (i.e. number of rows returned) of a query,
// in which case QSqlQuery::size() will return -1.

Действительно не поддерживает...
А можно ли каким-нибудь другим способом получить размер?
Записан
bk-201
Гость
« Ответ #3 : Май 26, 2012, 21:11 »

Уже нашел решение. Возможно, я поступил несовсем правильно, и есть другой способ получить размер.
Но я сделал проще. Написал такую функцию:

Код
C++ (Qt)
int MainWindow::get_size_database()
{
int size = 0;
 
if(!task_table.exec("select * from task_list"))
qDebug() << task_table.lastError().text();
 
while(task_table.next())
size++;
 
return size;
}
 
« Последнее редактирование: Май 26, 2012, 22:00 от enot » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #4 : Май 26, 2012, 22:06 »

А можно SELECT COUNT(*) FROM task_list Улыбающийся
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
bk-201
Гость
« Ответ #5 : Май 26, 2012, 23:55 »

А можно SELECT COUNT(*) FROM task_list Улыбающийся

Хитро Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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