2016-11-08 4 views
-1

私は一般的なプログラミングには慣れていないので、チェックボックスの4x4グリッドにある単純なデータベース挿入/検索GUIの簡単なプロトタイプ/テキストボックス単位。Pythonを使用してSQLiteデータベースにtkinterのテキストボックスとチェックボックスをバインドする際の問題がある

32(16テキスト/ 16チェックサム)の適切な列でSQLite3でテーブルを作成できました。

今私は、それぞれの列にこれらのフィールドをバインドしようとしていますし、保存ボタンを

を使用して新しい行を作成したいと思います...しかし、私はこのエラーを取得しておいてください。

sqlite3.OperationalError: near "checkbutton": syntax error 

I 「このコードを実行しようとしていますmは:私のスクリプトで

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() 

下、私は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") 

私が紛失しているものについての指針は非常に高く評価されます!

私は周りを見回しましたが、ほとんどすべての日、まだ私が欠けている何かのまわりで私の頭をラップすることができない、または私も問題を正しく

をフレージングだ場合は、これらを検討する時間があればいくつかのフィードバックは非常に役に立つでしょう。

ありがとうございました!

-T

+0

'' rec' checkbutton "'のように、フィールド名に引用符を 'spaces'で使用する必要があります。 – acw1668

+0

を使用するか、スペースなしでデータベースの列名で使用してください。 'rec1_checkbutton' – furas

+0

フィードバックとして:変数' strVar [1]、strVar [2]、etc'と 'checkVar [1]、checkVar [2]などでリストを使うことができます。' for'ループを使うことができますつまり、いくつかのことをする。 'for'ループでチェックボックスを作成することができます。また、新しいコードを追加しなくても簡単にチェックボックスを追加することができます。 – furas

答えて

0

あなたがIntVarから値をしたい場合は、get方法(例:checkVar1.get())を使用する必要がありますこれは、どこにでもIntVar言及されている文書化されています。

また、SQLにフレーズrec1 checkbuttonの問題があります。それは違法なSQLです。

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

けれども、あなたがそれらにスペースを持つ列の名前を持っている確信している:あなたは、スペースを含む(そして、式全体の周りのトリプル引用符の使用に注意してください)カラム名の前後に引用符を置く必要がありますか?それは非常に珍しいようで、あなたのテーブルでの作業を難しくしています。(この質問で証明されているように)

+0

ありがとう!私はcheckVar1.get()と.get()を他のすべての変数で試しましたが、同じ構文エラーが表示されます。 – TJBlack31

+0

@ TJBlack31:私もその問題に対処するために私の答えを更新しました。 –

関連する問題