Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSqlTableModel Выборка полей
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
fortero
Доброе время суток, народ подскажите начинающему как в классе QSqlTableModel, сделать выборку нужных полей по умолчанию примерно следующее SELECT * FROM table;
А как мне сделать что бы он выбирал к примеру только SELECT id, name FROM table ???
Фильтр не канает… пробовал(((
Спасибо за внимание…
maint
Цитата(fortero @ 7.4.2011, 5:42) *
Доброе время суток, народ подскажите начинающему как в классе QSqlTableModel, сделать выборку нужных полей по умолчанию примерно следующее SELECT * FROM table;
А как мне сделать что бы он выбирал к примеру только SELECT id, name FROM table ???
Фильтр не канает… пробовал(((
Спасибо за внимание…

тут уж надо выбирать. Либо использовать QSqlQueryModel или прятать ненужные столбцы в представлении модели (например в QTableView - setColumnHidden)
PAFOS
Ну почему же выбирать)

QSqlTableModel наследуется от QSqlQueryModel, в которой есть метод setQuery().
Однако в QSqlTableModel он является защиненным (мне лично непонятно как :unsure: )

Есть хитрость:
Воспользуемся преимуществами наследования.

QSqlTableModel *tableModel = new QSqlTableModel();
QSqlQueryModel *queryModel = dynamic_cast<QSqlQueryModel*>(tableModel);
queryModel->setQuery( .... );


И вуаля! Все сработало)
fortero
Цитата(PAFOS @ 7.4.2011, 8:27) *
Ну почему же выбирать)

QSqlTableModel наследуется от QSqlQueryModel, в которой есть метод setQuery().
Однако в QSqlTableModel он является защиненным (мне лично непонятно как :unsure: )

Есть хитрость:
Воспользуемся преимуществами наследования.

QSqlTableModel *tableModel = new QSqlTableModel();
QSqlQueryModel *queryModel = dynamic_cast<QSqlQueryModel*>(tableModel);
queryModel->setQuery( .... );


И вуаля! Все сработало)


Это очень интересно, Спасибо Вам большое!
А можно прокаментировать строчки я новичок, можно дотошно обяснить по шагово мне это очень интересно!
MoPDoBoPoT
Можно средствами БД решить, создав представление и сделав выборку из него.
fortero
Всё получилось как Вы и сказали, но вот редактировать отказывается(((

              QTableView view;
    QSqlTableModel *model = new QSqlTableModel();
    QSqlQueryModel *queryModel = dynamic_cast<QSqlQueryModel*>(model);
    queryModel->setQuery("SELECT id, name FROM firm");
    model->select();
    model->setEditStrategy(QSqlTableModel::OnFieldChange);
    view.setModel(model);
    view.show();

Что то можно сделать?

Цитата
Можно средствами БД решить, создав представление и сделав выборку из него.

Это как?
PAFOS
Цитата
Всё получилось как Вы и сказали, но вот редактировать отказывается(((


Поправте код :

    TableView view;
    QSqlTableModel *model = new QSqlTableModel();
    model->setTable("firm");
    QSqlQueryModel *queryModel = dynamic_cast<QSqlQueryModel*>(model);
    queryModel->setQuery("SELECT id, name FROM firm");
    model->select();
    model->setEditStrategy(QSqlTableModel::OnFieldChange);
    view.setModel(model);
    view.show();


Только учтите, что при добавлении новой записи, если у остальных полей таблицы нету значений по умолчанию, то добавление записи не произойдет.
Редактирование вроде бы должно проходить.
abc
Цитата(PAFOS @ 8.4.2011, 9:14) *
QSqlQueryModel *queryModel = dynamic_cast<QSqlQueryModel*>(model);

круто)
MoPDoBoPoT
Цитата(fortero @ 8.4.2011, 2:13) *
Это как?

Что-то вроде
CREATE OR REPLACE VIEW v_table (id, name) 
AS
SELECT id, name FROM table;

    QSqlTableModel *model = new QSqlTableModel();
    model->setTable("v_table");
512es
Уже наверное не актуально, случайно нагуглил тему.

Трюк с наследованием имхо жуткий хак, лучше не юзать.
А так же со вьюшками в базе.. Не самый лучший способ.

Есть же стандартный метод в QSqlTableModel:
Цитата
void QSqlTableModel::setFilter ( const QString & filter ) [virtual]
Sets the current filter to filter.
The filter is a SQL WHERE clause without the keyword WHERE (for example, name='Josephine').
If the model is already populated with data from a database, the model re-selects it with the new filter. Otherwise, the filter will be applied the next time select() is called.


Или и правда, подумайте, может вам лучше использовать QSqlQueryModel
xzz
а можно ли примерчик???даже сравнить не с чем...что да как...
vankleef
UPD
Сори, я невнимательный, удалите)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.