Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Описание класса QSqlTableModel
[модуль QtSql]

Класс QSqlTableModel предоставляет редактируемую модель данных для одной таблицы базы данных. Далее...

 #include <QSqlTableModel>

Унаследован от QSqlQueryModel.

От него наследуется QSqlRelationalTableModel.

Открытые типы

Открытые функции

Открытые слоты

Сигналы

Защищенные функции

Дополнительные унаследованные члены


Подробное описание

Класс QSqlTableModel предоставляет редактируемую модель данных для одной таблицы базы данных.

QSqlTableModel - это высокоуровневый интерфейс к записям одной таблицы базы данных с возможностью и чтения и записи. Он является надстройкой нижнего уровня QSqlQuery и может быть использован, чтобы предоставлять данные для классов представлений, таких как QTableView. Например:

     QSqlTableModel *model = new QSqlTableModel;
     model->setTable("employee");
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();
     model->removeColumn(0); // не показывать ID
     model->setHeaderData(0, Qt::Horizontal, tr("Name"));
     model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

     QTableView *view = new QTableView;
     view->setModel(model);
     view->show();

Мы устанавливаем имя SQL таблицы и стратегию редактирования, затем мы устанавливаем метки отображаемые в заголовках представления. Стратегия редактирования предписывает, когда изменения сделанные пользователем в представлении применяются в базе данных. Возможные значения стратегии - это OnFieldChange, OnRowChange и OnManualSubmit.

QSqlTableModel может быть также использован для доступа к базе данных программно, без связывания ее с представлением:

     QSqlTableModel model;
     model.setTable("employee");
     QString name = model.record(4).value("name").toString();

Фрагмент кода выше извлекает поле salary из четвёртой записи, выбранной по запросу SELECT * from employee.

Имеется возможность установить фильтры, используя setFilter(), или изменить порядок сортировки с помощью setSort(). В конце вы должны вызвать select(), чтобы заполнить модель данными.

Пример sql/tablemodel иллюстрирует, как использовать QSqlTableModel в качестве источника данных для QTableView.

QSqlTableModel не предоставляет непосредственную поддержку внешних ключей. Если вы хотите разрешить внешние ключи, используйте QSqlRelationalTableModel и QSqlRelationalDelegate.

Драйвер QSQLITE блокирует обновления до тех пор, пока не выполнены все выборки. QSqlTableModel доставляет данные (QSqlQuery::fetchMore()) в необходимом виде; это может приводить к обновлениям по тайм-ауту.

Смотрите также QSqlRelationalTableModel, QSqlQuery, Программирование модель/представление, Table Model Example и Cached Table Example.


Описание типов

enum QSqlTableModel::EditStrategy

Данное перечисление определяет, какую стратегию выбрать когда редактируются значения в базе данных.

КонстантаЗначениеОписание
QSqlTableModel::OnFieldChange0Все изменения модели будут применены непосредственно к БД
QSqlTableModel::OnRowChange1Изменения строки будут применены, когда пользователь выберет другую строку.
QSqlTableModel::OnManualSubmit2Все изменения будут кэшироваться в модели пока не будут вызваны submitAll() или revertAll().

Замечание: Для предотвращения внесения только частично заполненных строк в БД, OnFieldChange будет вести себя как OnRowChange для вновь добавленных строк.

Смотрите также setEditStrategy().


Описание функций-членов

QSqlTableModel::QSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() )

Создаёт пустую QSqlTableModel и устанавливает значение предка в parent, а соединения к БД в db. Если db не является корректным, используется соединение по умолчанию.

Стратегия редактирования по умолчанию - OnRowChange.

QSqlTableModel::~QSqlTableModel ()   [virtual]

Удаляет объект и освобождает все выделенные ему ресурсы.

void QSqlTableModel::beforeDelete ( int row )   [signal]

Сигнал высылается перед удалением строки row.

void QSqlTableModel::beforeInsert ( QSqlRecord & record )   [signal]

