2016-11-08 3 views
-1

Ich bin neu in der Programmierung im Allgemeinen und versuche mich an der Arbeit an einem einfachen Prototyp einer einfachen Datenbank einfügen/retrieval GUI auf einem 4x4 Raster Checkbutton/Textbox-Einheiten.Probleme mit tkinter Textfelder und Kontrollkästchen zu meiner SQLite-Datenbank mit Python

Ich habe erfolgreich eine Tabelle in SQLite3 mit 32 (16 Text/16 Checkutton) entsprechenden Spalten erstellt.

Im Moment bin ich versucht, diese Felder zu ihren jeweiligen Spalten zu binden und möchte neue Zeilen machen eine Taste speichern

... aber ich bekomme immer diese Fehlermeldung:

sqlite3.OperationalError: near "checkbutton": syntax error 

I bin ich versucht diesen Code auszuführen:

conn = sqlite3.connect('mainRecs.db') 
c = conn.cursor() 

def data_entry(): 
    c.execute("INSERT INTO recsTable (rec1, rec1 checkbutton,\ 
    rec2, rec2 checkbutton,\ 
    rec3, rec3 checkbutton,\ 
    rec4, rec4 checkbutton,\ 
    rec5, rec5 checkbutton,\ 
    rec6, rec6 checkbutton,\ 
    rec7, rec7 checkbutton,\ 
    rec8, rec8 checkbutton,\ 
    rec9, rec9 checkbutton,\ 
    rec10, rec10 checkbutton,\ 
    rec11, rec11 checkbutton,\ 
    rec12, rec12 checkbutton,\ 
    rec13, rec13 checkbutton,\ 
    rec14, rec14 checkbutton,\ 
    rec15, rec15 checkbutton,\ 
    rec16, rec16 checkbutton) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?,\ 
    ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,\ 
    ?, ?, ?, ?, ?, ?, ?);", (strVar1, checkVar1, strVar2, checkVar2, 
    strVar3, checkVar3, strVar4, checkVar4, 
    strVar5, checkVar5, strVar6, checkVar6, 
    strVar7, checkVar7, strVar8, checkVar8, 
    strVar9, checkVar9, strVar10, checkVar10, 
    strVar11, checkVar11, strVar12, checkVar12, 
    strVar13, checkVar13, strVar14, checkVar14, 
    strVar15, checkVar15, strVar16, checkVar16)) 
conn.commit() 

Nieder in meinem Skript, habe ich den folgenden Code für jeden der 16 ‚recs‘

checkVar1 = IntVar() 
chk1 = Checkbutton(root, variable=checkVar1) 
chk1.grid(row=2, column=0, sticky=NE) 
Label(root, text="Rec 1").grid(row=2, column=0, sticky=W) 
strVar1 = StringVar() 
e1 = Entry(root, textvariable=strVar1) 
e1.grid(row=4, column=0) 
strVar1.set("Enter Rec Label") 

Alle Hinweise, was ich vermisse, würde sehr geschätzt werden!

Ich habe umsah, so ziemlich den ganzen Tag und kann immer noch nicht meinen Kopf wickeln um das, was mir fehlt, oder wenn ich auch das Problem richtig

Phrasierung mich, wenn Sie Zeit haben, diese zu überprüfen Bits Code, einige Rückmeldungen würden enorm hilfreich sein.

Vielen Dank!

-T

+0

Sie müssen Anführungszeichen für Feldnamen mit 'Leerzeichen' verwenden, wie' "rec1 checkbutton" '. – acw1668

+0

oder in Datenbankspaltennamen ohne Leerzeichen verwenden, dh. 'Rec1_checkbutton' – furas

+0

wie für Feedback: Sie Liste mit Variablen verwenden könnte' strVar [1], strVar [2], etc' und 'checkVar [1], checkVar [2], etc.' dann können Sie' verwenden for' Schleife einige Dinge tun - dh. Sie können Kontrollkästchen in 'for' Schleife erstellen. Und Sie können problemlos weitere Kontrollkästchen hinzufügen, ohne neuen Code hinzuzufügen. – furas

Antwort

0

Wenn Sie den Wert von einem IntVar wollen, müssen Sie die get Methode verwenden (zB: checkVar1.get()) Dies wird erwähnt überall IntVar dokumentiert.

Sie haben auch das Problem der Phrase rec1 checkbutton in der SQL. Das ist illegales SQL. Sie müssen Anführungszeichen um Spaltennamen setzen, die Leerzeichen enthalten (und beachten Sie die Verwendung von dreifachen Anführungszeichen um den gesamten Ausdruck):

def data_entry(): 
    c.execute('''INSERT INTO recsTable (rec1, "rec1 checkbutton", 
    rec2, "rec2 checkbutton", 
    ... 
    ''') 

Obwohl, sind Sie sicher, dass Sie die Spaltennamen mit Leerzeichen in ihnen haben? Das scheint sehr ungewöhnlich und erschwert die Arbeit mit Ihren Tabellen (wie durch diese Frage belegt ...)

+0

Danke! Ich habe checkVar1.get() und .get() für alle anderen Variablen versucht, aber es zeigt den gleichen Syntaxfehler. – TJBlack31

+0

@ TJBlack31: Ich habe meine Antwort aktualisiert, um dieses Problem ebenfalls zu beheben. –

Verwandte Themen