Alle Daten aus sqlite-DB in ListCtrl ausgeben?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
ensacom

Hallo, mit folgendem Befehl lese ich alle Daten aus einer SQLite-DB aus.

Code: Alles auswählen

def OnLoadAdresse(self, event):
        con = lite.connect(PROGPATH+'data', isolation_level=None)
        cur = con.cursor()

        sql = "SELECT id, name, vorname, strasse, plz, ort, bemerkung FROM adressen"
        cur.execute(sql)
        rows = cur.fetchall() 
        
        for row in rows:
            id, name, vorname, strasse, plz, ort, bemerkung = row
            print row
            print id
            print name
            print vorname
            print strasse
            print plz
            print ort
            print bemerkung
            
        try:
            self.edId.SetValue(str(id))
            self.edName.SetValue(name)
            self.edVorname.SetValue(vorname)
            self.edStrasse.SetValue(strasse) 
            self.edPlz.SetValue(plz) 
            self.edOrt.SetValue(ort) 
            self.edBemerkung.SetValue(bemerkung)
        except:
            self.sb.SetStatusText('Keine Adresse mit dieser ID vorhanden')
        
        cur.close()
        con.close()

Kann mir einer sagen wie ich alle Daten nun in einer ListCtrl ausgeben kann?

Die ListCtrl wurde so erzeugt.

Code: Alles auswählen

self.list = wx.ListCtrl(panel, -1 , (1,320), (400,100), wx.LC_REPORT | wx.LC_SORT_DESCENDING)
        self.list.SetBackgroundColour('White')
        self.list.InsertColumn(0, "Name")
        self.list.InsertColumn(1, "Vorname")
        self.list.InsertColumn(3, "Strasse")
        self.list.InsertColumn(4, "PLZ")
        self.list.InsertColumn(5, "Ort")
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo ensacom!

Vielleicht kannst du mit diesen Beispielen etwas anfangen:
- http://www.python-forum.de/post-83453.html#83453
- http://www.python-forum.de/post-86445.html#86445
- http://wiki.wxpython.org/ListControls

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ensacom

Vielen Dank, ich habe es mittlerweile so hinbekommen.

Code: Alles auswählen

def OnLoadAdresse(self, event):
        con = lite.connect(PROGPATH+'data', isolation_level=None)
        cur = con.cursor()

        sql = "SELECT id, name, vorname, strasse, plz, ort, bemerkung FROM adressen"
        cur.execute(sql)
        rows = cur.fetchall() 
        
        for row in rows:
            id, name, vorname, strasse, plz, ort, bemerkung = row
            print row
            print id
            print name
            print vorname
            print strasse
            print plz
            print ort
            print bemerkung
            
            self.lvAdressen.InsertStringItem(0, name)
            self.lvAdressen.SetStringItem(0, 1, vorname)
            self.lvAdressen.SetStringItem(0, 2, strasse)
            self.lvAdressen.SetStringItem(0, 3, plz)
            self.lvAdressen.SetStringItem(0, 4, ort)
            self.lvAdressen.SetItemData(0, 0)      

        cur.close()
        con.close()

Kann mal einer drüberschauen und sagen ob das so in Ordnung ist?
Eine Frage noch, warum wird wenn ich diese beiden Zeilen am Scriptanfang weglasse, nur die erste Zeile ausgegeben?

Code: Alles auswählen

out_enc = sys.stdout.encoding or sys.getfilesystemencoding()
sys.stdout = codecs.getwriter(out_enc)(sys.__stdout__) 
Encoding habe ich in der zweiten Zeile das stehen.
Das zu ändern bewirkt in diesem Fall aber auch nichts

Code: Alles auswählen

# -*- coding: iso-8859-15 -*- 
BlackJack

Da Du dass oben gemacht hat: Such in Deinem Quelltext alle ``except``-Anweisungen, bei denen keine konkrete Ausnahme behandelt wird und schreibe da nur die hin, die Du auch wirklich erwartest und an der Stelle behandeln möchtest. Wenn Du einfach alles untertdrückst, bekommst Du natürlich auch keine sinnvollen Fehlermeldungen mehr und das Programm ignoriert Probleme einfach.
ensacom

Ich habe noch keine Fehlerbehandlung im Programm.
Habe schon so viel versucht und nichts hat geholfen
BlackJack

Wenn keine Fehlerbehandlung drin ist, dann müsste auf der Konsole auch eine Ausnahme samt Traceback ausgegeben werden, wenn eine unbehandelte Ausnahme ausgelöst wird.
ensacom

Es wird ja keine Fehlermeldung ausgegeben, es wird lediglich nur ein Eintrag ausgegeben und der Rest fehlt
BlackJack

Bist Du sicher dass Du nicht doch irgendwo in der Aufrufhierarchie einen ``try``/``except``-Block ohne konkrete Ausnahme hast, der den Fehler "verschluckt"?

Wie wär's mit ein paar strategisch platzierten ``print``-Anweisungen!? Vor der Schleife zum Beispiel die Länge von `rows` ausgeben und nach der Schleife ein ``print 'schleifenende'`` und dann mal sehen ob das ausgegeben wird.
Antworten