Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 14:48   #1
driims
 
Регистрация: 02.06.2009
Сообщений: 3
По умолчанию 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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск