在该 Python 程序中,用户希望添加、删除、编辑和查看学生记录。但是,DELETE 和 EDIT 无法正常工作。当用户尝试删除一条记录时,会收到错误消息,提示只有 8 列而需要 10 列。
2、解决方案
为了解决这个问题,需要修改 DELETE 和 EDIT 函数中的 SQL 语句。在 DELETE 函数中,删除语句应该使用 WHERE 子句来指定要删除的记录的条件,而不是只使用 DELETE FROM student。在 EDIT 函数中,插入语句应该使用 REPLACE INTO 而不是 INSERT INTO,这样才能替换现有记录而不是添加新记录。
以下是在 Python 程序中实现 DELETE 和 EDIT 功能的代码示例:
def deleteRecord():
studentnum1 = ""
win = tkinter.Tk();win.title("Delete Student Record")
lbl = tkinter.Label(win,background="#000",foreground="#ddd",width=30,text="Delete Record")
lbl.pack()
lbl10 = tkinter.Label(win,text="Student Number")
lbl10.pack()
en10 = tkinter.Entry(win)
en10.pack()
def delete():
studentnum1 = en10.get()
con = sqlite3.connect("Students.db")
cur = con.cursor()
row = cur.fetchone()
cur.execute("DELETE FROM student WHERE studentnum = '%s';" % studentnum1)
con.commit()
win = tkinter.Tk();win.title("Record Deleted")
lbl = tkinter.Label(win,background="#000",foreground="#ddd",width=30,text="Record Deleted :")
lbl.pack()
lbl = tkinter.Label(win,width=30,text=studentnum1)
lbl.pack()
btn = tkinter.Button(win,background="#000",foreground="#ddd",width=30,text="Ok",command=win.destroy)
btn.pack()
btn2 = tkinter.Button(win,background="#000",foreground="#ddd",width=30,text="Delete",command=delete)
btn2.pack()
def editRecord():
studentnum1 = ""
def edit():
studentnum1 = en10.get()
studentnum = ""
name = ""
age = ""
birthday = ""
address = ""
email = ""
course = ""
year = ""
section = ""
con = sqlite3.connect("Students.db")
cur = con.cursor()
row = cur.fetchone()
cur.execute("REPLACE INTO student(studentnum,name,age,email,birthday,address,email,course,year,section) VALUES(?,?,?,?,?,?,?,?,?,?)",student)
con.commit()
win = tkinter.Tk();win.title("Students")
lbl = tkinter.Label(win,background="#000",foreground="#ddd",width=30,text="Edit Record :"+'\t'+studentnum1)
lbl.pack()
lbl1 = tkinter.Label(win,width=30,text="Student Number : ")
lbl1.pack()
en1 = tkinter.Entry(win,width=30)
en1.pack()
lbl2 = tkinter.Label(win,width=30,text="Name : ")
lbl2.pack()
en2 = tkinter.Entry(win,width=30)
en2.pack()
lbl3 = tkinter.Label(win,width=30,text="Age : ")
lbl3.pack()
en3 = tkinter.Entry(win,width=30)
en3.pack()
lbl4 = tkinter.Label(win,width=30,text="Birthday : ")
lbl4.pack()
en4 = tkinter.Entry(win,width=30)
en4.pack()
lbl5 = tkinter.Label(win,width=30,text="Address : ")
lbl5.pack()
en5 = tkinter.Entry(win,width=30)
en5.pack()
lbl6 = tkinter.Label(win,width=30,text="Email : ")
lbl6.pack()
en6 = tkinter.Entry(win,width=30)
en6.pack()
lbl7 = tkinter.Label(win,width=30,text="Course : ")
lbl7.pack()
en7 = tkinter.Entry(win,width=30)
en7.pack()
lbl8 = tkinter.Label(win,width=30,text="Year : ")
lbl8.pack()
en8 = tkinter.Entry(win,width=30)
en8.pack()
lbl9 = tkinter.Label(win,width=30,text="Section : ")
lbl9.pack()
en9 = tkinter.Entry(win,width=30)
en9.pack()
btn1 = tkinter.Button(win,background="#000",foreground="#ddd",width=30,text="Save Record",command=save)
btn1.pack()
win = tkinter.Tk();win.title("Edit Student")
lbl = tkinter.Label(win,background="#000",foreground="#ddd",width=30,text="Edit Record")
lbl.pack()
lbl10 = tkinter.Label(win,width=30,text="Student Number : ")
lbl10.pack()
en10 = tkinter.Entry(win)
en10.pack()
btn2 = tkinter.Button(win,background="#000",foreground="#ddd",width=30,text="Edit",command=edit)
btn2.pack()
这样就可以修复程序中 DELETE 和 EDIT 无法正常工作的问题了。