TkinterからAccessにINSERT
解決したいこと
こんにちは。初めての投稿となります。
pythonのtkinterを使った家計簿アプリを作りたいです。
tkinterの画面から登録ボタンを押したときAccessに商品の値段などをINSERTしたいです。
HPや書籍に書いてあることをいろいろ試しましたが、よくわかりません。
初歩的なことだと思いますが申し訳ございません。
現在以下のエラーが発生して困っています。
解決方法を教えていただけませんでしょうか。
発生している問題・エラー
cursor.execute("INSERT INTO 家計簿(日付,金額,項目,商品名,単価,個数) VALUES(%s,%s,%s.%s,%s,%s)",(db_txt1,db_txt2,db_txt3,db_txt4,db_txt5,db_txt6))
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] クエリ式 '%s' の 構文エラー (-3100) (SQLPrepare)")
以下がtkinterを使った家計簿アプリのソースになります。
import tkinter as tk # 画面を表示
import pyodbc
画面準備
root = tk.Tk()
root.title("家計簿")
root.geometry("450x300")
登録関数。各textboxをgetしてDBにinsert
def resister():
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:\Users\AAA\PycharmProjects\kakeibo\kakeibo.accdb;'
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
for table_info in cursor.tables(tableType='家計簿'):
print(table_info.table_name)
db_txt1=int(txtbox1.get())
db_txt2=int(txtbox2.get())
db_txt3=txtbox3.get()
db_txt4=txtbox4.get()
db_txt5=int(txtbox5.get())
db_txt6=int(txtbox6.get())
cursor.execute("INSERT INTO 家計簿(日付,金額,項目,商品名,単価,個数) VALUES(%s,%s,%s.%s,%s,%s)",(db_txt1,db_txt2,db_txt3,db_txt4,db_txt5,db_txt6))
cursor.commit()
cursor.close()
conn.close()
ラベルの作成
lbl1 = tk.Label(root, text="日付", borderwidth=2, relief="ridge")
lbl2 = tk.Label(root, text="金額", borderwidth=2, relief="ridge")
lbl3 = tk.Label(root, text="項目", borderwidth=2, relief="ridge")
lbl4 = tk.Label(root, text="商品名", borderwidth=2, relief="ridge")
lbl5 = tk.Label(root, text="単価", borderwidth=2, relief="ridge")
lbl6 = tk.Label(root, text="個数", borderwidth=2, relief="ridge")
ラベルの配置
lbl1.pack()
lbl1.place(x=120, y=30)
lbl2.pack()
lbl2.place(x=120, y=55)
lbl3.pack()
lbl3.place(x=120, y=80)
lbl4.pack()
lbl4.place(x=120, y=105)
lbl5.pack()
lbl5.place(x=120, y=130)
lbl6.pack()
lbl6.place(x=120, y=155)
テキストボックスの配置
txtbox1 = tk.Entry(width=30)
txtbox1.place(x=160, y=30)
txtbox2 = tk.Entry(width=30)
txtbox2.place(x=160, y=55)
txtbox3 = tk.Entry(width=30)
txtbox3.place(x=160, y=80)
txtbox4 = tk.Entry(width=30)
txtbox4.place(x=160, y=105)
txtbox5 = tk.Entry(width=30)
txtbox5.place(x=160, y=130)
txtbox6 = tk.Entry(width=30)
txtbox6.place(x=160, y=155)
ボタンの作成
btn1 = tk.Button(text="登録",command=resister)
ボタンの配置
btn1.pack()
btn1.place(x=225, y=190)
tk.mainloop()
自分で試したこと
構文エラーとなるところ、%sを使う以外にもいろいろ試しましたが
正解にはたどり着きませんでした。