Results 1 to 3 of 3

Thread: QSqlRelationalTableModel and Sqlite

  1. #1
    Join Date
    Sep 2010
    Posts
    5
    Qt products
    Platforms
    Unix/X11

    Default QSqlRelationalTableModel and Sqlite

    Hi,

    I am trying to create a small database with 2 related table. I've been able to show the tables, but I can't manage to edit them.
    How do you edit in a QSqlRelationalTableModel?

    Here is the code:

    Qt Code:
    1. import os
    2. import sys
    3. from PyQt4.QtCore import *
    4. from PyQt4.QtGui import *
    5. from PyQt4.QtSql import *
    6. import form, form2
    7.  
    8. #pyuic4 window.ui -o windowUi.py
    9.  
    10. class MainForm(QDialog):
    11.  
    12. def __init__(self):
    13. super(MainForm, self).__init__()
    14.  
    15. self.memberModel=QSqlRelationalTableModel(self)
    16. self.memberModel.setEditStrategy(self.memberModel.OnRowChange)
    17. self.memberModel.setTable("members")
    18. self.memberModel.select()
    19.  
    20. self.form=form.Ui_Dialog()
    21. self.form.setupUi(self)
    22.  
    23. self.form.tableView.setModel(self.memberModel)
    24.  
    25. self.paymentModel=QSqlRelationalTableModel(self)
    26. self.paymentModel.setTable("payment")
    27. self.paymentModel.setRelation(1,
    28. QSqlRelation("members", "id", "name"))
    29. self.paymentModel.select()
    30.  
    31. self.form.tableView_2.setModel(self.paymentModel)
    32.  
    33. #Signals
    34. self.connect(self.form.tableView.selectionModel(),
    35. SIGNAL("currentRowChanged(QModelIndex,QModelIndex)"),
    36. self.assetChanged)
    37. self.connect(self.form.AddPayment, SIGNAL("clicked()"),
    38. self.addAction)
    39.  
    40. def assetChanged(self, index):
    41. if index.isValid():
    42. record = self.memberModel.record(index.row())
    43. id = record.value("id").toInt()[0]
    44. self.paymentModel.setFilter(QString("membersID = %1").arg(id))
    45. else:
    46. self.paymentModel.setFilter("membersID = -1")
    47. self.paymentModel.reset() # workaround for Qt <= 4.3.3/SQLite bug
    48. self.paymentModel.select()
    49. self.form.tableView_2.horizontalHeader().setVisible(
    50. self.paymentModel.rowCount() > 0)
    51. #if PYQT_VERSION_STR < "4.1.0":
    52. # self.form.tableView_2.setColumnHidden(ID, True)
    53. #self.form.tableView_2.setColumnHidden(ASSETID, True)
    54.  
    55. def addAction(self):
    56. form = form2.Ui_Dlg_addPayment()
    57. form.show()
    58. """
    59. index = self.form.tableView.currentIndex()
    60. if not index.isValid():
    61. return
    62. QSqlDatabase.database().transaction()
    63. record = self.memberModel.record(index.row())
    64. memberID = record.value(0).toInt()[0]
    65. print memberID
    66. row = self.paymentModel.rowCount()
    67. self.paymentModel.insertRow(row)
    68. self.paymentModel.setData(self.paymentModel.index(row, memberID ),
    69. QVariant(memberID))
    70. self.paymentModel.setData(self.paymentModel.index(row, 2),
    71. QVariant(QDate.currentDate()))
    72. QSqlDatabase.database().commit()
    73. """
    74.  
    75.  
    76. def createFakeData():
    77. import random
    78. query = QSqlQuery()
    79. QApplication.processEvents()
    80.  
    81. print "Creating tables..."
    82. query.exec_("""CREATE TABLE members (
    83. id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
    84. name TEXT NOT NULL,
    85. surname TEXT NOT NULL,
    86. mem_notes)""")
    87. query.exec_("""CREATE TABLE payment (
    88. id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
    89. membersID INTEGER NOT NULL,
    90. date TEXT NOT NULL,
    91. amount TEXT NOT NULL,
    92. pay_notes TEXT,
    93. FOREIGN KEY (membersID) REFERENCES members)""")
    94. print "Populating tables..."
    95. query.exec_("INSERT INTO members (name, surname) "
    96. "VALUES ('Giovanni', 'Sticazzi')")
    97. var = QVariant("id")
    98. print var
    99. query.prepare("INSERT INTO payment (membersID, date, amount) "
    100. "VALUES (:membersID, '17', 'Prova')")
    101. query.bindValue(":membersID", "123")
    102. query.exec_()
    103.  
    104. def main():
    105. app = QApplication(sys.argv)
    106.  
    107. filename = os.path.join(os.path.dirname(__file__), "assets.db")
    108. create = not QFile.exists(filename)
    109. db = QSqlDatabase.addDatabase("QSQLITE")
    110. db.setDatabaseName(filename)
    111. if not db.open():
    112. QMessageBox.warning(None, "Asset Manager",
    113. QString("Database Error: %1").arg(db.lastError().text()))
    114. sys.exit(1)
    115.  
    116. splash = None
    117. if create:
    118. app.setOverrideCursor(QCursor(Qt.WaitCursor))
    119. splash = QLabel()
    120. pixmap = QPixmap(":/assetmanagersplash.png")
    121. splash.setPixmap(pixmap)
    122. splash.setMask(pixmap.createHeuristicMask())
    123. splash.setWindowFlags(Qt.SplashScreen)
    124. rect = app.desktop().availableGeometry()
    125. splash.move((rect.width() - pixmap.width()) / 2,
    126. (rect.height() - pixmap.height()) / 2)
    127. splash.show()
    128. app.processEvents()
    129. createFakeData()
    130.  
    131. form = MainForm()
    132. form.show()
    133. if create:
    134. splash.close()
    135. app.processEvents()
    136. app.restoreOverrideCursor()
    137. app.exec_()
    138. del form
    139. del db
    140.  
    141.  
    142. main()
    To copy to clipboard, switch view to plain text mode 

  2. #2
    Join Date
    Jan 2006
    Location
    Belgium
    Posts
    1,938
    Thanked 268 Times in 268 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Wiki edits
    20

    Default Re: QSqlRelationalTableModel and Sqlite

    In your case, whenever you change data in your table and select another row, the data in the database should be updated.

  3. #3
    Join Date
    Sep 2010
    Posts
    5
    Qt products
    Platforms
    Unix/X11

    Default Re: QSqlRelationalTableModel and Sqlite

    Yes, but this is not happening. Any idea why?

Similar Threads

  1. using QSqlRelationalTableModel opposite of the example
    By scarleton in forum Qt Programming
    Replies: 4
    Last Post: 8th June 2010, 04:17
  2. [Qt][SQLite] Two problems with SQLite.
    By Xandareva in forum Newbie
    Replies: 6
    Last Post: 6th April 2010, 23:06
  3. QSqlRelationalTableModel
    By marvin in forum Newbie
    Replies: 2
    Last Post: 19th November 2008, 21:29
  4. QSqlRelationalTableModel
    By jjay in forum Qt Programming
    Replies: 1
    Last Post: 20th February 2008, 15:20
  5. QTableView & QSqlRelationalTableModel
    By jippo in forum Qt Programming
    Replies: 1
    Last Post: 27th March 2007, 21:40

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.