Qt i C++ - QSqlQuery

0

Czy będzie ktoś z was wiedział dlaczego nie mogę iterować po następnych elementach bazy ? Mi iteruje tylko do 3 i koniec. W bazie mam 7 kolumn i 3 wiersze

    StrQuery1 = "SELECT * FROM tZamowienia2";
    SqlQuery1 = new QSqlQuery(StrQuery1, *connect);
    SqlQuery1->exec();
    SqlQuery1->isSelect();
    SqlQuery1->setForwardOnly(true);
    int i=0;
    while(SqlQuery1->next()){
        qDebug()<< SqlQuery1->value(i).toString();
        qDebug()<<"wart"<<SqlQuery1->next();
        i++;
    }
0

A proszę bardzo

    StrQuery1 = "SELECT pZamowienia FROM tZamowienia2";
    SqlQuery1 = new QSqlQuery(StrQuery1, *connect);
    SqlQuery1->exec();
    SqlQuery1->isSelect();
    //SqlQuery1->setForwardOnly(true);
    while(SqlQuery1->next()){
        qDebug()<< SqlQuery1->value(0).toString();
    }
    SqlQuery1->clear();

    StrQuery1 = "SELECT pWydzial FROM tZamowienia2";
    SqlQuery1 = new QSqlQuery(StrQuery1, *connect);
    SqlQuery1->exec();
    SqlQuery1->isSelect();
    //SqlQuery1->setForwardOnly(true);
    while(SqlQuery1->next()){
        qDebug()<< SqlQuery1->value(0).toString();
    }
    SqlQuery1->clear();

tylko nie rozumiem jednej rzeczy. Czemu jak podawałem iterator i++ to funkcja value(int) wcale nie łyka takiego zapisu value(i) ? Przyjmuje tylko same zera ? Gdyby ktoś ten niuans wyjaśnił, to byłbym wdzięczny.

0

Mam taki kod

    StrQuery1 = "SELECT pZamowienia, pWydzial, pRodzaj_Sprawy FROM tZamowienia2";
    SqlQuery1 = new QSqlQuery(StrQuery1, *connect);
    SqlQuery1->exec();
    SqlQuery1->isSelect();
    //SqlQuery1->setForwardOnly(true);
    while(SqlQuery1->next()){
        qDebug()<< SqlQuery1->value(0).toString();
    }

    QSqlQueryModel *QryModel = new QSqlQueryModel();
    QryModel->setQuery(*SqlQuery1);

    QryModel->setHeaderData(0,Qt::Horizontal,tr("Lp"));
    QryModel->setHeaderData(1,Qt::Horizontal,tr("Wydział"));

    QTableView *TblView = new QTableView();
    TblView->setModel(QryModel);
    TblView->show(); //czy to jest konieczne mimo, że tabela się wyświetla ?

    SqlQuery1->clear();

Kod działa ale w związku z nim mam pytanie. Czy da radę zrobić kilka zapytań oddzielnie np

    StrQuery1 = "SELECT pZamowienia FROM tZamowienia2";
    StrQuery2 = "SELECT pWydzial FROM tZamowienia2";

utworzyć kolumny do tych zapytań za pomocą

    QSqlQueryModel *QryModel = new QSqlQueryModel();
    QryModel->setQuery(*SqlQuery1);
    QryModel->insertColumns(0,0); // <- tu chciałbym utworzyć kolumny i w każdą z kolumn wpisać oddzielnie wynik zapytania
    QryModel->setQuery(*SqlQuery2);
    QryModel->insertColumns(0,1);

a potem wyświetlić go w widoku ? Czy da radę coś takiego zrobić ? Chciałbym jeszcze zapytać w jakich sytuacjach byście wykorzystywali klasę QSqlQuery ? Wiem, że ta klasa służy do tworzenia zapytań.

0
auto model = new QSqlQueryModel(this);
model->setQuery("SELECT pZamowienia, pWydzial, pRodzaj_sprawy FROM tZamowienia2");
model->select();
model->setHeaderData(0, Qt::Horizontal, "Zamowienie");
model->setHeaderData(1, Qt::Horizontal, "Wydzial");
model->setHeaderData(2, Qt::Horizontal, "Rodzaj sprawy");

auto view = new QTableView(this);
view->setModel(model);
zkubinski napisał(a):

Kod działa ale w związku z nim mam pytanie. Czy da radę zrobić kilka zapytań oddzielnie np

    StrQuery1 = "SELECT pZamowienia FROM tZamowienia2";
    StrQuery2 = "SELECT pWydzial FROM tZamowienia2";

utworzyć kolumny do tych zapytań za pomocą

    QSqlQueryModel *QryModel = new QSqlQueryModel();
    QryModel->setQuery(*SqlQuery1);
    QryModel->insertColumns(0,0); // <- tu chciałbym utworzyć kolumny i w każdą z kolumn wpisać oddzielnie wynik zapytania
    QryModel->setQuery(*SqlQuery2);
    QryModel->insertColumns(0,1);

a potem wyświetlić go w widoku ? Czy da radę coś takiego zrobić ? Chciałbym jeszcze zapytać w jakich sytuacjach byście wykorzystywali klasę QSqlQuery ? Wiem, że ta klasa służy do tworzenia zapytań.

Nie. bo jak mówi dokumentacja:

Note: Calling setQuery() will remove any inserted columns.

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