@_13th_Dragon:
A co nie jasne w dokumentacji https://doc.qt.io/qt-6/qsqlquery.html że musisz dopytywać?
dobra, doszedłem gdzie miałem problem, szkoda, że dokumentacja trochę wprowadza w błąd
zrobiłem sobie dziedziczenie klasy QSqlQueryModel
czyli w dużym uproszczeniu kod wygląda tak:
MyModel : public QSqlQueryModel
{
public:
jakieś tam funkcje
};
MyModel::MyModel()
{
QString queryStr="SELECT * FROM tDane";
this->setQuery(queryStr, *dbConnect); //tutaj ustawiam zapytanie i spodziewam się wykonania tego zapytania
while(this->query().next()){
qDebug()<<this->query().record().value(1).toString(); //na podstawie powyższego zapytania powinno zwrócić wynik
//całego zapytania, ale go nie ma
}
}
i teraz tak, w dokumentacji odnośnie funkcji void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())
pisze tak -> Executes the query (...)
czyli że wykonuje zapytanie. Więc spodziewam się, że jak użyję tej funkcji i jako argument przekażę zapytanie
i adres otwartej instancji bazy
, to ta funkcja gdzieś tam w tle powinna wykonać to zapytanie i wynik powinien gdzieś tam sobie czekać w pamięci na wyświetlenie w momencie gdy użyję odpowiedniej funkcji czyli w tym przypadku query
ale tak nie jest.
Więc, żeby zwróciło mi wynik zapytania, to trzeba wywołać funkcję exec()
znajdującą się w klasie QSqlQuery
czyli trzeba zrobić coś takiego
MyModel::MyModel()
{
QString queryStr="SELECT * FROM tDane";
this->setQuery(queryStr, *dbConnect); //tutaj ustawiam zapytanie i spodziewam się wykonania tego zapytania
query->exec(); //tego brakowało i jak to dodałem, to od razu poniżej otrzymałem wynik zapytania
while(this->query().next()){
qDebug()<<this->query().record().value(1).toString(); //po dodaniu funkcji exec() są wyniki
}
}
jedno niedomówienie, a tyle pierdzielenia się aby to zadziałało...