Доступ к базе данных MySQL с другого компьютера, на котором не установлена ​​mysql - PullRequest
0 голосов
/ 24 апреля 2020

Я создал программное обеспечение tkinter gui, где они могут вводить свои данные, и оно вводит их в базу данных удаленно, но я обнаружил, что его версия .exe фактически не позволяет другому пользователю добавлять данные в базу данных, поскольку у них нет mysql установлено в их системе. Есть ли альтернатива этому? Заранее спасибо:)

Код:

from tkinter import *
from tkinter.font import Font
from tkinter.font import Font
from tkinter import messagebox
from tkinter import filedialog
from PIL import ImageTk,Image
from tkcalendar import Calendar
import mysql.connector as mysql
from tkinter import ttk
from ttkthemes import themed_tk as tktheme

#root=Tk()

#Mainwindow
root = tktheme.ThemedTk()
root.get_themes()
root.set_theme('vista')
root.title('Patient Information')
font_text = Font(family='helvetica',size='11')
font_button = Font(size='10')
root.iconbitmap('Image/icn.ico')

#List for Optionmenu
gen = ['Male','Female']
bl_gr = ['A+','A-','B+','B-','O+','O-','AB+','AB-']
cov = ['Yes','No','N/A']

#Defining Functions
def database(*args):
    nme = name.get()
    p_h = ph.get()
    eid = e_id.get()
    ema_id = em_id.get()
    nat = nation.get()
    emer = emerg.get()
    gend = g.get()
    bloo = b.get()
    covi = co.get()
    dat = cal.selection_get()

    if len(nme)<1 or len(p_h)<7 or len(eid)<7 or len(nat)<3 or len(emer)<7:
        messagebox.showinfo('Enter valid information','Please make sure to fill all the boxes')
    elif dat=="":
        messagebox.showinfo('Choose Date','Please choose date of birth')
    elif nme=="" or p_h=="" or eid=="" or ema_id=="" or nat=="" or emer=="" or gend=="" or bloo=="" or covi=="" or dat=="":
        messagebox.showinfo('Fill all','All fields are necessary')
    else:
        con = mysql.connect(host='db4free.net', user='****', password='******', database='******')
        c = con.cursor()
        c.execute("Insert into PATIENTS VALUES ('"+nme+"','"+p_h+"','"+eid+"','"+ema_id+"','"+gend+"','"+str(dat)+"','"+nat+"','"+str(bloo)+"','"+str(covi)+"','"+emer+"')")
        c.execute('commit')
        con.close()
        messagebox.showinfo('Success','All values have been entered to the database')
        e1.delete(0, END)
        e2.delete(0, END)
        e3.delete(0, END)
        e4.delete(0, END)
        e5.delete(0, END)
        e6.delete(0, END)

def datepicker():
    global cal
    global a
    def date():
        global cal
        a = cal.selection_get()

    top = Toplevel(root)
    top.title('Choose Date')
    cal = Calendar(top,font="Arial 14", selectmode='day', year=2006, month=1, day=1)
    cal.pack(fill="both", expand=True)
    Button(top, text="OK", command=top.destroy,font=font_text).pack(fill='both')

def newtop():
    global new
    global img
    global img_prof
    new = Toplevel(root)
    new.iconbitmap('Image/icn_1.ico')
    mainfiledir = Image.open('Image/ID Card.png')
    img = ImageTk.PhotoImage(mainfiledir)
    img_label = Label(new, image=img)
    img_label.grid(row=1, column=2)
    dir = Image.open(path)
    dir = dir.resize((150, 150), Image.ANTIALIAS)
    img_prof = ImageTk.PhotoImage(dir)
    img_label = Label(new, image=img_prof)
    img_label.place(x=500, y=150)
    lo1 = Label(new, text=e1.get(), bg='white', font=font_text).place(x=330, y=127)
    lo2 = Label(new, text=e2.get(), bg='white', font=font_text).place(x=345, y=155)
    lo3 = Label(new, text=e3.get(), bg='white', font=font_text).place(x=315, y=183)
    lo4 = Label(new, text=g.get(), bg='white', font=font_text).place(x=165, y=227)
    lo5 = Label(new, text=b.get(), bg='white', font=font_text).place(x=220, y=257)
    lo6 = Label(new, text=cal.selection_get(), bg='white', font=font_text).place(x=220, y=288)

def imgpath():
    global path
    path = filedialog.askopenfilename(initialdir='/Donwloads',title='Select Photo',filetypes=(('PNG files','*.png'),
                                                                                              ('JPEG files','*.jpg')))

