Frage zu INSERT mit PyQt QtSql

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AFX
User
Beiträge: 51
Registriert: Samstag 4. September 2021, 08:40

Guten Morgen. Ich habe eine Frage in Bezug auf ein seltsames Verhalten einer QApplication, welches auftritt, wenn ich ein INSERT-Statement durchführe. Ich erschaffe eine GUI wie folgt:

Code: Alles auswählen

    import sys

    app = QApplication(sys.argv)
    gui = GUI()
    gui.resize(800, 550)
    gui.show()
    sys.exit(app.exec_())
Es gibt nun in der GUI einen Button:

defaultPushButton.clicked.connect(self.buttonClickedInsert)
defaultPushButton.setDefault(True)

...der verbunden ist mit einer Funktion, vermittels welcher ich Werte in eine postgreSQL-DB schreiben kann. Diese Funktion sieht folgendermaßen aus:

Code: Alles auswählen

    def buttonClickedInsert(self):
        
...

                query = QSqlQuery()           
                query.prepare("INSERT INTO termine (zt, kontakt, ort) "
                                "VALUES (?, ?, ?)")
                
                query.addBindValue(self.zeit)
                query.addBindValue(kt)
                query.addBindValue(ot)
                query.exec()
                
            d.close()   
Folgendes Verhalten kann ich mir nicht erklären, weshalb ich nicht weiß, wie ich es beseitigen kann.

Wenn ich n-mal hintereinander verschiedene Zeiten eingebe, kontakt und ort aber jeweils unverändert lasse, werden alle Werte korrekt in die DB geschrieben.

Wenn ich aber 2mal hintereinander ALLE Werte gleich lasse, die Zeit sich also nicht ändert, dann geht die GUI zu und die Werte werden nicht in die DB geschrieben, obwohl dies in der DB mit einem INSERT Statement problemlos möglich sein müsste.

Hat jemand eine Ahnung, was da los sein könnte? Vielen Dank im Voraus für Tipps.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Als erstes würde ich nicht ohne Not die Datenbankschnittstelle von Qt benutzen. Die sieht etwas antiquiert aus.
Welche Fehlermeldung bekommst Du? Was passiert, wenn Du den Insert ohne GUI ausführt?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du zeigst zu wenig Code. Man kann also nur raten. Ich vermute, deine Aussage, das es möglich ist, gleiche Zeilen anzulegen, stimmt nicht. Und das es zu einer Verletzung eines DB Constraints kommt, auf den du nicht richtig reagierst, und die Anwendung abschmiert.
AFX
User
Beiträge: 51
Registriert: Samstag 4. September 2021, 08:40

Ich hatte ein datetime-Feld, mit einem Lambda. self.datetime.dateTimeChanged.connect(lambda: dt_method()) Beim zweiten Einpflegen eines Datensatzes hatte sich das Datumsfeld nicht verändert, somit wurde die Methode dt_method() nicht aufgerufen und die Variable zeit nicht gesetzt. Die Methode dt_method() tut dies nämlich: self.zeit = self.datetime.dateTime()

Vielen Dank für die Tipps, ich hatte leider etwas vorschnell gefragt.
Antworten