[QtSql module]

该QSqlQueryModel类为SQL结果集的只读数据模型。More…

继承QAbstractTableModel

通过继承QSqlTableModel

Methods

  • __init__ (self, QObject parent = None)
  • bool canFetchMore (self, QModelIndex parent = QModelIndex())
  • clear (self)
  • int columnCount (self, QModelIndex parent = QModelIndex())
  • QVariant data (self, QModelIndex item, int role = Qt.DisplayRole)
  • fetchMore (self, QModelIndex parent = QModelIndex())
  • QVariant headerData (self, int section, Qt.Orientation orientation, int role = Qt.DisplayRole)
  • QModelIndex indexInQuery (self, QModelIndex item)
  • bool insertColumns (self, int column, int count, QModelIndex parent = QModelIndex())
  • QSqlError lastError (self)
  • QSqlQuery query (self)
  • queryChange (self)
  • QSqlRecord record (self, int row)
  • QSqlRecord record (self)
  • bool removeColumns (self, int column, int count, QModelIndex parent = QModelIndex())
  • int rowCount (self, QModelIndex parent = QModelIndex())
  • bool setHeaderData (self, int section, Qt.Orientation orientation, QVariant value, int role = Qt.EditRole)
  • setLastError (self, QSqlError error)
  • setQuery (self, QSqlQuery query)
  • setQuery (self, QString query, QSqlDatabase db = QSqlDatabase())

Detailed Description

该QSqlQueryModel类为SQL结果集的只读数据模型。

QSqlQueryModel是用于执行SQL语句并遍历结果集一个高层次的接口。它是建立在较低级别的顶QSqlQuery并且可以用来提供数据可以看到类如QTableView。例如:

  1. QSqlQueryModel *model = new QSqlQueryModel;
  2. model->setQuery("SELECT name, salary FROM employee");
  3. model->setHeaderData(0, [Qt](docs_qt.html).Horizontal, tr("Name"));
  4. model->setHeaderData(1, [Qt](docs_qt.html).Horizontal, tr("Salary"));
  5. [QTableView](docs_qtableview.html) *view = new [QTableView](docs_qtableview.html);
  6. view->setModel(model);
  7. view->show();

我们建立模型的查询,然后我们设置视图中的标题显示的标籤。

QSqlQueryModel也可以用来访问数据库编程,不绑定到一个视图:

  1. QSqlQueryModel model;
  2. model.setQuery("SELECT * FROM employee");
  3. int salary = model.record(4).value("salary").toInt();

上面的代码片段中提取salary从查询的结果集记录4场SELECT * from employee。假设salary是第2列,我们可以重写最后一行,如下所示:

  1. int salary = model.data(model.index(4, 2)).toInt();

该模型是只读的默认。为了使读写,你必须继承它,并重新实现setData()和flags( ) 。另一个选项是使用QSqlTableModel,它提供了基于单个数据库表中的读 - 写的模式。

sql/querymodel示例说明了如何使用QSqlQueryModel以显示查询的结果。它也显示了如何继承QSqlQueryModel显示给用户之前自定义数据的内容,以及如何创建基于QSqlQueryModel一个读写模式。

如果数据库没有返回在查询中选择的行数,该模型将逐步获取行。看fetchMore( )获取更多信息。


