修改信息
没有连接数据库的做法
设立初始列表
array1 = ['1', '许佳琪', '男', '19990824', "IS"]
array2 = ['2', 'c', '女', '19980615', 'CX']
array3 = ['3', '张鹏辉', '男', '19990621', 'II']
ayy = [array1, array2, array3]
修改框的窗口,设置位置,用那个位置函数都不要紧,主要是提交的数据,A2框的位置控件可以参考连接数据库的位置布局,是一样的。【主要获取信息和打印信息,会了这些基本就能完成这个项目】
暂时做不到动态查询信息,只能添加查询按钮,在输入工号后查询出来的基础上进行修改
将工号对应的其他四项信息反到窗口控件Entry上,
def xcxg(): # 查询,将输入的工号
tgh = bc.get()#得到工号
for i in ayy:#循环初始化数据
if tgh == i[0] :#看每个人的信息的工号是否与tgh相符,相符执行以下操作
e1['text'] = i[0]#e1设置的是Label,不可更改,每次查询覆盖上次数据
e2.delete(0, END)#每次查询均会清空e2,e3,e4,e5的数据
e3.delete(0, END)
e4.delete(0, END)
e5.delete(0, END)
e2.insert(0, i[1])#插入信息到Entry控件
e3.insert(0, i[2])
e4.insert(0, i[3])
e5.insert(0, i[4])
然后提交更改后的数据,判断条件和添加新人的判断条件一样,弹框信息与添加那里的一样,工号因为是获取的所以不用判断
def xiugai():
tgh = bc.get()
for i in ayy:
if tgh == i[0] :
txb, tcs, tzw = 1, 1, 1
xm = e2.get()
xb = e3.get()
cs = e4.get()
zw = e5.get()
if xb not in ['男', '女']:
txb = 0
messagebox.showinfo('提示', '性别错误')
if not a.search(cs[:8]):
tcs = 0
messagebox.showinfo('issue', '出生错误')
if zw not in ['AI', 'CX', 'II', 'HR', 'HQ', 'CW', 'IS']:
tzw = 0
messagebox.showinfo('提示', '职位错误')
if txb and tcs and tzw:
i[1] = xm
i[2] = xb
i[3] = cs
i[4] = zw
print(ayy)#打印修改后的数据
输入1 ,点击查询,修改下面的四项,比如修改职位为CW,点击修改
可以看到输出的列表许佳琪的职位变成了CW
连接到数据库的代码【rggldb数据库->rs表,[127.0.0.1]本地连接】
import re # 导入正则表达式模块
import pyodbc # 导入数据库模块
from tkinter import * # 窗口模块
from tkinter import messagebox # 消息框模块
# 工号为主键不可进行更改,公司的部门有['AI','CX','II','HR','HQ','CW','IS']
list_zw=['AI','CX','II','HR','HQ','CW','IS']
def A2(): # 修改
a = re.compile(r'''((19[0-9]{2}|20[01][0-9]|202[012]) #1900-2022
((0[13578]|1[02]) (0[1-9]|[12][0-9]|3[01])|
(0[469] | 11) (0[1-9]|[12][0-9]|30)|
(02(0[1-9]|1[0-9]|2[0-8]))))|
(((19|20)(0[48]|[2468][048]|[13579][26])|
((0[48]|[2468][048]|[3579][26])00))0229)
''', re.VERBOSE)
def xcxg(): # 查询,将要修改的工号人的信息查询并显示
ghxm = bc.get()
co = pyodbc.connect('DRIVER={sql server};SERVER=127.0.0.1;DATABASE=rsgldb')
yb = co.cursor()
s = "select * from rs"
yb.execute(s)
arr = yb.fetchone()
while arr:
if ghxm == arr[0]:
e1['text'] = arr[0] # 显示工号,不可更改
e2.delete(0, END) # 删除输入框的内容
e3.delete(0, END)
e4.delete(0, END)
e5.delete(0, END)
e2.insert(0, arr[1]) # 向输入框插入修改后的内容
e3.insert(0, arr[2])
e4.insert(0, arr[3])
e5.insert(0, arr[4])
arr = yb.fetchone()
yb.close()
co.close()
def xiugai():
ghxm = bc.get()
co = pyodbc.connect('DRIVER={sql server};SERVER=127.0.0.1;DATABASE=rsgldb')
yb = co.cursor()
txb, tcs, tzw = 1, 1, 1
xm = e2.get()
xb = e3.get()
cs = e4.get()
zw = e5.get()
if xb not in ['男', '女']:
txb = 0
messagebox.showinfo('提示', '性别错误')
if not a.search(cs[:8]):
tcs = 0
messagebox.showinfo('issue', '出生错误')
if zw not in list_zw:
tzw = 0
messagebox.showinfo('提示', '职位错误')
if txb and tcs and tzw: # 性别,出生,职位均为真为执行sql的修改语句
sql = "update rs set 姓名='{0}',性别='{1}',出生日期='{2}',职位='{3}' where 工号='{4}'".format(xm, xb, cs, zw, ghxm)
yb.execute(sql)
co.commit()
yb.close()
co.close()
messagebox.showinfo('提示','修改成功')
r2 = Tk()
r2.title('修改')
r2.geometry('370x320+300+100')
b = Label(r2, text='输入你的工号')
b.place(x=60, y=20)
bc = Entry(r2)
bc.place(x=200, y=20, width=120, height=20)
button = Button(r2, text="查询", bg='#f00000', command=lambda: xcxg()) # 设置查询功能,并标红此按钮
button.place(x=60, y=50)
l1 = Label(r2, text='更改数据')
l1.place(x=220, y=50)
b1 = Label(r2, text='工号')
b1.place(x=60, y=80)
e1 = Label(r2, )
e1.place(x=200, y=80)
b2 = Label(r2, text='姓名')
b2.place(x=60, y=110)
e2 = Entry(r2)
e2.place(x=200, y=110, width=120, height=20)
b3 = Label(r2, text='性别')
b3.place(x=60, y=140)
e3 = Entry(r2)
e3.place(x=200, y=140, width=120, height=20)
b4 = Label(r2, text='出生日期')
b4.place(x=60, y=170)
e4 = Entry(r2)
e4.place(x=200, y=170, width=120, height=20)
b5 = Label(r2, text='职位')
b5.place(x=60, y=200)
e5 = Entry(r2)
e5.place(x=200, y=200, width=120, height=20)
button1 = Button(r2, text=' 修改 ', command=lambda: xiugai())
button1.place(x=60, y=240, width=120, height=50)
button2 = Button(r2, text=' 返回 ', command=r2.destroy)
button2.place(x=200, y=240, width=120, height=50)
r2.mainloop()
A2()