def popup():
    selection = messagebox.askyesno('Exit','Are you sure you want to exit?')
    if selection == 1:
        root.destroy()
    else:
        Label(root,text="")

def reset():
    select = messagebox.askyesno('Reset', 'Are you sure you want to Reset?')
    if select == 1:
        e1.delete(0, END)
        e2.delete(0, END)
        e3.delete(0, END)
        e4.delete(0, END)
        e5.delete(0, END)
        e6.delete(0, END)
    else:
        Label(root, text="")

#Defining Labels
l1 = ttk.Label(root,text='Name',font=font_text)
l2 = ttk.Label(root,text='Phone Number',font=font_text)
l3 = ttk.Label(root,text='Emirates ID',font=font_text)
l4 = ttk.Label(root,text='Email Address',font=font_text)
l5 = ttk.Label(root,text='Gender',font=font_text)
l6 = ttk.Label(root,text='Date Of Birth',font=font_text)
l7 = ttk.Label(root,text='Nationality',font=font_text)
l8 = ttk.Label(root,text='Blood Group',font=font_text)
l9 = ttk.Label(root,text='Test for COVID-19',font=font_text)
l10 = ttk.Label(root,text='Emergency Contact Number',font=font_text)
l11 = ttk.Label(root,text='Select Photo',font=font_text)

#Defining variables
name = StringVar()
ph = StringVar()
e_id = StringVar()
em_id = StringVar()
nation = StringVar()
emerg = StringVar()

#Entry boxes
e1 = ttk.Entry(root,textvariable=name)
e2 = ttk.Entry(root,textvariable=ph)
e3 = ttk.Entry(root,textvariable=e_id)
e4 = ttk.Entry(root,textvariable=em_id)
e5 = ttk.Entry(root,textvariable=nation)
e6 = ttk.Entry(root,textvariable=emerg)

#Buttons
b_ch = ttk.Button(root,text='Select Image',command=imgpath)
b_id = ttk.Button(root,text='Make ID Card',command=newtop)
b_db = ttk.Button(root,text='Enter Database',command=database)
b_ex = ttk.Button(root,text='Exit',command=popup)
b_re = ttk.Button(root,text='Reset',command=reset)
b_dt = ttk.Button(root,text='Choose Date',command=datepicker)

#Optionmenus
g = StringVar()
g.set('Choose Gender')
opt_g = OptionMenu(root,g,*gen)

b = StringVar()
b.set('Choose group')
opt_blo = OptionMenu(root,b,*bl_gr)

co = StringVar()
co.set('Choose result')
opt_cov = OptionMenu(root,co,*cov)

#Placing Labels
l1.grid(row=0,column=0,padx=10)
l2.grid(row=1,column=0,padx=10)
l3.grid(row=2,column=0,padx=10)
l4.grid(row=3,column=0,padx=10)
l5.grid(row=4,column=0,padx=10)
l6.grid(row=5,column=0,padx=10)
l7.grid(row=6,column=0,padx=10)
l8.grid(row=7,column=0,padx=10)
l9.grid(row=8,column=0,padx=10,pady=5)
l10.grid(row=9,column=0,padx=10)
l11.grid(row=10,column=0,padx=10)

#Placing Entry boxes
e1.grid(row=0,column=1,pady=5,ipady=5,padx=5)
e2.grid(row=1,column=1,pady=5,ipady=5,padx=5)
e3.grid(row=2,column=1,pady=5,ipady=5,padx=5)
e4.grid(row=3,column=1,pady=5,ipady=5,padx=5)
e5.grid(row=6,column=1,pady=6,ipady=5,padx=5)
e6.grid(row=9,column=1,pady=5,ipady=5,padx=5)

#Placing buttons
b_ch.grid(row=10,column=1,sticky=E+W,pady=5,padx=5)
b_id.grid(row=11,column=0,sticky=E+W,padx=10,pady=5)
b_db.grid(row=11,column=1,sticky=E+W,padx=5,pady=5)
b_ex.grid(row=12,column=1,sticky=E+W,padx=5,pady=5)
b_re.grid(row=12,column=0,sticky=E+W,padx=10,pady=5)
b_dt.grid(row=5,column=1,sticky=E+W,padx=7,pady=5,ipadx=5)

#Placing optionmenu
opt_g.grid(row=4,column=1,ipadx=6,pady=3)
opt_blo.grid(row=7,column=1,padx=5,ipadx=10)
opt_cov.grid(row=8,column=1,ipadx=12,pady=5)

#Ending Program
root.mainloop()

...