Russian Qt Forum

Qt => Вопросы новичков => Тема начата: bk-201 от Май 26, 2012, 16:24



Название: QSqlQuery::size() возвращает -1. В чем может быть дело?
Отправлено: 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();
}
 
 


Название: Re: QSqlQuery::size() возвращает -1. В чем может быть дело?
Отправлено: LisandreL от Май 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.


Название: Re: QSqlQuery::size() возвращает -1. В чем может быть дело?
Отправлено: bk-201 от Май 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.

Действительно не поддерживает...
А можно ли каким-нибудь другим способом получить размер?


Название: Re: QSqlQuery::size() возвращает -1. В чем может быть дело?
Отправлено: bk-201 от Май 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;
}
 


Название: Re: QSqlQuery::size() возвращает -1. В чем может быть дело?
Отправлено: kibsoft от Май 26, 2012, 22:06
А можно SELECT COUNT(*) FROM task_list :)


Название: Re: QSqlQuery::size() возвращает -1. В чем может быть дело?
Отправлено: bk-201 от Май 26, 2012, 23:55
А можно SELECT COUNT(*) FROM task_list :)

Хитро :)