Home > database >  Show Message Box data already exist
Show Message Box data already exist

Time:09-25

I want to put ErrorMessageBox on this block of code. Like it shows that "The data has already existed".

Here is the block of code that saves to the database:

if (t1.get()==""  or t2.get()=="" or t3.get()=="" or t4.get()==""):
        messagebox.showinfo("Result","Please Complete the Provided Details!")

Here Connection to Database And Insertion

    else:
        databases = mysql.connector.connect(
        host ="localhost",
        user = "userdata",
        password = "",
        database = "facerecog"
        )

        cursors = databases.cursor()
        cursors.execute("SELECT * from record")
        result = cursors.fetchall()

Here Is the Code that Insert Data to Database

        id= t4.get()
        id = int(id) 1
        id
        sql = "INSERT INTO record(ids, names,course_year,positions) values(%s ,%s ,%s , %s)"
        val = (id, t1.get(), t2.get(), t3.get())
        cursors.execute(sql,val)
        databases.commit()

I would like to put the ErrorMessageBox if the data already exists.

In this block of code take photos. This code is connected to save database.

        face_classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
        def face_cropped(img):
            gray = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
            faces = face_classifier.detectMultiScale(gray, 1.3, 5)
            # scaling factor = 1.3
            # minimum neighbor = 5
            if faces is ():
                return None
            for (x,y,w,h) in faces:
                    cropped_face = img[y:y h, x:x w]
            return cropped_face

        cap = cv2.VideoCapture(0)
        img_id = 0

        while True:
            ret, frame = cap.read()
            if face_cropped(frame) is not None:
                img_id =1

                face = cv2.resize(face_cropped(frame), (200,200))
                face = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY)

                file_name_path = "img/" str (t1.get()) "."  str(id) "." str(img_id) ".jpg"


                cv2.imwrite(file_name_path, face)

                cv2.putText(face, str(img_id), (50,50), cv2.FONT_HERSHEY_COMPLEX, 1, (0,255,0), 2)

                cv2.imshow("Cropped face", face)

            if cv2.waitKey(1)==1 or int(img_id)==50:

                break

        cap.release()
        cv2.destroyAllWindows()

        messagebox.showinfo("Result","Saved Completed!")

CodePudding user response:

Here is an approach for you.

You can try the insert to the database and if the data already exists it will throw an exception which you can handle with your desired message.

import mysql.connector
from mysql.connector import IntegrityError

cnx = mysql.connector.connect(user='root', database='test', host='localhost', password='mypass')
cursor = cnx.cursor()

#This insert is only for duplication purposes since your id must be auto_incremental
query = ("INSERT INTO students (id, name) values (3, 'andy')")

try:
    cursor.execute(query)
    cnx.commit()
except IntegrityError:
    print("Data already exists!")
finally:
    cursor.close()
    cnx.close()

The second approach as @furas suggested, first execute a select for retrieving your data if your result is not empty, then your data exists.

import mysql.connector

cnx = mysql.connector.connect(user='root', database='test', host='localhost', password='mypass')
cursor = cnx.cursor()

name = 'andy'
query = f"SELECT * FROM students WHERE name = '{name}'"

try:
    cursor.execute(query)
    res = cursor.fetchall()
    if res is not None:
        print(f"Data already exists: {res}")
    else:
        #Execute your insertion
        pass
finally:
    cursor.close()
    cnx.close()

CodePudding user response:

Look at this example -

import tkinter as tk
from tkinter import messagebox

def error():
    messagebox.showerror('Error','There is an Error')

root = tk.Tk()

button1 = tk.Button(root,text='ERROR',command=error)
button1.pack()

root.mainloop()

Reference - MessageBox

messagebox.showinfo informs something in the message box.

messagebox.showerror gives error message. You can implement this in your code

It is another type of messagebox. You can have a look at more kinds of message box in the above link

Edit - For your comment, if you want the error, you can do -

messagebox.showerror('Heading of Error Message Box','raise errors.get_exception(packet) mysql.connector.errors.IntegrityError: 1062 (23000): Duplicate entry '4' for key 'PRIMARY'')

Just replace the string with what you want.

  • Related