PyQt6 QSqlDatbase - Verbindung
Verfasst: Samstag 10. Juni 2023, 13:13
Ich will ein Programm auch in einem anderen Programm aufrufen, das die selbe Datenbank Sqlite benützt. Wenn ich nun einen eigenen Verbindungsname angebe, sehe ich keine Daten.
Wenn ich dieses Programm aus einem anderen Programm aufrufe, funktioniert es.
Ich bin ratlos
Wenn ich dieses Programm aus einem anderen Programm aufrufe, funktioniert es.
Ich bin ratlos
Code: Alles auswählen
import sys
import platform
import PyQt6.QtWidgets as qw
import PyQt6.QtSql as qs
import PyQt6.QtCore as qc
from PyQt6 import uic
import artikelart
__version__ = "1.0.0"
class Fenster(qw.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Artikel")
self.ui=uic.loadUi("Artikelstamm.ui", self)
self.isModal()
self.datenbank()
self.modell()
self.tabelle()
self.zeileneu.clicked.connect(self.neuezeile)
self.zeileloesch.clicked.connect(self.loeschen)
self.teileart.clicked.connect(lambda:self.artikelartdialog("Teileart"))
self.materialart.clicked.connect(lambda:self.artikelartdialog("Materialart"))
self.materialform.clicked.connect(lambda:self.artikelartdialog("Materialform"))
self.action_information.triggered.connect(self.helpAbout)
self.beenden.clicked.connect(self.close)
def datenbank(self):
self.db = qs.QSqlDatabase.addDatabase('QSQLITE', "con1")
self.db.setDatabaseName("Stücklisten.db")
self.db.database("con1")
if not self.db.open():
error = self.db.lastError().text()
qw.QMessageBox.critical(None, 'Datenbakverbindungsfehler',
'Kann die Datenbank nicht öffnen: '
f'{error}')
sys.exit(1)
required_tables = {'Teileart','Teilestamm','Materialart'}
missing_tables = required_tables - set(self.db.tables())
if missing_tables:
qw.QMessageBox.critical(
None, 'DB Fehler',
'Tabellen fehlen, bitte reparieren Sie die DB: '
f'{missing_tables}')
sys.exit(1)
def modell(self):
self.model=qs.QSqlRelationalTableModel()
self.model.setTable("Teilestamm")
self.model.setRelation(2, qs.QSqlRelation('Teileart', 'Id', 'Teileartbezeichnung'))
self.model.setRelation(3, qs.QSqlRelation('Materialart', 'Id', 'Materialbezeichnung'))
self.model.setRelation(4, qs.QSqlRelation('Materialform', 'Id', 'Materialform'))
self.model.select()
def tabelle(self):
self.tableView.setModel(self.model)
self.tableView.setItemDelegate(qs.QSqlRelationalDelegate(self.tableView))
stylesheet = "QHeaderView::section {Background-color:rgb(235,235,235);color:rgb(0,0,0); font: 15px}"
self.tableView.setStyleSheet(stylesheet)
self.tableView.setSortingEnabled(True)
self.tableView.resizeColumnsToContents()
self.tableView.verticalHeader().hide()
# Sortieren nach Artikelnummer
self.tableView.sortByColumn(0,qc.Qt.SortOrder.AscendingOrder)
self.label=qw.QLabel()
self.statusBar.addWidget(self.label)
self.label.setText("Anzahl Sätze: " + str(self.model.rowCount()))
def neuezeile(self):
self.model.insertRow(self.tableView.currentIndex().row())
self.label.setText("Anzahl Sätze: " + str(self.model.rowCount()))
def loeschen(self):
teilebezeichnung = self.model.record(self.tableView.currentIndex().row()).value(1)
msg = qw.QMessageBox.warning(self, "Sicherheitsabfrage",
"Soll der Teilestamm " + teilebezeichnung + " wirklich geloescht werden?", qw.QMessageBox.StandardButton.Yes |
qw.QMessageBox.StandardButton.No)
if msg == qw.QMessageBox.StandardButton.Yes:
self.model.removeRow(self.tableView.currentIndex().row())
self.model.select()
self.label.setText("Anzahl Sätze: " + str(self.model.rowCount()))
def artikelartdialog(self, tabel):
artikel = artikelart.Fenster(tabel)
artikel.exec()
def helpAbout(self):
qw.QMessageBox.about(self, "Über Artikelstamm",
"""<b>Artikelstamm</b> v %s
<p>Copyright © 08.06.202 muster.
All rights reserved.
<p>Dies ist eine einfache
Artikelstamm, Stücklistenverwaltung
<p>Python %s - Qt %s - PyQt %s on %s""" % (
__version__, platform.python_version(),
qc.QT_VERSION_STR, qc.PYQT_VERSION_STR, platform.system()))
if __name__ == '__main__':
app = qw.QApplication(sys.argv)
fenster=Fenster()
fenster.showMaximized()
app.exec()