kombobox von SQL abfrage füllen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

Guten abend

ich würde gerne eine Kombobox anhand von einer liste welche durch eine SQL abfrage entsteht füllen

def kombobox__personal_fuellen(self):
# SQL Abfrage aller daten
db.connect()
self.Box_personal.clear()
abfrage = "SELECT Personalnummer FROM mitarbeiter"
c.execute(abfrage)

while c.fetchall():
result = str(c.value(0))
self.Box_personal.addItem(result)
db.close()

komischerweise wirft es immer ein fehler das das attribute value nicht existiert. ändern zu fetchone bringt leider auch nichts
im internet find ich leider rein gar nichts dazu außer java halt
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist ja auch quatsch. Ein Cursor hat kein Attribut value. fetchall liefert auch nicht True/False, und updated irgendwie den Cursor mit der Zeile. Sondern macht, was es sagt: es holt alles ab, und gibt das zurueck.

Code: Alles auswählen

for row in c.fetchall():
    print(row)
Und das steht auch so im Internet. Siehe zB https://peps.python.org/pep-0249/, und sicher auch in der Dokumentation deines konkreten DB-Adapters.
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

ah danke für die dokumentation die wird sicher weiterhelfen

dh es gibt einen tuple wieder wo ich mit einer zählerschleife jedes element hinzufügen kann
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

def kombobox__personal_fuellen(self):
# SQL Abfrage aller daten
db.connect()
self.Box_personal.clear()
abfrage = "SELECT Personalnummer FROM mitarbeiter"
c.execute(abfrage)

for row in c.fetchall():
for wert in row:
self.Box_personal.addItem(str(wert))
db.close()
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da du nur einen Wert hast, ist die zweite for Schleife auch falsch. Einfach auf roe[0] zugreifen, oder tuple unpacking in der äußeren Schleife bemühen.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`db` und `c` kommen hier einfach so magisch aus dem ”Nichts”. Das sollte nicht sein. Keine globalen Variablen. Und auch lokal wäre `c` kein guter Name weil zu nichtssagend.

Die innere ``for``-Schleife ist falsch. Man schreibt keine Schleife wenn man weiss, dass die immer *genau einmal* durchlaufen wird. Das ist keine echte Schleife.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten