Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 02.06.2009, 14:48   #1
driims
 
Регистрация: 02.06.2009
Сообщений: 3
Репутация: 10
По умолчанию QT: QSqlQueryModel::setData()

В QT я новичок, посему не пинайте за глупый вопрос.
В любом примере по QSqlQueryModel, там где необходимо чтобы модель позволяла редактирование, переопределены методы data и setData. Сколько примеров я не находил, во всех методах setData как правило ближе к концу следует вызов метода refresh(), который по сути производит заново полную выборку данных из базы. В итоге после любого изменения, любого поля данные из базы выбираются заново, курсор в таблице сбрасывается, что не очень приятно, да и слишком расточительно при большом наборе данных.
Вопрос: как победить это явление, можно ли как-нибудь объяснить модели что обновления требует только текущая строка? Если да то как это сделать.
Варианты типа: QSqlTableModel не предлагать, ибо запрос сложный и может объединять много таблиц.

Вот стандартный пример из QT, прочие примеры которые я находил - подобны этому:
Код:

 
bool EditableSqlModel::setData(const QModelIndex &index, const QVariant &value, int  role )
{
    if (index.column() < 1 || index.column() > 2)
        return false;

    QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0);
    int id = data(primaryKeyIndex, role).toInt();

    //clear();

    bool ok;
    if (index.column() == 1) {
        ok = setFirstName(id, value.toString());
    } else {
        ok = setLastName(id, value.toString());
    }
    refresh();
    return ok;
}

driims вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


04:06.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru