ich bringe mir derzeit Python 3 im Selbststudium bei. Ich bin jetzt mal soweit vorgedrungen, dass ich meine 22 Jahre alte "Buchhaltung" in QBasic in Python umsetzen will. Programmieren lernt man ja bekanntlich, wenn man es praktisch anwendet.
Ich habe folgendes Programm:
Code: Alles auswählen
import sqlite3
import fibuopausgl
#Verbindung zur Datenbank und Cursor erstellen
fibucon = sqlite3.connect('fibu-2013-06-12.sqlite')
cursorfibu = fibucon.cursor()
#Anwender gibt die KontoNr ein, alternativ übergibt das zukünftige Programm, das die Funktion OP-Ausgleich verwendet, die Kontonummer
kontonrsu = input('KontoNr: ')
#Aufruf OP-Ausgleich Variante 1
print(fibuopausgl.opausgl1(kontonrsu))
#Aufruf OP-Ausgleich Variante 2
print(fibuopausgl.opausgl2(kontonrsu))
fibucon.close()
print('Ende')
quit()
und folgendes Modul, das die Funktion OP-Ausgleich in Variante 1 und Variante 2 enthält. Ich habe die Funktionen in ein Modul ausgelagert, weil ich die Funktionen ja evtl. später noch in anderen Programmen verwenden möchte.
Code: Alles auswählen
import sqlite3
#Defininition OP-Ausgleich Variante 1
def opausgl1(kontonr):
#Verbindung zur Datenbank und Cursor erstellen
#zum Testen deaktiviert
# fibucon = sqlite3.connect('fibu-2013-06-12.sqlite')
# cursorfibu = fibucon.cursor()
#Daten aus der DB beschaffen
cursorfibu.execute("""SELECT satznr, kto, gegkto, datum, strftime('%Y-%m', datum), opnr, opausnr, betrag, sh FROM buchungen where kto=? and opausnr=0 order by opnr, datum""", (kontonr,))
ergebnis = cursorfibu.fetchall()
#Verarbeitung der Daten noch nicht programmiert
#return von ergebnis, damit man sieht, dass überhaupt was passiert ist
return ergebnis
#Definition OP-Ausgleich Variante 2
def opausgl2(kontonr):
ergebnis = 'opausgl2'
return ergebnis
Problem:
So wie das Programm jetzt ist kommt spätetestens bei der Select-Anweisung ein Fehler, dass das der "gobal name 'fibucon' is not defined".
Nachdem ich die Verbindung zur DB und den Cursor im Hauptprogramm definiert habe, müsste ich doch theoretisch in der Funktion "opausgl1" darauf zugreifen können oder bin ich da jetzt auf dem Holzweg?
Wenn ich die derzeit im Modul "fibuopausgl" auskommentierten Zeilen zur Verbindung und Cursorerstellung drin lassen, dann funktioniert das Programm wunschgemäß und gibt mir bei "'opausgl1" eine Liste mit den gefunden Datensätzen zurück.
Theoretisch könnte ich das ja schon machen, aber da ist das Modul "fibuopausgl" wieder an eine bestimmte Datenbank gebunden. Der Name der Datenbank kann sich ja auch ändern.
Wo liegt mein Denkfehler? Geht das überhaupt so, wie ich mir das vorstelle?
Das Hauptprogramm baut die Verbindung zur DB auf und ich nutze sie in den Untermodulen/Funktionen.
Danke für eure Hilfe!
Harald
PS: wo wäre es eigentlich angebracht die try/expect-Anweisungen unterzubringen. Die Fehlerbehandlung sollte ich ja irgendwann auch noch einbauen