Jul-15-2022, 12:20 PM
Yoriz Wrote:Split from https://python-forum.io/thread-27861-post-118832.html into its own thread
Hello. Can anyone help me too? .delete and .insert is not working on my program. here's my code:
# import libraries import dataclasses from tkinter import * import tkinter.messagebox as tkMessageBox import sqlite3 from tkinter import ttk # function to define database def Database(): global conn, cursor # creating student database conn = sqlite3.connect("qsuclinicrecord.db") cursor = conn.cursor() # creating STUD_REGISTRATION table cursor.execute( "CREATE TABLE IF NOT EXISTS STUDENT_REGISTRATION (STU_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " "ID TEXT, STU_FIRSTNAME TEXT, STU_MIDDLENAME TEXT, STU_LASTNAME TEXT, STU_BIRTHDAY TEXT, STU_AGE INTEGER, " "STU_GENDER TEXT, STU_ADDRESS TEXT, STU_WEIGHT INTEGER, STU_HEIGHT NUMBER, STU_BLOODTYPE TEXT, " "STU_DISABILITIES TEXT)") # defining function for creating GUI Layout def DisplayForm(): # creating window display_screen = Tk() # setting width and height for window display_screen.geometry("1024x700") # setting title for window display_screen.title("QSU-Diffun Clinic Record System") global tree global SEARCH global student_id, fname, mname, lname, bday, ag_e, gen_der, add_ress, wg, hg, btype, dis SEARCH = StringVar() student_id = StringVar() fname = StringVar() mname = StringVar() lname = StringVar() bday = StringVar() ag_e = StringVar() gen_der = StringVar() add_ress = StringVar() wg = StringVar() hg = StringVar() btype = StringVar() dis = StringVar() # creating frames for layout # topview frame for heading TopViewForm = Frame(display_screen, width=600, bd=1, relief=SOLID) TopViewForm.pack(side=TOP, fill=X) # first left frame for registration from LFrom = Frame(display_screen, width="350") LFrom.pack(side=LEFT, fill=Y) # seconf left frame for search form LeftViewForm = Frame(display_screen, width=500, bg="gray") LeftViewForm.pack(side=LEFT, fill=Y) # mid frame for displaying students record MidViewForm = Frame(display_screen, width=600) MidViewForm.pack(side=RIGHT) # label for heading lbl_text = Label(TopViewForm, text="QSU-Diffun Clinic Record System", font=('verdana', 20, 'bold'), width=600, bg="green", fg="white", height="3") lbl_text.pack(fill=X) # creating registration form in first left frame Label(LFrom, text="Student ID No. ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=student_id).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="First Name ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=fname).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Middle Name ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=mname).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Last Name ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=lname).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Birthday ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=bday).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Age ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=ag_e).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Gender ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=gen_der).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Address ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=add_ress).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Weight ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=wg).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Height ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=hg).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Bloodtype ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=btype).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Disabilities or other Health Issues ", font=("Arial", 12)).pack(side=TOP) Entry(LFrom, font=("Arial", 10, "bold"), textvariable=dis).pack(side=TOP, padx=10, fill=X) Button(LFrom, text="Add New Record", font=("Arial", 10, "bold"), command=register).pack(side=TOP, padx=10, pady=5, fill=X) # creating search label and entry in second frame lbl_txtsearch = Label(LeftViewForm, text="Student ID No.", font=('verdana', 10), bg="gray") lbl_txtsearch.pack() # creating search entry search = Entry(LeftViewForm, textvariable=SEARCH, font=('verdana', 15), width=10) search.pack(side=TOP, padx=10, fill=X) # creating search button btn_search = Button(LeftViewForm, text="Search", command=SearchRecord) btn_search.pack(side=TOP, padx=10, pady=10, fill=X) # creating view button btn_view = Button(LeftViewForm, text="View All Records", command=DisplayData) btn_view.pack(side=TOP, padx=10, pady=10, fill=X) # creating reset button btn_reset = Button(LeftViewForm, text="Reset", command=Reset) btn_reset.pack(side=TOP, padx=10, pady=10, fill=X) # creating reset button btn_update = Button(LeftViewForm, text="Update", command=Reset) btn_update.pack(side=TOP, padx=10, pady=10, fill=X) # creating delete button btn_delete = Button(LeftViewForm, text="Delete", command=Delete) btn_delete.pack(side=TOP, padx=10, pady=10, fill=X) # setting scrollbar scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL) scrollbary = Scrollbar(MidViewForm, orient=VERTICAL) tree = ttk.Treeview(MidViewForm, columns=( "No", "Student ID No", "First Name", "Middle Name", "Last Name", "Birthday", "Age", "Gender", "Address", "Weight", "Height", "Bloodtype", "Disabilities or other Health Issues"), selectmode="extended", height=100, yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set) scrollbary.config(command=tree.yview) scrollbary.pack(side=RIGHT, fill=Y) scrollbarx.config(command=tree.xview) scrollbarx.pack(side=BOTTOM, fill=X) # setting headings for the columns tree.heading('No', text="No.", anchor=W) tree.heading('Student ID No', text="Student ID No.", anchor=W) tree.heading('First Name', text="First Name", anchor=W) tree.heading('Middle Name', text="Middle Name", anchor=W) tree.heading('Last Name', text="Last Name", anchor=W) tree.heading('Birthday', text="Birthday", anchor=W) tree.heading('Age', text="Age", anchor=W) tree.heading('Gender', text="Gender", anchor=W) tree.heading('Address', text="Address", anchor=W) tree.heading('Weight', text="Weight", anchor=W) tree.heading('Height', text="Height", anchor=W) tree.heading('Bloodtype', text="Bloodtype", anchor=W) tree.heading('Disabilities or other Health Issues', text="Disabilities or other Health Issues", anchor=W) # setting width of the columns tree.column('#0', stretch=NO, minwidth=0, width=0) tree.column('#1', stretch=NO, minwidth=0, width=80) tree.column('#2', stretch=NO, minwidth=0, width=150) tree.column('#3', stretch=NO, minwidth=0, width=150) tree.column('#4', stretch=NO, minwidth=0, width=120) tree.column('#5', stretch=NO, minwidth=0, width=120) tree.column('#6', stretch=NO, minwidth=0, width=120) tree.column('#7', stretch=NO, minwidth=0, width=120) tree.column('#8', stretch=NO, minwidth=0, width=120) tree.column('#9', stretch=NO, minwidth=0, width=120) tree.column('#10', stretch=NO, minwidth=0, width=120) tree.column('#11', stretch=NO, minwidth=0, width=120) tree.column('#12', stretch=NO, minwidth=0, width=120) tree.pack() DisplayData() # function to insert data into database def register(): Database() # getting form data stuid = student_id.get() firstname = fname.get() middlename = mname.get() lastname = lname.get() birthday = bday.get() age = ag_e.get() gender = gen_der.get() address = add_ress.get() weight = wg.get() height = hg.get() bloodtype = btype.get() disabilities = dis.get() # applying empty validation if stuid == '' or firstname == '' or middlename == '' or lastname == '' or birthday == '' or age == '' or gender == '' or address == '' or weight == '' or height == '' or bloodtype == '': tkMessageBox.showinfo("Warning", "fill the empty field!!!") else: # execute query conn.execute('INSERT INTO STUDENT_REGISTRATION (ID, STU_FIRSTNAME, STU_MIDDLENAME, STU_LASTNAME, STU_BIRTHDAY, STU_AGE, STU_GENDER, STU_ADDRESS, STU_WEIGHT, STU_HEIGHT, STU_BLOODTYPE, STU_DISABILITIES) \ VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', ( stuid, firstname, middlename, lastname, birthday, age, gender, address, weight, height, bloodtype, disabilities)); conn.commit() tkMessageBox.showinfo("Message", "Recorded successfully") # refresh table data DisplayData() conn.close() def Reset(): # clear current data from table tree.delete(*tree.get_children()) # refresh table data DisplayData() # clear search text SEARCH.set("") student_id.set("") fname.set("") mname.set("") lname.set("") bday.set("") ag_e.set("") gen_der.set("") add_ress.set("") wg.set("") hg.set("") btype.set("") dis.set("") # Select Record def select_record(): student_id.delete(0, END) fname.delete(0, END) mname.delete(0, END) lname.delete(0, END) bday.delete(0, END) ag_e.delete(0, END) gen_der.delete(0, END) add_ress.delete(0, END) wg.delete(0, END) hg.delete(0, END) btype.delete(0, END) dis.delete(0, END) selected = tree.focus() values = tree.item(selected, 'values') student_id.insert(0, values[1]) fname.insert(0, values[2]) mname.insert(0, values[3]) lname.insert(0, values[4]) bday.insert(0, values[5]) ag_e.insert(0, values[6]) gen_der.insert(0, values[7]) add_ress.insert(0, values[8]) wg.insert(0, values[9]) hg.insert(0, values[10]) btype.insert(0, values[11]) dis.insert(0, values[12]) # Update record def update_record(): # Grab the record number selected = tree.focus() # Update record tree.item(selected, text="", values=(student_id.get(), fname.get(), mname.get(), lname.get(), bday.get(), ag_e.get(), gen_der.get(), add_ress.get(), wg.get(), hg.get(), btype.get(), dis.get(),)) # Update the database # Create a database or connect to one that exists conn = sqlite3.connect('qsuclinicrecord.db') # Create a cursor instance c = conn.cursor() c.execute('UPDATE STUDENT_REGISTRATION (ID, STU_FIRSTNAME, STU_MIDDLENAME, STU_LASTNAME, STU_BIRTHDAY, STU_AGE, STU_GENDER, STU_ADDRESS, STU_WEIGHT, STU_HEIGHT, STU_BLOODTYPE, STU_DISABILITIES) \ VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', (student_id, fname, mname, lname, bday, ag_e, gen_der, add_ress, wg, hg, btype, dis)) # Commit changes conn.commit() # Close our connection conn.close() def Delete(): # open database Database() if not tree.selection(): tkMessageBox.showwarning("Warning", "Select data to delete.") else: result = tkMessageBox.askquestion('Confirm', 'Are you sure you want to delete this record?', icon="warning") if result == 'yes': curItem = tree.focus() contents = (tree.item(curItem)) selecteditem = contents['values'] tree.delete(curItem) cursor = conn.execute("DELETE FROM STUDENT_REGISTRATION WHERE STU_ID = %d" % selecteditem[0]) conn.commit() cursor.close() conn.close() # function to search data def SearchRecord(): # open database Database() # checking search text is empty or not if SEARCH.get() != "": # clearing current display data tree.delete(*tree.get_children()) # select query with where clause cursor = conn.execute("SELECT * FROM STUDENT_REGISTRATION WHERE ID LIKE ?", ('%' + str(SEARCH.get()) + '%',)) # fetch all matching records fetch = cursor.fetchall() # loop for displaying all records into GUI for data in fetch: tree.insert('', 'end', values=(data)) cursor.close() conn.close() # defining function to access data from SQLite database def DisplayData(): # open database Database() # clear current data tree.delete(*tree.get_children()) # select query cursor = conn.execute("SELECT * FROM STUDENT_REGISTRATION") # fetch all data from database fetch = cursor.fetchall() # loop for displaying all data in GUI for data in fetch: tree.insert('', 'end', values=(data)) cursor.close() conn.close() # calling function DisplayForm() if __name__ == '__main__': # Running Application mainloop()