Method Documentation

  1. QSqlQueryModel.__init__ (self, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

创建一个空的QSqlQueryModel用给定的parent

  1. bool QSqlQueryModel.canFetchMore (self, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.canFetchMore( ) 。

返回True如果有可能从数据库中读取更多的行。这只会影响数据库不报到查询的尺寸(见QSqlDriver.hasFeature())。

parent应始终为无效QModelIndex

这个函数是Qt 4.1中引入。

See also fetchMore( ) 。

  1. QSqlQueryModel.clear (self)

清除模型,并释放任何收购资源。

  1. int QSqlQueryModel.columnCount (self, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.columnCount( ) 。

  1. QVariant QSqlQueryModel.data (self, QModelIndex item, int role = Qt.DisplayRole)

从重新实现QAbstractItemModel.data( ) 。

返回值指定itemrole

If item超出范围,或者如果发生错误,无效的QVariant返回。

See also lastError( ) 。

  1. QSqlQueryModel.fetchMore (self, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.fetchMore( ) 。

获取从数据库中多个行。这只会影响数据库不报到查询的尺寸(见QSqlDriver.hasFeature())。

要强制整个结果集的抓取,你可以使用以下命令:

  1. while (myModel->canFetchMore())
  2. myModel->fetchMore();

parent应始终为无效QModelIndex

这个函数是Qt 4.1中引入。

See also canFetchMore( ) 。

  1. QVariant QSqlQueryModel.headerData (self, int section, Qt.Orientation orientation, int role = Qt.DisplayRole)

从重新实现QAbstractItemModel.headerData( ) 。

返回头数据为给定的rolesection用指定的标头orientation

See also setHeaderData( ) 。

  1. QModelIndex QSqlQueryModel.indexInQuery (self, QModelIndex item)

[

返回在给定的数据库中的结果集的值的索引item在模型中。

返回值是相同的item如果已经插入任何行或列,删除或移动了。

返回一个无效的模型索引,如果item超出范围或item不指向结果集中的值。

](docs_qmodelindex.html)

See also QSqlTableModel.indexInQuery( )insertColumns()和removeColumns( ) 。

  1. bool QSqlQueryModel.insertColumns (self, int column, int count, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.insertColumns( ) 。

Inserts count列到模型的位置column。该parent参数必须始终是一个无效的QModelIndex,因为该模型不支持父子关系。

返回True如果column是在一定范围内,否则返回False 。

默认情况下,插入的列是空的。为了填补他们的数据,重新实现data( )并单独处理任何插入的列:

  1. [QVariant](docs_qvariant.html) MyModel.data(const [QModelIndex](docs_qmodelindex.html) &item, int role) const
  2. {
  3. if (item.column() == m_specialColumnNo) {
  4. // handle column separately
  5. }
  6. return [QSqlQueryModel](docs_qsqlquerymodel.html).data(item, role);
  7. }

See also removeColumns( ) 。

  1. QSqlError QSqlQueryModel.lastError (self)

[

返回有关数据库上发生的最后一个错误信息。

](docs_qsqlerror.html)

See also setLastError()和query( ) 。

  1. QSqlQuery QSqlQueryModel.query (self)

返回QSqlQuery与此模型相关。

See also setQuery( ) 。

  1. QSqlQueryModel.queryChange (self)

这个虚函数被调用时查询改变。默认实现不执行任何操作。

query( )返回新的查询。

See also query()和setQuery( ) 。

  1. QSqlRecord QSqlQueryModel.record (self, int row)

[

返回有关当前查询的字段包含记录信息。如果row是一个有效的行的索引,该记录将被填入该行的值。

如果模型没有被初始化,一个空的记录将被退回。

](docs_qsqlrecord.html)

See also QSqlRecord.isEmpty( ) 。

  1. QSqlRecord QSqlQueryModel.record (self)

[

这是一个重载函数。

返回有关当前查询的字段为空的记录包含的信息。

如果模型没有被初始化,一个空的记录将被退回。

](docs_qsqlrecord.html)

See also QSqlRecord.isEmpty( ) 。

  1. bool QSqlQueryModel.removeColumns (self, int column, int count, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.removeColumns( ) 。

移除count从模型中的列从位置开始column。该parent参数必须始终是一个无效的QModelIndex,因为该模型不支持父子关系。

删除列有效地隐藏它们。它不影响相关QSqlQuery

返回True如果被删除的列,否则返回False 。

  1. int QSqlQueryModel.rowCount (self, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.rowCount( ) 。

如果数据库支持返回查询的尺寸(见QSqlDriver.hasFeature())时,返回的行的当前查询的数量。否则,将返回客户端上当前缓存的行数。

parent应始终为无效QModelIndex

这个函数是Qt 4.1中引入。

See also canFetchMore()和QSqlDriver.hasFeature( ) 。

  1. bool QSqlQueryModel.setHeaderData (self, int section, Qt.Orientation orientation, QVariant value, int role = Qt.EditRole)

从重新实现QAbstractItemModel.setHeaderData( ) 。

设置的标题指定一个水平标题rolevalue。如果模型被用来在一个视图中显示的数据(例如这是有用的,QTableView) 。

返回True如果orientation is Qt.Horizontalsection指的是一个有效的部分,否则返回False 。

注意,该功能不能用于在数据库中的修改值,因为该模型是只读的。

See also headerData()和data( ) 。

  1. QSqlQueryModel.setLastError (self, QSqlError error)

保护功能,允许派生类对设置在数据库上发生的最后一个错误的值error

See also lastError( ) 。

  1. QSqlQueryModel.setQuery (self, QSqlQuery query)

重置模型,并将数据提供给被给定的query。请注意,查询必须处于活动状态,且不能是isForwardOnly ( ) 。

lastError( )可以用来获取详细信息,如果有错误设置查询。

Note:调用setQuery ( )将删除任何插入的列。

See also query( )QSqlQuery.isActive( )QSqlQuery.setForwardOnly()和lastError( ) 。

  1. QSqlQueryModel.setQuery (self, QString query, QSqlDatabase db = QSqlDatabase())

这是一个重载函数。

执行查询query对于给定的数据库连接db。如果没有指定的数据库(或无效的数据库) ,则使用默认连接。

lastError( )可以用来获取详细信息,如果有错误设置查询。

例如:

  1. [QSqlQueryModel](docs_qsqlquerymodel.html) model;
  2. model.setQuery("select * from MyTable");
  3. if (model.lastError().isValid())
  4. qDebug() << model.lastError();

See also query( )queryChange()和lastError( ) 。