Improve the use of the database

This commit is contained in:
Claveau Joshua
2020-06-03 19:46:27 +02:00
parent b445ce8934
commit 8ad876fb31
4 changed files with 29 additions and 34 deletions

View File

@@ -53,37 +53,6 @@ projectDataBase::~projectDataBase() {
m_data_base.close(); m_data_base.close();
} }
/**
* @brief projectDataBase::elementsInfoFromQuery
* @param query
* @return quickly return all information about elements from @query, ensure that all
* record returned by the query can be casted to string.
* Each item of the Qvector represent an element and each value of the QStringList represent the recorded value.
*/
QVector<QStringList> projectDataBase::elementsInfoFromQuery(const QString &query)
{
QVector<QStringList> result_;
QSqlQuery query_(query, m_data_base);
if (!query_.exec()) {
qDebug() << "Query error : " << query_.lastError();
}
while (query_.next())
{
QStringList record_;
auto i=0;
while (query_.value(i).isValid())
{
record_ << query_.value(i).toString();
++i;
}
result_ << record_;
}
return result_;
}
/** /**
* @brief projectDataBase::updateDB * @brief projectDataBase::updateDB
* Up to date the content of the data base. * Up to date the content of the data base.

View File

@@ -45,7 +45,6 @@ class projectDataBase : public QObject
public: public:
virtual ~projectDataBase() override; virtual ~projectDataBase() override;
QVector<QStringList> elementsInfoFromQuery(const QString &query);
void updateDB(); void updateDB();
QETProject *project() const; QETProject *project() const;
QSqlQuery newQuery(const QString &query = QString()); QSqlQuery newQuery(const QString &query = QString());

View File

@@ -24,6 +24,7 @@
#include <QFont> #include <QFont>
#include <QSqlQuery> #include <QSqlQuery>
#include <QSqlRecord> #include <QSqlRecord>
#include <QSqlError>
/** /**
@@ -183,7 +184,7 @@ void NomenclatureModel::query(const QString &query)
m_project->dataBase()->updateDB(); m_project->dataBase()->updateDB();
if (rm_) { if (rm_) {
setHeaderString(); setHeaderString();
m_record = m_project->dataBase()->elementsInfoFromQuery(m_query); fillValue();
connect(m_project->dataBase(), &projectDataBase::dataBaseUpdated, this, &NomenclatureModel::dataBaseUpdated); connect(m_project->dataBase(), &projectDataBase::dataBaseUpdated, this, &NomenclatureModel::dataBaseUpdated);
} }
} }
@@ -276,7 +277,10 @@ void NomenclatureModel::fromXml(const QDomElement &element)
*/ */
void NomenclatureModel::dataBaseUpdated() void NomenclatureModel::dataBaseUpdated()
{ {
auto new_record = m_project->dataBase()->elementsInfoFromQuery(m_query); auto original_record = m_record;
fillValue();
auto new_record = m_record;
m_record = original_record;
//This a very special case, if this nomenclature model is added //This a very special case, if this nomenclature model is added
//befor any element, column count return 0, so in this case we emit column inserted //befor any element, column count return 0, so in this case we emit column inserted
@@ -322,3 +326,25 @@ void NomenclatureModel::setHeaderString()
this->setHeaderData(i, Qt::Horizontal, header_name); this->setHeaderData(i, Qt::Horizontal, header_name);
} }
} }
void NomenclatureModel::fillValue()
{
m_record.clear();
auto query_ = m_project->dataBase()->newQuery(m_query);
if (!query_.exec()) {
qDebug() << "Query error : " << query_.lastError();
}
while (query_.next())
{
QStringList record_;
auto i=0;
while (query_.value(i).isValid())
{
record_ << query_.value(i).toString();
++i;
}
m_record << record_;
}
}

View File

@@ -56,6 +56,7 @@ class NomenclatureModel : public QAbstractTableModel
private: private:
void dataBaseUpdated(); void dataBaseUpdated();
void setHeaderString(); void setHeaderString();
void fillValue();
private: private:
QPointer<QETProject> m_project; QPointer<QETProject> m_project;