diff --git a/include/attributeSelector.h b/include/attributeSelector.h index 0ba7c08..e5707b2 100644 --- a/include/attributeSelector.h +++ b/include/attributeSelector.h @@ -23,7 +23,9 @@ public: AttributeSelector(const QString& connection = "", QWidget *parent = nullptr); ~AttributeSelector(); - void setMainWindow(MainWindow*); + void setMainWindow(MainWindow* window) {m_pMainWindow = window;} + // const QString& connection() {return m_connection;} + // void setConnection(const QString& conn) {m_connection = conn;} protected: void showEvent(QShowEvent*) override; diff --git a/include/sqlQueryExecutor.h b/include/sqlQueryExecutor.h index 7d53e6a..988d517 100644 --- a/include/sqlQueryExecutor.h +++ b/include/sqlQueryExecutor.h @@ -39,8 +39,8 @@ public: bool addModleGrpus(const QString&, int, QVector); QVector getModelGroups(const QString&, int); //属性相关 - int getAttributeCount(const QString&, int, int); - int getAllAttributeCount(const QString&); + int getAttributeCount(const QString&, int, int, const QString& filterChars = ""); + int getAllAttributeCount(const QString&, const QString& filterChars = ""); bool getAttributeInfo(const QString&, const QString&, Attribute&); int getAttributeID(const QString&, const QString&); bool attributeTypeUseByModelGroup(const QString&, int, int, int); diff --git a/source/attributeSelector.cpp b/source/attributeSelector.cpp index 8375ce4..994648a 100644 --- a/source/attributeSelector.cpp +++ b/source/attributeSelector.cpp @@ -178,11 +178,6 @@ bool AttributeSelector::eventFilter(QObject* obj, QEvent* event) return QDialog::eventFilter(obj, event); } -void AttributeSelector::setMainWindow(MainWindow* window) -{ - m_pMainWindow = window; -} - void AttributeSelector::onBtnClicked_search() { if(m_fliterChars_type != ui->lineEdit_attributeType->text() || m_curModelName != ui->comboBox_model->currentText() diff --git a/source/attributeTableModel.cpp b/source/attributeTableModel.cpp index 0decbee..894e36c 100644 --- a/source/attributeTableModel.cpp +++ b/source/attributeTableModel.cpp @@ -355,8 +355,9 @@ void AttributeTableModel::loadPageData() if(m_modelAttributeGroup.modelID == -1) //表示当前加载数据对象是所有属性 { columns.append("id"); //将id放到最后,和按照具体模型、具体属性组读取数据方式时逻辑统一,具体见下面分支逻辑 - QString strSQL = QString("SELECT %1 FROM basic.attribute ORDER BY id ASC LIMIT %2 OFFSET %3") + QString strSQL = QString("SELECT %1 FROM basic.attribute WHERE attribute LIKE '%%2%' ORDER BY id ASC LIMIT %3 OFFSET %4") .arg(columns.join(", ")) + .arg(m_filterChars_attributeType) .arg(m_paginationInfo.entriesPerPage) .arg((m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage); try @@ -364,9 +365,9 @@ void AttributeTableModel::loadPageData() QSqlQuery query = SqlQueryExecutor::instance().executeSQL(m_connection, strSQL); while(query.next()) { - QString type = query.value(0).toString(); - if(!m_filterChars_attributeType.isEmpty() && !type.contains(m_filterChars_attributeType)) - continue; + // QString type = query.value(0).toString(); + // if(!m_filterChars_attributeType.isEmpty() && !type.contains(m_filterChars_attributeType)) + // continue; RowData data; for(int i = 0; i < columns.count(); i++) @@ -501,7 +502,7 @@ void AttributeTableModel::updateTotalCount() }*/ if(m_modelAttributeGroup.modelID == -1) - m_paginationInfo.totalEntries = SqlQueryExecutor::instance().getAllAttributeCount(m_connection); + m_paginationInfo.totalEntries = SqlQueryExecutor::instance().getAllAttributeCount(m_connection, m_filterChars_attributeType); else m_paginationInfo.totalEntries = SqlQueryExecutor::instance().getAttributeCount(m_connection, m_modelAttributeGroup.modelID, m_modelAttributeGroup.groupID); diff --git a/source/sqlQueryExecutor.cpp b/source/sqlQueryExecutor.cpp index 9389499..dff4a93 100644 --- a/source/sqlQueryExecutor.cpp +++ b/source/sqlQueryExecutor.cpp @@ -578,15 +578,27 @@ bool SqlQueryExecutor::removeAttributeGroup(const QString& connectionName, int m return true; } -int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int modelID, int groupID) +int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int modelID, int groupID, const QString& filterChars) { int count = 0; QString strSQL = ""; bool isPublicGroup = isPublicAttributeGroup(connectionName, groupID); if(isPublicGroup) - strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute_public WHERE attribute_group_id = %1").arg(groupID); + strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute_public AS map " + "INNER JOIN basic.attribute AS a ON map.attribute_id = a.id " + "WHERE attribute_group_id = %1 " + "AND a.attribute LIKE '%%2%'") + .arg(groupID) + .arg(filterChars); else - strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute WHERE model_type_id = %1 AND attribute_group_id = %2").arg(modelID).arg(groupID); + strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute AS map " + "INNER JOIN basic.attribute AS a ON map.attribute_id = a.id " + "WHERE model_type_id = %1 " + "AND attribute_group_id = %2 " + "AND a.attribute LIKE '%%3%'") + .arg(modelID) + .arg(groupID) + .arg(filterChars); try { QSqlQuery query = executeSQL(connectionName, strSQL); @@ -601,15 +613,17 @@ int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int model return count; } -int SqlQueryExecutor::getAllAttributeCount(const QString& connectionName) +int SqlQueryExecutor::getAllAttributeCount(const QString& connectionName, const QString& filterChars) { int count = 0; - QString strSQL = QString("SELECT COUNT(*) FROM basic.attribute"); + QString strSQL = QString("SELECT COUNT(*) FROM basic.attribute WHERE attribute LIKE '%") + filterChars + "%'"; try { QSqlQuery query = executeSQL(connectionName, strSQL); if(query.next()) + { count = query.value(0).toInt(); + } } catch (const DatabaseException& e) {