Enregistrement des Donnees dans la base des donnees
mamiemando Messages postés 33264 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 septembre 2024 - 6 févr. 2024 à 19:18
- Célia doit nettoyer le tableau ci-dessous pour l’ajouter à la base de données de son entreprise. les données sont ensuite traitées automatiquement. quelles sont les 4 cellules qui risquent de poser problème ?
- Tableau croisé dynamique - Guide
- Nettoyer son mac - Guide
- Effacer les données de navigation - Guide
- Nettoyer ordinateur portable lent - Guide
- Comment sauvegarder toutes les données de mon téléphone - Guide
5 réponses
5 févr. 2024 à 18:03
Bonjour,
Je ne sais pas trop où tu en es, mais je te recommande de faire une classe permettant de te connecter / déconnecter à la base et de garantir que la connexion est effective avant de faire une requête.
Par ailleurs, je pense que ton programme va rapidement devenir assez compliqué à maintenir si tu entremêles le code lié à la base et l'interface graphique. Il faut distinguer l'interface (en mode graphique ou en mode texte) de l'accès au données. En outre, il serait bien que tu arrives à faire marcher un script minimal mettant en jeu ta base de données avant de tenter de l'intégrer dans quelque chose de plus grand.
Voici mes recommandations :
- Dans tes messages futurs, envoie des code minimal qui permet de reproduire le problème. Ici, il n'est pas clair que tkinter ait un quelconque rapport avec ta table. D'ailleurs travailler sur un exemple minimal te permettra bien souvent d'identifier le problème.
- Dans ton code, essaye de respecter les conventions de nommage python (voir PEP8)
- une_variable, une_fonction, une_instance
- UneClasse
- UNE_CONSTANTE
- Commence par essayer d'adapter ce tutoriel à ton cas.
- Prévois une fonction pour
- se connecter à la base
- se déconnecter de la base
- chaque requête
- Au démarrage de l'application tu peux tenter d'appeler la fonction de la connexion à la base.
- Une fois que ça marche, répartis les bouts de code au bons endroits dans ton interface graphique. Celle-ci devrait notamment prévoir des boutons pour :
- se connecter à la base, qui devrait être inactif si la connexion à la base est effective (curseur non nul)
- se déconnecter de la base, qui devrait être inactif tant que la connexion n'est pas effective (curseur nul)
- si la connexion est établie, un bouton par type de requête (ce que tu as commencé à faire), qui devraient être inactifs tant que la connexion n'est pas effective
- Quand tu effectues une requête, affiche-la dans ton terminal, et essaye de voir si tu parviens à l'exécuter dans un client SQL. Cela te permettra de repérer d'éventuelles erreurs de syntaxe.
Bonne chance
1 févr. 2024 à 22:25
Salut,
Tu as déjà initié la connexion à la BDD à ta ligne 13 ... donc que vient faire ici le code
BaseDeDonnees=mariadb.connect('BDGestion.db')
Déplaces tes lignes de connexion à la bdd ( lignes 13 à 26) dans ta fonction afin de pouvoir l'utiliser pour faire ta requête.
2 févr. 2024 à 17:31
Re bonjour,
J'ai deplace mes lignes de codes, mais sans resultat, c'est sur que je n'ai rien compris.
je vous remets mes codes, et je vous prie de corriger mes erreurs.
#Importer Definir source des objets import sys import tkinter import tkinter.ttk from tkinter import * from tkinter import messagebox import customtkinter # Se connecter avec la Base des Donnees import mariadb # Enregistrement des donnees #RS = mariadb.connect('BDGestion.db') curseur=RS.cursor() for BDGestion in Societes: curseur.execute("INSERT INTO BDGestion (nom,statutste,ifiscal,ncnss,tel1,tel2,email,adresse) VALUES (:Zone_RaisonSociale,:Zone_Statut,:Zone_Affiliation,:Zone_tel1,:Zone_Tel2,:Zone_Email,:Zone_Adresse)" , BDGestion) RS.commit() IdDernierEnregistrement=curseur.lastrowid RS.close() #_______________________________________________________ try: RS = mariadb.connect( user="mohammed", password="hello", host="127.0.0.1", port=3306, database="BDGestion" ) except mariadb.Error as err: messagebox.showerror(f"erreur de connexion avec la base de donnees : {err}") RS.close() #Creation de la fenetre principale Fenetre=Tk()
2 févr. 2024 à 19:28
Comment penses tu utiliser le cursor de la connexion à la bdd ....... avant ( ?? ) d'avoir ouvert la connexion à la base ?!!
3 févr. 2024 à 22:36
Re
Sincèrement j'ai tenté de me documenter sans résultat. c'est normal, je n'ai aucune formation dans le domaine.
je vous informe que j.ai crée ma BD dans mariaBD
BD = bdgestion
Table = societes (id, nom, statutste,capitalste,ifiscal,ncnss,tel1,tel2,email,adresse)
mes lignes de codes sont comme suite :
le problème se situe entre la ligne 130 et 177
Merci d'avance pour toute aide
#Importer les bibliotheques et Definir source des objets import tkinter import tkinter.ttk from tkinter import * from tkinter import messagebox import customtkinter import mariadb #_______________________________________________________ try: RS = mariadb.connect( user="mohammed", password="hello", host="127.0.0.1", port=3306, database="bdgestion" ) except mariadb.Error as err: messagebox.showerror(f"erreur de connexion avec la base de donnees : {err}") curseur=RS.cursor() #________________________________________________________________ #Creation de la fenetre principale Fenetre=Tk() #Creation de Sous Fenetre #Sous fenetre = Creation de societe def Afficher_CreationSte(): Afficher_CreationSte=tkinter.Toplevel() Afficher_CreationSte.title("Creation de Societe") Afficher_CreationSte.config(background="#E4DEBE") Afficher_CreationSte.iconbitmap("Champs.ico") Afficher_CreationSte.geometry('700x350') Afficher_CreationSte.minsize(width=400,height=200) #Creation de Frame maFrame=tkinter.LabelFrame(Afficher_CreationSte,background="#E4DEBE",relief="flat") maFrame.grid(padx=20,pady=10) maFrame.frame=customtkinter.CTkFrame(maFrame,corner_radius=10) #Evenemets #Ajouter def Ajouter_ZoneSte(): #Zone_RaisonSociale if not Zone_RaisonSociale.get(): messagebox.showinfo("Information", message="Veuillez saisir la Raison Sociale",parent=maFrame) Zone_RaisonSociale.focus_set() return #Zone_Capital if not Zone_Capital.get(): messagebox.showinfo("Information", message="Veuillez saisir le Capital",parent=maFrame) Zone_Capital.focus_set() return if Zone_Capital.get().isnumeric(): Zone_IFiscal.focus_set() else: messagebox.showerror("Erreur de saisie" , message="Erreur de saisie du Capital" , parent=maFrame) Zone_Capital.focus_set() return #Zone_IFiscal if not Zone_IFiscal.get(): messagebox.showinfo("Information", message="Veuillez saisir l'Identifiant fiscal",parent=maFrame) Zone_IFiscal.focus_set() return if Zone_IFiscal.get().isnumeric(): Zone_Affiliation.focus_set() else: messagebox.showerror("Erreur de saisie" , message="Erreur de saisie de l'Identifiant fiscal" , parent=maFrame) Zone_IFiscal.focus_set() return #Zone_affiliation if not Zone_Affiliation.get(): messagebox.showinfo("Information" , message="Veuillez saisir le Numero d'Affiliation a la CNSS", parent=maFrame) Zone_Affiliation.focus_set() return if Zone_Affiliation.get().isnumeric(): Zone_Tel1.focus_set() else: messagebox.showerror("Erreur de saisie" , message="Erreur de saisie du Numero d'Affiliation a la CNSS" , parent=maFrame) Zone_Affiliation.focus_set() return #Zone_Tel1 et Tel2 if not Zone_Tel1.get(): messagebox.showinfo("Information" , message="Veuillez saisir le Numero de Telephone" , parent=maFrame) Zone_Tel1.focus_set() return if Zone_Tel1.get().isnumeric(): Zone_Tel2.focus_set() else: messagebox.showerror("Erreur de saisie" , message="Erreur de saisie du Numero de Tel" , parent=maFrame) Zone_Tel1.focus_set() return if Zone_Tel2.get(): if Zone_Tel2.get().isnumeric(): Zone_Email.focus_set() else: messagebox.showerror("Erreur de saisie" , message="Erreur de saisie du Numero de Tel" , parent=maFrame) Zone_Tel2.focus_set() return else: Zone_Email.focus_set() #Zone_Email if not Zone_Email.get(): messagebox.showinfo("Information" , message="Veuillez saisir l'EMail" , parent=maFrame) Zone_Email.focus_set() return #Zone_Adresse if not Zone_Adresse.get(): messagebox.showinfo("Information" , message="Veuillez saisir l'Adresse" , parent=maFrame) Zone_Adresse.focus_set() return #Enregistrement des donnees for bdgestion in societes: RS=curseur.execute(""" INSERT INTO societes( nom, statutste, ifiscal, ncnss, tel1, tel2, email, adresse) VALUES ( :Zone_RaisonSociale, :Zone_Statut, :Zone_Ifiscal, :Zone_Affiliation, :Zone_Tel1, :Zone_Tel2, :Zone_Email, :Zone_Adresse)""", bdgestion.societes) RS.commit() DernierEnregistrement=curseur.lastrowid RS.close() #Vider les champs de saisie Zone_RaisonSociale.delete(0, END) Zone_Capital.delete(0, END) Zone_IFiscal.delete(0, END) Zone_Affiliation.delete(0, END) Zone_Tel1.delete(0, END) Zone_Tel2.delete(0, END) Zone_Email.delete(0, END) Zone_Adresse.delete(0, END) Zone_RaisonSociale.focus_set() messagebox.showinfo("Information",message="Donnees enregistrees") #Annuler def Annuler_ZoneSte(): Zone_RaisonSociale.delete(0,END) Zone_Capital.delete(0,END) Zone_IFiscal.delete(0, END) Zone_Affiliation.delete(0, END) Zone_Tel1.delete(0, END) Zone_Tel2.delete(0, END) Zone_Email.delete(0, END) Zone_Adresse.delete(0, END) Zone_RaisonSociale.focus_set() Titre_RaisonSociale = tkinter.Label(maFrame, text="Raison Sociale",background="#E4DEBE") Titre_RaisonSociale.grid(row=0,column=1,ipadx=10,sticky="e") Zone_RaisonSociale = tkinter.Entry(maFrame, background="#E4DEBE") Zone_RaisonSociale=customtkinter.CTkEntry(maFrame,corner_radius=10,width=450) Zone_RaisonSociale.focus_set() Zone_RaisonSociale.grid(row=0,column=2,sticky="w") Statut_Societe=tkinter.Label(maFrame,text="Statut Juridique",background="#E4DEBE") Statut_Societe.grid(row=1,column=1,ipadx=10,sticky="e") Liste_Statut=["S.A","S.A.R.L","S.N.C","S.F"] #Zone_Statut=tkinter.ttk.Combobox(maFrame,values=Liste_Statut,background="#E4DEBE") Zone_Statut = customtkinter.CTkComboBox(maFrame, values=Liste_Statut,corner_radius=10) Zone_Statut.grid(row=1,column=2,sticky="w") Titre_Capital=tkinter.Label(maFrame,text="Capital Social",background="#E4DEBE") Titre_Capital.grid(row=2,column=1,ipadx=10,sticky="e") Zone_Capital=tkinter.Entry(maFrame,background="#E4DEBE",width=23) Zone_Capital=customtkinter.CTkEntry(maFrame,corner_radius=10) Zone_Capital.grid(row=2,column=2,sticky="w") Titre_Ifiscal = tkinter.Label(maFrame, text="Identifiant Fiscal", background="#E4DEBE") Titre_Ifiscal.grid(row=3,column=1,ipadx=10 ,sticky="e") Zone_IFiscal=tkinter.Entry(maFrame,background="#E4DEBE",width=23) Zone_IFiscal=customtkinter.CTkEntry(maFrame,corner_radius=10) Zone_IFiscal.grid(row=3,column=2,sticky="w") Titre_Affiliation = tkinter.Label(maFrame, text="Affiliation CNSS", background="#E4DEBE") Titre_Affiliation.grid(row=4, column=1, ipadx=10, sticky="e") Zone_Affiliation = tkinter.Entry(maFrame, background="#E4DEBE",width=23) Zone_Affiliation=customtkinter.CTkEntry(maFrame,corner_radius=10) Zone_Affiliation.grid(row=4, column=2, sticky="w") Titre_Tel = tkinter.Label(maFrame, text="Telephone", background="#E4DEBE") Titre_Tel.grid(row=5, column=1, ipadx=10, sticky="e") Zone_Tel1 = tkinter.Entry(maFrame, background="#E4DEBE",width=23) Zone_Tel1=customtkinter.CTkEntry(maFrame,corner_radius=10) Zone_Tel1.grid(row=5, column=2, sticky="w") Zone_Tel2 = tkinter.Entry(maFrame, background="#E4DEBE",width=23) Zone_Tel2=customtkinter.CTkEntry(maFrame,corner_radius=10) Zone_Tel2.grid(row=6, column=2,sticky="w") Titre_Email = tkinter.Label(maFrame, text="E-Mail", background="#E4DEBE") Titre_Email.grid(row=7, column=1, ipadx=10, sticky="e") Zone_Email = tkinter.Entry(maFrame, background="#E4DEBE",width=23) Zone_Email=customtkinter.CTkEntry(maFrame,corner_radius=10) Zone_Email.grid(row=7, column=2, sticky="w") Titre_Adresse = tkinter.Label(maFrame, text="Adresse", background="#E4DEBE") Titre_Adresse.grid(row=8, column=1, ipadx=10, sticky="e") Zone_Adresse = tkinter.Text(maFrame, background="#E4DEBE") Zone_Adresse=customtkinter.CTkEntry(maFrame,corner_radius=10, width=550,height=40) Zone_Adresse.grid(row=8, column=2, sticky="w") BoutSte_Ajouter = customtkinter.CTkButton(maFrame,text="Ajouter", corner_radius=10, width=220,command=Ajouter_ZoneSte) BoutSte_Ajouter.grid(row=9,column=2,sticky="w",padx=5,pady=5,ipadx=10,ipady=10) BoutSte_Annuler=customtkinter.CTkButton(maFrame,text="Annuler",corner_radius=10,width=220,command=Annuler_ZoneSte) BoutSte_Annuler.grid(row=9,column=2,sticky="e",padx=5,pady=5,ipadx=10,ipady=10) #_______________________________________ #Personnaliser la fenetre principale Fenetre.iconbitmap("Champs.ico") Fenetre.title("MezApp'S Apprentissage") Fenetre.config(background="#E4DEBE") Fenetre.geometry('1080x620') Fenetre.minsize(width=700,height=400) #Creation la Barre du Menu Barre_Menu=Menu(Fenetre) #Creation Menu deroulant = Fichiers Menu1=Menu(Barre_Menu,tearoff=0) Menu1.add_command(label="Ouvrir") Menu1.add_command(label="Changement de Societe") Menu1.add_separator() Menu1.add_command(label="Creation de Societe",command=Afficher_CreationSte) Menu1.add_command(label="Creation de Campagne") Menu1.add_separator() Menu1.add_command(label="Securite") Menu1.add_command(label="Formater la Base des Donnees") Menu1.add_separator() Menu1.add_command(label="Quitter",command=Fenetre.quit) Barre_Menu.add_cascade(label="Fichiers",menu=Menu1) #------------------------------------------------- #Configurer la Barre du Menu Fenetre.config(menu=Barre_Menu) #Charger la fenetre principale Fenetre.mainloop()
Modifié le 6 févr. 2024 à 19:20
Tu dis que ton erreur a lieu entre la ligne 130 et 177, ce qui laisse entendre que ta requête SQL est mal formée. Affiche là avec un print. Moi ce qui m'étonne c'est que les valeurs que tu tentent d'insérer sont ne semblent être ni des valeurs numériques, ni des chaînes de caractères.
Avant de surcharger inutilement le problème avec tkinter, parviens-tu à faire marcher ce bout de code ?
import mariadb try: conn = mariadb.connect( user="mohammed", password="hello", host="127.0.0.1", port=3306, database="bdgestion" ) except mariadb.Error as err: print(f"Erreur de connexion avec la base de données : {err}") cursor = conn.cursor() nom = "Nom" statutste = "Statut" ifiscal = "Ifiscal" ncnss = "Affiliation" tel1 = "0102030405" tel2 = "0102030406" email = "prenom.nom@foo.fr" addresse = "Une adresse" query = f"""INSERT INTO societes( nom, statutste, ifiscal, ncnss, tel1, tel2, email, adresse ) VALUES ( '{nom}', '{statutste}', '{ifiscal}', '{tel1}', '{tel2}', '{email}', '{adresse}' )""" print(query) cursor.execute(query) conn.commit() print(f"Last Inserted ID: {cur.lastrowid}") conn.close()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question6 févr. 2024 à 18:15
Bonjour,
Par contre, si tu pouvais changer ton pseudo
lenouveauapprenti en lenouvelapprenti
ça piquerait moins les yeux :-) :-) :-)
5 févr. 2024 à 20:02
Merci pour les recommandations, sans doute je me forcerai d'y répondre