crossplatform.ru

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


  Ответ в Отключение ленивой загрузки в QSqlRelationalTableModel
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 10 сообщений [ в обратном порядке ]
Хаски Дата 19.10.2012, 11:43
  Я наследовал свой класс QSqlRelationalTableModelExtraFetch от QSqlRelationalTableModel и переопределили в нем метод select() следующим образом:
bool QSqlRelationalTableModelExtraFetch::select()
{
    bool result;
    result = QSqlTableModel::select();
    while(this->canFetchMore())
        this->fetchMore();
    return result;
}
Litkevich Yuriy Дата 19.10.2012, 0:30
  Хаски, нужно сделать наследника от модели и в её методах вызывать fetchMore()
RazrFalcon Дата 18.10.2012, 19:04
  Я вручную SQL запросы отсылал.
Так проще и быстрее, чем через Qt.
Хаски Дата 18.10.2012, 18:26
  Здравствуйте!
Я создаю модель, связанную с таблицей в БД на SQlite и вывожу ее в tableView:
QSqlRelationalTableModel *model=new QSqlRelationalTableModel;
    model->setTable("publications");
    model->setRelation(6, QSqlRelation("pub_types", "id", "type"));
    model->setEditStrategy(QSqlTableModel::OnFieldChange);
    model->select();
    while(model->canFetchMore())
            model->fetchMore();
    ui->tableView_pub->setModel(model);
    ui->tableView_pub->setFocus();
    ui->tableView_pub->selectRow(model->rowCount()-1);

Класс QSqlRelationalTableModel реализован так, что имеет место так называемая "ленивая загрузка" данных. При работе с таблицей подгружается по 255 записей, остальные - по мере прокрутки ползунка. Мне это не нужно, мне нужно, чтобы загружались сразу все данные (память позволяет, объем базы не слишком велик, а вызванные этим неудобства интерфейса мешают).
Во всех методах своего приложения я использую код "while(model->canFetchMore()) model->fetchMore();", и все работает так, как надо - в tableView загружается все содержимое таблицы из БД.
Однако, мне также необходима возможность редактирования ячеек в tableView с синхронизацией с БД (стратегия редактирования - OnFieldChange). При этом, когда пользователь редактирует ячейку из ряда с номером больше 255, после завершения ее редактирования таблица перезагружается из БД, и вновь лишь первые 255 строк. В результате tableview перескакивает к 255 строке, что очень неудобно. Например, если мне нужно быстро отредактировать несколько строк в таблице под номерами 500, 501, 502, у каждой по несколько полей, это не получится сделать быстро и удобно из-за постоянного перескакивания на 255 строку.
Вопрос: как мне изменить поведение tableview, чтобы после заверешения редактирования ячейки в таблице загружалась вся таблица? Или как изменить этот параметр, дающий ограничение в 255 строк?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 3:11