Сигнал высывается перед вставкой новой строки. Значение, которые будут вставлены, хранятся в record и могут быть изменены перед этой операцией.

void QSqlTableModel::beforeUpdate ( int row, QSqlRecord & record )   [signal]

Этот сигнал высылается перед обновлением строки row значениями из record.

Помните, что только помеченные как генерируемые значения будут обновлены. Флаг, отвечающий за то, являются ли данные генерируемыми, может быть установлен с помощью QSqlRecord::setGenerated() и проверен посредством QSqlRecord::isGenerated().

Смотрите также QSqlRecord::isGenerated().

QSqlDatabase QSqlTableModel::database () const

Возвращает указатель на используемую QSqlDatabase или 0, если БД не установлена.

bool QSqlTableModel::deleteRowFromTable ( int row )   [virtual protected]

Удаляет заданную строку row из текущей активной таблицы БД.

Это низкоуровневый метод, который используется только при непосредственной работе с БД, не стоит вызывать его напрямую. Используйте removeRow() или removeRows() для удаления данных. Модель выбирает в зависимости от текущей стратегии редактирования, когда изменять БД.

Возвращает true, если строка была удалена; в противном случае возвращает false.

Смотрите также removeRow() и removeRows().

EditStrategy QSqlTableModel::editStrategy () const

Возвращает текущую стратегию редактирования.

Смотрите также setEditStrategy().

int QSqlTableModel::fieldIndex ( const QString & fieldName ) const

Возвращает индекс поля fieldName.

QString QSqlTableModel::filter () const

Возвращает текущий установленный фильтр.

Смотрите также setFilter() и select().

QModelIndex QSqlTableModel::indexInQuery ( const QModelIndex & item ) const   [protected]

Возвращает индекс значения в результате, полученном для элемента item модели.

Вернёт значение, равное item, если вокруг нет столбцов или строк для вставки, удаления или перемещения.

Возвращает неправильный индекс модели, если item выходит за границы или если item не является указателем на значение в результирующем наборе.

Смотрите также QSqlQueryModel::indexInQuery().

bool QSqlTableModel::insertRecord ( int row, const QSqlRecord & record )

Вставляет record после row. Если row отрицателен, запись будет помещена в конец. Внутри вызываются insertRows() и setRecord().

Возвращает true, если строка была вставлена, в противном случае возвращает false.

Смотрите также insertRows() и removeRows().

bool QSqlTableModel::insertRowIntoTable ( const QSqlRecord & values )   [virtual protected]

Вставляет значения values в текущую активную таблицу базы данных.

Это низкоуровневый метод, который используется только при непосредственной работе с БД, не стоит вызывать его напрямую. Для вставки значений используйте insertRow() и setData(). Модель выбирает в зависимости от текущей стратегии редактирования, когда изменять БД.

Возвращает true, если значения могут быть вставлены, в противном случае возвращает false. Информация об ошибке может быть доступна с помощью lastError().

Смотрите также lastError(), insertRow() и insertRows().

bool QSqlTableModel::insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() )   [virtual]

Вставляет count пустых строк, начиная с позиции row. Помните, что parent должен быть неправильным, так как модель не поддерживает связей предок-потомок.

Только одна запись может быть вставлена, если используется OnFieldChange или OnRowChange стратегия обновления.

Сигнал primeInsert() испускается для каждой новой строки. Соединяйтесь с ним, если вы хотите заполнить новые записи значениями по умолчанию.

Возвращает false, если параметры выходят за границы допустимого; в противном случае возвращает true.

Переопределено из QAbstractItemModel.

Смотрите также primeInsert() и insertRecord().

bool QSqlTableModel::isDirty ( const QModelIndex & index ) const

Возвращает true, если значения по индексу index неактуальные (dirty), в противном случае возвращается false. Неактуальные значения - это те, которые были изменены в модели, но ещё не записаны в БД.

Если index неверен или указывает на несуществующую запись, возвращается false.

QString QSqlTableModel::orderByClause () const   [virtual protected]

