2017-08-03 7 views
0

ユーザ入力をデータベースに挿入しようとしています。それは動作するはずですが、私は奇妙なエラーメッセージを受け取り続けます。可能であればお手伝いください。SQL文が挿入されていません

私のコードは、いくつかの入力ボックスを持つGUIを表示します。ユーザーが「OK」ボタンをクリックすると、テキストが変数に格納されます。次に、別の関数を使ってテキストをAccessテーブルに挿入します。

以下のコードはエラーメッセージの下にあります。

conn_string = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\cqt7wny\Documents\new_UPS.accdb;' 
conn = pyodbc.connect(conn_string) 
cur = conn.cursor() 


win = Tk() 

win.title("UPS") 
win.geometry("600x600") 
win.configure(background='white') 

fr = Frame(win) 
fr.pack(side = BOTTOM) 

listlab = [] 

def clear(): 
    for l in listlab: 
     l.destroy() 

jname = StringVar() 
jstart = StringVar() 
jend = StringVar() 
jfields = StringVar() 
jdeli = StringVar() 

job_name = '' 

def mhello(): 
    job_name = jname.get() 
    job_start = jstart.get() 
    job_end = jend.get() 
    job_fields = jfields.get() 
    delimiter = jdeli.get() 
    Label(fr, text=job_name).grid(row=1,column=2) 
    Label(fr, text=job_start).grid(row=2, column=2) 
    Label(fr, text=job_end).grid(row=3, column=2) 
    Label(fr, text=job_fields).grid(row=4, column=2) 
    Label(fr, text=delimiter).grid(row=5, column=2) 


    cur.execute("INSERT INTO set VALUES (%s,%s,%s,%s,%s)", (job_name,job_start,job_end,job_fields,delimiter)) 

    conn.commit() 
def callback1(): 
    clear() 
    w1 = Label(fr, text="Job Name : ") 
    w1.grid(row=1, column=0) 
    listlab.append(w1) 
    w2 = Label(fr, text="Job Start : ") 
    w2.grid(row=2, column=0) 
    listlab.append(w2) 
    w3 = Label(fr, text="Job End : ") 
    w3.grid(row=3, column=0) 
    listlab.append(w3) 
    w4 = Label(fr, text="Fields : ") 
    w4.grid(row=4, column=0) 
    listlab.append(w4) 
    w5 = Label(fr, text="Delimiter : ") 
    w5.grid(row=5, column=0) 
    listlab.append(w5) 

    e1 = Entry(fr, textvariable=jname) 
    e1.grid(row=1, column=1) 
    listlab.append(e1) 
    e2 = Entry(fr, textvariable=jstart) 
    e2.grid(row=2, column=1) 
    listlab.append(e2) 
    e3 = Entry(fr, textvariable=jend) 
    e3.grid(row=3, column=1) 
    listlab.append(e3) 
    e4 = Entry(fr, textvariable=jfields) 
    e4.grid(row=4, column=1) 
    listlab.append(e4) 
    e5 = Entry(fr, textvariable=jdeli) 
    e5.grid(row=5, column=1) 
    listlab.append(e5) 
    mbutton = Button(fr, text="OK", command=mhello) 
    mbutton.grid(row=5, column=3) 



def callback2(): 
    clear() 
    w2 = Label(fr, text="2") 
    w2.pack() 
    listlab.append(w2) 




b1 = Button(win,text="Set Up", command=callback1) 
photo1 = PhotoImage(file="setupp.gif") 
b1.config(image=photo1,width="50",height="50") 

b2 = Button(win,text="Run Data", command=callback2) 
photo2 = PhotoImage(file="run.gif") 
b2.config(image=photo2,width="50",height="50") 

b1.place(relx=0.2, rely=0.2, anchor=CENTER) 
b2.place(relx=0.4, rely=0.2, anchor=CENTER) 

win.mainloop() 

print(job_name) 

エラーが

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Users\cqt7wny\AppData\Local\Continuum\Anaconda3\lib\tkinter\__init__.py", line 1699, in __call__ 
    return self.func(*args) 
    File "C:/Users/cqt7wny/PycharmProjects/kk/classes.py", line 48, in mhello 
    cur.execute("INSERT INTO set VALUES (%s,%s,%s,%s,%s)", (job_name,job_start,job_end,job_fields,delimiter)) 
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. (-3502) (SQLPrepare)') 

答えて

1

setは、あなたのテーブルの名前がある場合、それはまた、SQL予約語であり、あなたは、角括弧でそれをエスケープする必要があります。

INSERT INTO [set] VALUES (%s,%s,%s,%s,%s) 
+0

または '' VALUES動作しませんでした(%s、%sの%sは、%sの%sの) ' –

+0

セット\ INSERT INTO \'。テーブル名を変更しましたが、私はまだ同じエラーを受けています。 – iNeed2LearnToEat

関連する問題