diff options
Diffstat (limited to 'sources/pyside2/doc/codesnippets/examples/sql')
-rw-r--r-- | sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp | 112 | ||||
-rw-r--r-- | sources/pyside2/doc/codesnippets/examples/sql/relationaltablemodel/relationaltablemodel.cpp | 120 |
2 files changed, 232 insertions, 0 deletions
diff --git a/sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp b/sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp new file mode 100644 index 000000000..844ee7711 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtSql> + +#include "editablesqlmodel.h" + +EditableSqlModel::EditableSqlModel(QObject *parent) + : QSqlQueryModel(parent) +{ +} + +//! [0] +def flags(self, index): + flags = QSqlQueryModel.flags(index) + if index.column() == 1 or index.column() == 2: + flags |= Qt.ItemIsEditable + return flags +//! [0] + +//! [1] +def setData(self, index, value, role): + if index.column() < 1 or index.column() > 2: + return False + + primaryKeyIndex = QSqlQueryModel.index(index.row(), 0) + id = self.data(primaryKeyIndex).toInt() + + self.clear() + + ok = False + if index.column() == 1: + ok = self.setFirstName(id, value) + else: + ok = self.setLastName(id, value) + self.refresh() + return ok +} +//! [1] + +void EditableSqlModel::refresh() +{ + setQuery("select * from person"); + setHeaderData(0, Qt::Horizontal, QObject::tr("ID")); + setHeaderData(1, Qt::Horizontal, QObject::tr("First name")); + setHeaderData(2, Qt::Horizontal, QObject::tr("Last name")); +} + +//! [2] +def setFirstName(self, personId, firstName): + query = QSqlQuery() + query.prepare("update person set firstname = ? where id = ?") + query.addBindValue(firstName) + query.addBindValue(personId) + return query.exec() +//! [2] + +bool EditableSqlModel::setLastName(int personId, const QString &lastName) +{ + QSqlQuery query; + query.prepare("update person set lastname = ? where id = ?"); + query.addBindValue(lastName); + query.addBindValue(personId); + return query.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/examples/sql/relationaltablemodel/relationaltablemodel.cpp b/sources/pyside2/doc/codesnippets/examples/sql/relationaltablemodel/relationaltablemodel.cpp new file mode 100644 index 000000000..b34c652d0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/sql/relationaltablemodel/relationaltablemodel.cpp @@ -0,0 +1,120 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of PySide2. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## # Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## # Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## # Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * +from PySide2.QtSql import * + +def initializeModel(model): +//! [0] + model.setTable("employee") +//! [0] + + model.setEditStrategy(QSqlTableModel.OnManualSubmit) +//! [1] + model.setRelation(2, QSqlRelation("city", "id", "name")) +//! [1] //! [2] + model.setRelation(3, QSqlRelation("country", "id", "name")) +//! [2] + +//! [3] + model.setHeaderData(0, Qt.Horizontal, QObject::tr("ID")) + model.setHeaderData(1, Qt.Horizontal, QObject::tr("Name")) + model.setHeaderData(2, Qt.Horizontal, QObject::tr("City")) + model.setHeaderData(3, Qt.Horizontal, QObject::tr("Country")) +//! [3] + + model.select() + + +def createView(title, model): +//! [4] + view = QTableView() + view.setModel(model) + view.setItemDelegate(QSqlRelationalDelegate(view)) +//! [4] + view.setWindowTitle(title) + return view + + +def createRelationalTables(): + query = QSqlQuery() + query.exec_("create table employee(id int primary key, name varchar(20), city int, country int)") + query.exec_("insert into employee values(1, 'Espen', 5000, 47)") + query.exec_("insert into employee values(2, 'Harald', 80000, 49)") + query.exec_("insert into employee values(3, 'Sam', 100, 1)") + + query.exec_("create table city(id int, name varchar(20))") + query.exec_("insert into city values(100, 'San Jose')") + query.exec_("insert into city values(5000, 'Oslo')") + query.exec_("insert into city values(80000, 'Munich')") + + query.exec_("create table country(id int, name varchar(20))") + query.exec_("insert into country values(1, 'USA')") + query.exec_("insert into country values(47, 'Norway')") + query.exec_("insert into country values(49, 'Germany')") + + +def main(): + + app = QApplication([]) + if !createConnection(): + return 1 + + createRelationalTables() + + model = QSqlRelationalTableModel() + + initializeModel(model) + + view = createView(QObject.tr("Relational Table Model"), model) + view.show() + + return app.exec_() + |