Возвращает SQL оператор ORDER BY, основанный на текущих установках сортировки.

Смотрите также setSort() и selectStatement().

QSqlIndex QSqlTableModel::primaryKey () const

Возвращает первичный ключ текущей таблицы или пустой QSqlIndex, если в таблице нет первичного ключа.

Смотрите также setTable(), setPrimaryKey() и QSqlDatabase::primaryIndex().

void QSqlTableModel::primeInsert ( int row, QSqlRecord & record )   [signal]

Этот сигнал испускается при вставке переданной записи row. Параметр record может быть изменён (так как это ссылка), например, для заполнения некоторых полей значениями по умолчанию.

bool QSqlTableModel::removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() )   [virtual]

Удаляет count столбцов из модели parent, начиная с индекса column.

Возвращает true, если столбцы были удалены; в противном случае возвращает false.

Переопределено из QAbstractItemModel.

Смотрите также removeRows().

bool QSqlTableModel::removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() )   [virtual]

Удаляет count строк, начиная с row. Так как эта модель не поддерживает иерархические структуры, parent должен быть недействительным индексом в модели.

Испускает сигнал beforeDelete() до того, как произойдёт удаление.

Возвращает true, если все строки могут быть удалены; противном случае возвращает false. Детализированную информацию об ошибке можно получить с помощью lastError().

Переопределено из QAbstractItemModel.

Смотрите также removeColumns() и insertRows().

void QSqlTableModel::revert ()   [virtual slot]

Этот переопределённый слот вызывается элементами делегатов, когда пользователь завершает редактирование текущей строки.

Отменяет изменения, если текущая стратегия модели - OnRowChange. При других стратегиях ничего не делает.

Используйте revertAll() для отмены всех изменений для стратегии OnManualSubmit или revertRow() для отмены изменения определённой записи.

Переопределено из QAbstractItemModel.

Смотрите также submit(), submitAll(), revertRow() и revertAll().

void QSqlTableModel::revertAll ()   [slot]

Отменяет все сделанные изменения.

Смотрите также revert(), revertRow() и submitAll().

void QSqlTableModel::revertRow ( int row )   [virtual]

Отменяет все сделанные изменения для определённой строки row.

Смотрите также revert(), revertAll(), submit() и submitAll().

bool QSqlTableModel::select ()   [virtual]

Заполняет модель данными из таблицы, установленной с помощью setTable(), используя специальный фильтр и сортировку, при успехе возвращает true; в противном случае возвращает false.

Смотрите также setTable(), setFilter() и selectStatement().

QString QSqlTableModel::selectStatement () const   [virtual protected]

Возвращает результат выполнения SQL запроса SELECT, используется внутри для заполнения модели. Этот запрос включает в себя фильтр и ORDER BY.

Смотрите также filter() и orderByClause().

bool QSqlTableModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole )   [virtual]

Устанавливает данные для элемента index и роли role в value. В зависимости от стратегии редактирования, значение может быть применено к БД или к кэшированной модели.

Возвращает true, если значение может быть установлено, и false в случае ошибки, например, если index выходит за пределы границы значений.

Переопределено из QAbstractItemModel.

Смотрите также editStrategy(), data(), submit(), submitAll() и revertRow().

void QSqlTableModel::setEditStrategy ( EditStrategy strategy )   [virtual]

Устанавливает стратегию редактирования значений БД в strategy.

Это отменит любые не применённые изменения.

Смотрите также editStrategy() и revertAll().

void QSqlTableModel::setFilter ( const QString & filter )   [virtual]

Устанавливает текущий фильтр в filter.

Фильтр является SQL выражением WHERE без ключевого слова WHERE (например, name='Josephine').

Если модель уже заполнена данными из БД, модель перевыберет их с учётом нового фильтра. В противном случае, фильтр будет применён при следующем вызове select().

Смотрите также filter(), select(), selectStatement() и orderByClause().

void QSqlTableModel::setPrimaryKey ( const QSqlIndex & key )   [protected]

