Russian Qt Forum
Сентябрь 30, 2024, 10:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: setQuery и qSqlTableModel  (Прочитано 10251 раз)
chu
Гость
« : Март 02, 2011, 22:49 »

в документации:
Цитировать
void QSqlTableModel::setQuery ( const QSqlQuery & query )   [protected]
Эта функция просто вызывает QSqlQueryModel::setQuery(query). Вы не должны, как правило, вызывать её для QSqlTableModel. Вместо этого используйте setTable(), setSort(), setFilter() и т.д. для создания запроса.
Мне нужен результат запроса:
Код:
SELECT title, SUM(sum) 
FROM `details`
GROUP BY title
как его записать с помощью setTable(), setSort(), setFilter() я без понятия.
поэтому решил проверить:
Код:
    detModel = new QSqlTableModel;
    detModel->setQuery(QString("SELECT title, SUM(sum)"
                                 "FROM `details`"
                                 "GROUP BY title"));

оказалось что ", как правило,"==правилу!
как это решается?
Записан
kowsan
Гость
« Ответ #1 : Март 03, 2011, 01:17 »

QSqlQueryModel
Записан
chu
Гость
« Ответ #2 : Март 03, 2011, 01:34 »

QSqlQueryModel
я в курсе, что  с QSqlQueryModel функция работает, но хотелось бы узнать как выполнить запрос, используя QSqlTableModel
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Март 03, 2011, 03:00 »

Код
C++ (Qt)
 
 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "connection_1");
 db.setHostName("localhost");
 db.setDatabaseName("mydb");
 db.setUserName("root");
 db.setPassword("123456");
 if (db.open())
 {
   QSqlTableModel* model = new QSqlTableModel(this, QSqlDatabase::database("connection_1"));
   model->setTable("test_table"); //выбираем таблицу
   model->setFilter("id = 22350"); //делаем фильтр (как если бы написали в запросе "WHERE id = 22350")
   model->select();
   QString field_value = model->record(0).value("name").toString(); //берём name из результата, первая строка
   qDebug() << field_value; //смотрим на значение по полю `name`
 }
 else
  qDebug() << db.lastError().text();
 

C QSqlTableModel::setSort() думаю понятно - простая сортировка, по возрастанию (параметр Qt::AscendingOrder) и убыванию (Qt::DescendingOrder).
« Последнее редактирование: Март 03, 2011, 03:04 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
chu
Гость
« Ответ #4 : Март 03, 2011, 03:34 »

Код
C++ (Qt)
 
 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "connection_1");
 db.setHostName("localhost");
 db.setDatabaseName("mydb");
 db.setUserName("root");
 db.setPassword("123456");
 if (db.open())
 {
   QSqlTableModel* model = new QSqlTableModel(this, QSqlDatabase::database("connection_1"));
   model->setTable("test_table"); //выбираем таблицу
   model->setFilter("id = 22350"); //делаем фильтр (как если бы написали в запросе "WHERE id = 22350")
   model->select();
   QString field_value = model->record(0).value("name").toString(); //берём name из результата, первая строка
   qDebug() << field_value; //смотрим на значение по полю `name`
 }
 else
  qDebug() << db.lastError().text();
 

C QSqlTableModel::setSort() думаю понятно - простая сортировка, по возрастанию (параметр Qt::AscendingOrder) и убыванию (Qt::DescendingOrder).
я знаю как пользоваться setSort(), setFilter().
Вопрос: как вывести результат запроса:
Цитировать
SELECT title, SUM(sum)
FROM `details`
GROUP BY title
то есть объединить повторяющиеся title и сложить их sum
« Последнее редактирование: Март 03, 2011, 03:38 от chu » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Март 03, 2011, 03:41 »

а если использовать QSortFilterProxyModel как прослойку между моделью и видом?
« Последнее редактирование: Март 03, 2011, 03:53 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
chu
Гость
« Ответ #6 : Март 03, 2011, 03:56 »

а если QSortFilterProxyModel как прослойку между моделью и видом?
наверное можно... но я пока ещё не знаком с QSortFilterProxyModel, надо будет изучить.
может быть поможешь с примером её применения к моей задаче? Улыбающийся
Записан
alexman
Гость
« Ответ #7 : Март 03, 2011, 08:04 »

а если QSortFilterProxyModel как прослойку между моделью и видом?
наверное можно... но я пока ещё не знаком с QSortFilterProxyModel, надо будет изучить.
может быть поможешь с примером её применения к моей задаче? Улыбающийся
Нафига QSqlTableModel Непонимающий Для таких запросов есть QSqlQueryModel.
Записан
Troglodit
Гость
« Ответ #8 : Март 03, 2011, 23:39 »

Сделайте вьюху из этого запроса, и все будет так, как вы  хотели. Если СУБД использует редактируемые вью,то даже без проблем редактирование.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 23.