Commande valider access

Bonjour,
jai du code vb qui me permet d'inserer ou de supprimer des enregistrements dans une table lorque je clique sur le bouton valider , cependant mon code ne marche pas et je ne trouve pas l'erreur mercu de m'aider

Private Sub Cmd_valid_Click()
On Error GoTo Err_cmd_valid_Click
If chx <> "a" Then
lst_id.Visible = False
lst_nom = ""
Else
lst_id.Visible = True
lst_nom.Visible = False

End If
If chx <> "s" Then
If chx = "a" Then
End If
End If
DoCmd.RunCommand acCmdRecordsGoToNew
lst_id.Requery
lst_id = ""

Now.RowSource = "SELECT avril09.* from avril09; "
Me.Refresh
If chx = "m" Or "a" Then
dmcmd.RunSQL "insert into avril09(division,section,entité_pilotage,identifiant,UP,Nom,Prenom,Agent_Sexe,Grade,Clasniv_grade,n°_fonction,libelle_fonction,clasniv_fct,Agent_Statut,Date_naissance,quotite) values('" & Me.division & "," & Me.section & " , " & Me.[entité pilotage] & " , " & Me.identifiant & " , " & Me.UP & " , " & Me.Prenom & " , " & Me.[Agent Sexe] & " , " & Me.Grade & " , " & Me.clasniv_grade & " , " & Me.[n° fonction] & " , " & Me.Libelle_fonction & " , " & Me.clasniv_fct & " , " & Me.[Agent Statut] & " , " & Me.[Date naissance] & " , " & Me.quotite & "' )"
End If
If chx = "s" Then
dmcmd.RunSQL "delete avril09.* from avril09 where identifiant = " & CLng(lst_id.Value)
DoCmd.RunSQL req
DoCmd.Close acForm, "frm_personnel"
End Sub

merci!!!
Configuration: Windows XP Internet Explorer 6.0

83 réponses

Résumé de la discussion

Un code VB destiné à insérer ou supprimer des enregistrements dans une table Access lors du clic sur le bouton valider présente des dysfonctionnements et nécessite une correction. Le code mêle des vérifications basées sur des conditions (chx) et des commandes SQL construites dynamiquement, ce qui mène à des erreurs de syntaxe et à des échecs d'exécution. Des conseils soulignent l'importance de syntaxes SQL valides avec des chaînes entourées de guillemets et de dates encadrées par des dièses, ainsi que l'usage de paramètres pour éviter les erreurs. En complément, les points d'arrêt dans l'IDE permettent de repérer la ligne problématique et d'observer les valeurs des champs du formulaire, ce qui aide à corriger les erreurs de syntaxe et de données.