Защищённый метод, позволяющий классам-потомкам устанавливать первичный ключ в key.

Обычно первичный ключ устанавливается автоматически каждый раз, когда вы вызываете setTable().

Смотрите также primaryKey() и QSqlDatabase::primaryIndex().

void QSqlTableModel::setQuery ( const QSqlQuery & query )   [protected]

Эта функция просто вызывает QSqlQueryModel::setQuery(query). Вы не должны, как правило, вызывать её для QSqlTableModel. Вместо этого используйте setTable(), setSort(), setFilter() и т.д. для создания запроса.

Смотрите также selectStatement().

bool QSqlTableModel::setRecord ( int row, const QSqlRecord & record )

Устанавливает значения записи row в record. Возвращает true, если значения могут быть установлены; в противном случае возвращает false.

Смотрите также record().

void QSqlTableModel::setSort ( int column, Qt::SortOrder order )   [virtual]

Устанавливает порядок сортировки для столбца column в order. Не влияет на текущие данные, для обновления данных с использованием изменённого порядка сортировки вызовите select().

Смотрите также sort(), select() и orderByClause().

void QSqlTableModel::setTable ( const QString & tableName )   [virtual]

Устанавливает таблицу БД, с которой работает модель, в tableName. Не делает выборки данных, но получает информацию о них.

Для заполнения модели данными таблицы вызовите select().

Информация об ошибке может быть доступна с помощью lastError().

Смотрите также select(), setFilter() и lastError().

void QSqlTableModel::sort ( int column, Qt::SortOrder order )   [virtual]

Сортирует данные по столбцу column в порядке order. Будет применено непосредственно к данным, используйте setSort() для установки порядка сортировки без заполнения модели данными.

Переопределено из QAbstractItemModel.

Смотрите также setSort(), select() и orderByClause().

bool QSqlTableModel::submit ()   [virtual slot]

Переопределённый слот, вызывается делегатом элемента, когда пользователь заканчивает редактировать текущую строку.

Применяет текущую редактируемую строку, если установлена стратегия редактирования OnRowChange или OnFieldChange. При стратегии OnManualSubmit ничего не происходит.

Использует submitAll() для применения всех совершённых изменений для стратегии OnManualSubmit.

Возвращает true, если всё прошло успешно; в противном случае возвращает false. Используйте lastError() для получения доступа к информации об ошибках.

В случае успеха модель будет заполнена заново. Все представления, связанные с ней, потеряют свои выделения.

Переопределено из QAbstractItemModel.

Смотрите также revert(), revertRow(), submitAll(), revertAll() и lastError().

bool QSqlTableModel::submitAll ()   [slot]

Применяет все сделанные изменения и возвращает true в случае успеха. Возвращает false, если случилась ошибка, информацию о ней вы сможете получить с помощью lastError().

В случае успеха модель будет заполнена заново. Все представления, связанные с ней, потеряют свои выделения.

Замечание: В режиме OnManualSubmit все применённые изменения не будут очищаться, если submitAll() не выполнится. Текущая транзакция может быть отменена и применена позже без потери данных.

Смотрите также revertAll() и lastError().

QString QSqlTableModel::tableName () const

Возвращает имя текущей выбранной таблицы.

bool QSqlTableModel::updateRowInTable ( int row, const QSqlRecord & values )   [virtual protected]

Обновляет переданную строку row в текущей активной таблице БД переданными значениями values. Возвращает true в случае успеха; при неудаче возвращается false.

Это низкоуровневый метод, который используется только при непосредственной работе с БД, не стоит вызывать его напрямую. Используйте setData() для обновления значений. Модель выбирает в зависимости от текущей стратегии редактирования, когда изменять БД.

Помните, что только помеченные как генерируемые значения могут быть обновлены. Флаг, отвечающий за то, являются ли данные генерируемыми, может быть установлен с помощью QSqlRecord::setGenerated() и проверен посредством QSqlRecord::isGenerated().

Смотрите также QSqlRecord::isGenerated() и setData().


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5