Seite 1 von 1

Alle Daten aus sqlite-DB in ListCtrl ausgeben?

Verfasst: Donnerstag 17. Januar 2008, 09:21
von 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")

Verfasst: Donnerstag 17. Januar 2008, 10:10
von gerold
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
:-)

Verfasst: Donnerstag 17. Januar 2008, 13:51
von 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 -*- 

Verfasst: Donnerstag 17. Januar 2008, 14:08
von 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.

Verfasst: Donnerstag 17. Januar 2008, 14:16
von ensacom
Ich habe noch keine Fehlerbehandlung im Programm.
Habe schon so viel versucht und nichts hat geholfen

Verfasst: Donnerstag 17. Januar 2008, 14:23
von 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.

Verfasst: Donnerstag 17. Januar 2008, 17:10
von ensacom
Es wird ja keine Fehlermeldung ausgegeben, es wird lediglich nur ein Eintrag ausgegeben und der Rest fehlt

Verfasst: Donnerstag 17. Januar 2008, 17:17
von 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.