Bobot (l’IA à votre service)
  1. ton code est bien trop long pour moi, mais voici la solution, il faut tout d'abord détecter l'erreur je te propose de commencer par soit mettre des points d'arrêts soit des msgbox pour savoir ce qu'il y a dans tes variables

    une fois l'erreur ciblé on pourras intervenir que mieux au lieu d'en créer, comme cela peut être le cas maintenant
    0
    1. je les place ou met point darret ou msgbox
      car les probleme vient certainement de ma requete
      0
      1. déjà un problème la dessus

        If chx <> "s" Then
        If chx = "a" Then
        End If
        End If
        DoCmd.RunCommand acCmdRecordsGoToNew
        lst_id.Requery
        lst_id = ""


        tu fait deux if et tu les ferme sans rien mettre dedans est ce normal?

        de plus à quoi te sert

        DoCmd.RunCommand acCmdRecordsGoToNew
        lst_id.Requery
        lst_id = ""


        je ne connais pas la commande que tu utilise mais j'ai un doute éclaire moi la dessus
        0
        1. si le problème viendrais de ta requête tu aurais sûrement un message d'erreur mais il y a un cas ou ce ne marche pas comme ça c'est vrai

          mets des msgbox avant et après chaque variables
          et un points d'arrêts sur ta ligne de requête

          et enfin donne moi les types des valeurs que tu passe dans ta requêtes
          0
          1. je pense que ces instructions ne me servent plus.en faite jai une liste déroulante lst_id lorsque je clique dessus toutes les informations concernant les personnes se remplissent . je peux ainsi modifier supprimer des informations
            cest la qu intervient le bouton valider dont mon code est faux
            0
            1. il me faut impérativement les valeurs que tu rentre dans tes champs, a savoir si tu rentre des chaînes de caractère ou un format date ect

              values('" & Me.division & "," & Me.section & " , " & Me.[entité pilotage] & " , " & Me.identifiant & " , " & Me.UP & " , " & Me.Prenom & " , " & Me.[Agent Sexe] & " , " & Me.Grade & " , " & Me.clasniv_grade & " , " & Me.[n° fonction] & " , " & Me.Libelle_fonction & " , " & Me.clasniv_fct & " , " & Me.[Agent Statut] & " , " & Me.[Date naissance] & " , " & Me.quotite & "' )"

              l'erreur réside sûrement dedans
              0
              1. cest que du texte ou des nombres
                date de naissace cest type date
                quotité sexe up entite pilotage cest du nombre le reste du texte
                0
                1. si tu veux je tenvoi mon formulaire par mail
                  jai le meme formulaire avec la requete qui marche mais le code est le meme jai fait un copier coller dans celui la et sa ne marche pas
                  jai changé certains champ depuis.mais jai gardé des meme nom
                  0
                  1. nan c'est pas la peine merci je vais t'expliquer la syntaxe est très rigoureuse dans un "insert to" et en plus il faut ajouter des cochoneries

                    alors part étape tu dois :

                    vérifier que tout les champs de ta table sont bien orthographier comme dans ta requête
                    fait de même pour tes values
                    ensuite vérifie que tes values reçoivent bien les valeurs que tu rentre dans ton formulaires ( avec un points d'arrêts)
                    vérifie que tes values correspondent bien à tes champs
                    ensuite lorsque tu devra remplir un champ qui contient du texte tu devra utiliser la syntaxe suivante:
                    ça : '" & Me.Libelle_fonction & "' au lieu de ça " & Me.Libelle_fonction & "
                    différence de simple quote
                    de même pour les champ de format date
                    ça : #" & Me.Libelle_fonction & "# au lieu de ça " & Me.Libelle_fonction & "

                    et enfin ajoute un ; à la fin
                    ] & " , " & Me.quotite & "' );"

                    et regarde par la peut être que .....
                    http://www.commentcamarche.net/forum/affich 12903676 il me faut une paire d yeux?#14
                    0
                    1. merci je vais essayé , quand tu me dis des points d'arret tu veux dire quoi?
                      0
                      1. c'est value ou values? certains dise value
                        0
                        1. que je t'explique mon enfant (:)) quand je dit values c'est pour me la péter je devrais dire valeur, par contre quand je dis values c'est que ça correspond à VALUES de ton insert to, la dedans il y a tout tes items comme une zone de texte ou liste déroulante et que sais je encore. bref le problème est que tu a une erreur mais que rien ne s'affiche pour te l'indiquer donc cela peut venir de ta syntaxe de ton insert to

                          si tu a une zone de texte pour prendre un exemple
                          le champ prénom tu dois avoir une zone de texte ou une liste déroulante pour saisir le prénom ce que tu a choisis est un item que tu utilise dans VALUES de cette façon " & Me.Prenom & "

                          pour une chaine de caractère tu dois impérativement entouré par des guillemets sinon rien ne s'affiche dans ta table
                          de même pour la date que tu dois entourer de #....#

                          bref ça tu l'as compris

                          maintenant pour mettre un points d'arrêts ( et ce une fois que tu sauras l'utiliser tu verra c'est très utiles )
                          il suffit que tu aille dans la fenêtre de code vb tu vas sur la ligne de code ( ici la ligne de ta commande INSERT TO ) et dans la marge tu click et normalement tu dois avoir un point rouge écarlate et ta ligne se surlignera de la même couleur

                          en espérant que tu ais tout compris
                          0
                          1. jai changé comme tu m'as dit jai mis un point d'arret sur la ligne de ma commande mais tj rien ne se passe
                            Private Sub Cmd_valid_Click()
                            On Error GoTo Err_cmd_valid_Click
                            DoCmd.RunCommand acCmdRecordsGoToNew
                            lst_id.Requery
                            lst_id = ""
                            'renvoi les données de la requete
                            Now.RowSource = "SELECT avril09.* from avril09; "
                            Me.Refresh
                            If chx = "m" Or "a" Then
                            dmcmd.RunSQL "INSERT INTO avril09(division,section,entité_pilotage,identifiant,UP,Nom,Prenom,Agent_Sexe,Grade,Clasniv_grade,n°_fonction,libelle_fonction,clasniv_fct,Agent_Statut,Date_naissance,quotite) VALUES ('" & Me.division & " ' , ' " & Me.section & " ' , " & Me.[entité pilotage] & " , " & Me.identifiant & " , ' " & Me.Nom & " ' , " & Me.UP & " , ' " & Me.Prenom & " ' , " & Me.[Agent_Sexe] & " , ' " & Me.Grade & " ' , " & Me.clasniv_grade & " , " & Me.[n°_fonction] & " , ' " & Me.Libelle_fonction & " ' , " & Me.clasniv_fct & " , ' " & Me.[Agent_Statut] & " ' , # " & Me.[Date_naissance] & " # , " & Me.quotite & " )"
                            End If
                            If chx = "s" Then
                            dmcmd.RunSQL "DELETE avril09.* FROM avril09 WHERE identifiant = " & CLng(lst_id.Value)
                            DoCmd.RunSQL req
                            End If
                            DoCmd.Close acForm, "frm_personnel"
                            End Sub
                            0
                            1. autant pour moi j'ai oublié de te donner une explication essentielle , lorsque tu passe ton curseur sur une variable tu peux voir ce qu'elle contiens

                              exemple

                              je met un points d'arrêts sur la ligne en question je ferme et j'ouvre mon formulaire ( si il n'est pas déjà ouvert) ensuite je remplis mes champs normalement rien ne se passe mais maintenant j'appuie sur le bouton valider ( bouton ou se situe mon code et donc mon points d'arrêts ) maintenant l'ordinateur exécute chaque instruction jusqu'à la ligne de code ou est le point d'arrêt, la le programme s'arrête et la fenêtre de vb s'ouvre tu es directement positionné sur la ligne de code arrêter, tu l'a verra en jaune et la tu pourras passer la souris sur les champs tel que " & Me.quotite & " et tu verra une sorte d'infobule qui te donneras le contenu de ta variable, si il y a ce que tu as rentré c'est déjà très encourageant
                              0
                              1. il me met erreur de compilation , argument non facultatif
                                et il me surligne division du values
                                0
                                1. alors déjà il y a une anomalie car au niveau du champ up correspond la valeur de nom et au niveau du champ nom correspond la valeur de up

                                  maintenant qu'est ce qu'es division dans ta table ta clé?, ou alors tu ne saisie pas la valeur de division dans ton formulaire

                                  je vais me renseigner sur l'erreur
                                  0
                                  1. Pourtant ma requete fonctionnait parfaitement hier avant que je modifie certains cahmp du formulaire
                                    jai insérer des prédicats d'expression dans les listes déroulantes
                                    0
                                    1. c'est l'identifiant qui est la clé primaire , la division est un champ de type texte
                                      0
                                      1. un truc con mais

                                        dmcmd.RunSQL "INSERT INTO avril09(division,section,entité_pilotage,identifiant,UP,Nom,Prenom,Agent_Sexe,Grade,Clasniv_grade,n°_fonction,libelle_fonction,clasniv_fct,Agent_Statut,Date_naissance,quotite) VALUES ('" & Me.division & " ' , ' " & Me.section & " ' , " & Me.[entité pilotage] & " , " & Me.identifiant & " , ' " & Me.Nom & " ' , " & Me.UP & " , ' " & Me.Prenom & " ' , " & Me.[Agent_Sexe] & " , ' " & Me.Grade & " ' , " & Me.clasniv_grade & " , " & Me.[n°_fonction] & " , ' " & Me.Libelle_fonction & " ' , " & Me.clasniv_fct & " , ' " & Me.[Agent_Statut] & " ' , # " & Me.[Date_naissance] & " # , " & Me.quotite & " )"
                                        End If
                                        If chx = "s" Then
                                        dmcmd.RunSQL "DELETE avril09.* FROM avril09 WHERE identifiant = " & CLng(lst_id.Value)

                                        ce n'est pas DoCmd à la place?
                                        0
                                        1. j'avais deja corriger cette erreur qui est revenu je ne sais pa scomment bref jai corrigé jai testé et sa ne marche toujours pas la modification n'est pas prise en compte dans ma base de donnée
                                          0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5