Reputation: 41
Im trying to insert user inputs into a database. It should work but i keep receiving a weird error message. Please help if you can.
What my code does is it displays a GUI with a few input boxes. When the user clicks an "ok" button it stores the text into variables. Then Im using another function to insert the text into an Access table.
Code below, and error message is below it.
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)
Error
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)')
Upvotes: 0
Views: 69
Reputation: 135808
If set
is the name of your table, it is also a SQL reserved word and you'll need to escape it with square brackets.
INSERT INTO [set] VALUES (%s,%s,%s,%s,%s)
Upvotes: 1