【解決方法】.exeファイルはsqliteで動作しますが、ウィンドウ実行可能ファイルに変換するとデータベースにデータを保存できません


Python
from tkinter import *
import tkinter as tk
import tkinter.messagebox as tkMessageBox  
import sqlite3

#function to define database
def Database():
    global conn,cursor
    #create person database
    conn=sqlite3.connect("regform.db")
    cursor=conn.cursor()
    #creating person_reg table
    cursor.execute('''
                CREATE TABLE IF NOT EXISTS PERSON(
     pr_id INT AUTO_INCREMENT PRIMARY KEY,
     pr_name VARCHAR(50),
     pr_age VARCHAR(10),
     pr_gender VARCHAR(50),
     pr_email VARCHAR(50),
     pr_phone VARCHAR(50)
     
     )

 ''')





def Registration():
    Database()
    #getting form data
    name1=e1.get()
    age1=e2.get()
    gender1=e3.get()
    email1=e4.get()
    phone1=e5.get()
    #applying empty validations
    if name1=='' or age1=='' or gender1=='' or email1=='' or phone1=='':
        tkMessageBox.showinfo("Warning","fill the empty field")
    else:
        #execute query
        cursor.execute('''
        INSERT INTO PERSON (pr_name, pr_age, pr_gender, pr_email, pr_phone)
        VALUES (?, ?, ?, ?, ?)
    ''', (name1, age1, gender1, email1, phone1))
    conn.commit()
    tkMessageBox.showinfo("Message","Stored successfully")
    conn.close()
window=tk.Tk()
window.geometry('300x200')
window.title("Registration Portal")
#label for the box field
l1=tk.Label(window,text='Person Details')
l2=tk.Label(window,text='Name')
l3=tk.Label(window,text='Age')
l4=tk.Label(window,text='Gender')
l5=tk.Label(window,text="Email")
l6=tk.Label(window,text="Phone")

l1.grid(row=1,column=1)
l2.grid(row=2,column=1)
l3.grid(row=3,column=1)
l4.grid(row=4,column=1)
l5.grid(row=5,column=1)
l6.grid(row=6,column=1)
#create box field
e1=tk.Entry(window)
e2=tk.Entry(window)
e3=tk.Entry(window)
e4=tk.Entry(window)
e5=tk.Entry(window)

e1.grid(row=2,column=2)
e2.grid(row=3,column=2)
e3.grid(row=4,column=2)
e4.grid(row=5,column=2)
e5.grid(row=6,column=2)

#submit button
b=tk.Button(window,text='Submit Here', command=Registration)
b.grid(row=7,column=1)

window.mainloop()

私が試したこと:

フォームはウィンドウの実行可能ファイルでデータベース接続を使用して送信されます

解決策 1

おそらく、これは EXE ファイルの場所に関係しています。適切にインストールされている場合は、「Program Files」(または 32 ビット アプリの場合は「Program Files (x86)」)の下にあり、これらのフォルダーは書き込みを防ぐために書き込み保護されています(または、マルウェア活動を最小限に抑えます。

したがって、まず EXE ファイルと SqLite DB ファイルのフォルダーを確認し、必要に応じて、より適切な場所に移動します。
これは次の場合に役立ちます。 データをどこに保存すればよいですか?[^] – コードは C# ですが、Python では同等のコードを使用します。 os.getenv[^]

コメント

タイトルとURLをコピーしました