QSqlTableModel - SELECT z dwóch tabeli

0

Witam, mam problem, używałem wszędzie QSqlTableModelowe zapytania setTable i select, jednak teraz muszę wykorzystać skomplikowanego SELECTA i nie wiem zbytnio jak to zrobić więc próbowałem tak:

QAbstractItemModel* DbManager::imageTableModel(QString table)
{
    if (m_db.isOpen())
    {
        m_tableModel = new MySqlTableModel(this, m_db);

        if (table=="products")
        m_tableModel->setTable("products");

        if (table=="baseproducts")
        m_tableModel->setTable("baseproducts");

        if (table=="supplydates")
        m_tableModel->setTable("supplydates");

        if(table=="terms")
        {
            QSqlQuery query(m_db);

            query.exec("SELECT products.name, products.img, supplydates.Date, supplydates.Package, supplydates.Weight"
                       "FROM products,supplydates WHERE products.productid=supplydates.productid");
            m_tableModel->wywSetQuery(query);

        }


        m_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
        m_tableModel->select();

        m_sortingModel =new MySortFilterProxyModel(this);
        m_sortingModel->setDynamicSortFilter(true);
        m_sortingModel->setSourceModel(m_tableModel);


        m_budleDecodedModel = new SqlBlobDecoderModel(this);
        m_budleDecodedModel->setSourceModel(m_sortingModel);
        m_budleDecodedModel->setImageColumn(TableImageColumn);
    }
    return m_budleDecodedModel;
}

termsmodel = dbManager->imageTableModel("terms");
    ui->tableview_terms->setModel(termsmodel);

Czy mogę tak to wykorzystać (jeśli tak to gdzie zrobiłem błąd bo się nic nie wyświetla). Proszę o pomoc.

//Edit
Po pewnych transformacjach i testach sprawdziłem że problem leży w zapytaniu SELECT.

Takowy SELECT też nie działa:

 query.exec("SELECT products.name, supplydates.Date, supplydates.Package, supplydates.Weight"
                   "FROM products INNER JOIN supplydates ON products.productid = supplydates.productid;");
1

Dokumentacja Qt tako rzecze, że:

The QSqlTableModel class provides an editable data model for a single database table

Jeśli potrzebujesz gmerać w zapytaniu SQL to zdecydowanie lepszym pomysłem będzie użycie QSqlQueryModel

0
tajny_agent napisał(a):

Dokumentacja Qt tako rzecze, że:

The QSqlTableModel class provides an editable data model for a single database table

Jeśli potrzebujesz gmerać w zapytaniu SQL to zdecydowanie lepszym pomysłem będzie użycie QSqlQueryModel

Racja, nie zauważyłem tego lecz mimo wszystko, to samo, coś nie tak z zapytaniem query

QSqlQueryModel *DbManager::getTermsModel()
{
    QSqlQueryModel *termsModel = new QSqlQueryModel;
    termsModel->setQuery("SELECT products.name, supplydates.Date, supplydates.Package, supplydates.Weight"
                         "FROM products INNER JOIN supplydates ON products.productid = supplydates.productid;");
    return termsModel;
}

zwykł SELECT * FROM products działa i wyświetla normalnie

1

A co ci select zwraca, jak się połączysz do bazy? W twoim przypadku jak nie będzie wpisów w tabeli supplydates, do połączenia z produktami to ci nic nie pokaże. To jest raczej podstawowe zapytanie SQL

0

Zastanawiam się jeszcze tylko jak zrobić WHERE supplydates.date!=NULL bo ani != ani <> nie działa

///EDIT

dobra już wszystko rozwiązane, dziękuję za pomoc :)

                         "WHERE products.productid=supplydates.productid AND supplydates.date!="+QString::number(NULL)+" "

1 użytkowników online, w tym zalogowanych: 0, gości: 1