Название: 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 :)
Хитро :)
|