iNeed2LearnToEat
iNeed2LearnToEat

Reputation: 41

SQL statement not inserting

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

Answers (1)

Joe Stefanelli
Joe Stefanelli

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

Related Questions