crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QSqlTableModel Выборка полей
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
vankleef Дата 17.6.2012, 4:04
  UPD
Сори, я невнимательный, удалите)
xzz Дата 15.6.2012, 10:49
  а можно ли примерчик???даже сравнить не с чем...что да как...
512es Дата 16.1.2012, 3:00
  Уже наверное не актуально, случайно нагуглил тему.

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

Есть же стандартный метод в 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
MoPDoBoPoT Дата 8.4.2011, 20:43
 
Цитата(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");
abc Дата 8.4.2011, 13:07
 
Цитата(PAFOS @ 8.4.2011, 9:14) *
QSqlQueryModel *queryModel = dynamic_cast<QSqlQueryModel*>(model);

круто)
PAFOS Дата 8.4.2011, 8:14
 
Цитата
Всё получилось как Вы и сказали, но вот редактировать отказывается(((


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

    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();


Только учтите, что при добавлении новой записи, если у остальных полей таблицы нету значений по умолчанию, то добавление записи не произойдет.
Редактирование вроде бы должно проходить.
fortero Дата 8.4.2011, 1:13
  Всё получилось как Вы и сказали, но вот редактировать отказывается(((

              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();

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

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

Это как?
MoPDoBoPoT Дата 7.4.2011, 21:54
  Можно средствами БД решить, создав представление и сделав выборку из него.
fortero Дата 7.4.2011, 11:46
 
Цитата(PAFOS @ 7.4.2011, 8:27) *
Ну почему же выбирать)

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

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

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


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


Это очень интересно, Спасибо Вам большое!
А можно прокаментировать строчки я новичок, можно дотошно обяснить по шагово мне это очень интересно!
PAFOS Дата 7.4.2011, 8:27
  Ну почему же выбирать)

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

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

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


И вуаля! Все сработало)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 10:27