IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Access requete paramétrée - Problème de syntaxe


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut Access requete paramétrée - Problème de syntaxe
    Bonjour,

    Je sollicite votre aide car je ne comprend pas ce qui cloche dans mon code.
    J'ai une erreur de type "Erreur de syntaxe dans l'instruction INSERT INTO"

    Voici le code incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     'Dim Requete As String = "INSERT INTO USERS (Identifiant, Nom, Prenom, Password, Mail, Role, Cercle, DateCreation, DateValidite, Verrouille, NumElements, CheminDefaut, CopieMail, AccuseMail) VALUES (@Identifiant,@Nom,@Prenom,@Password,@Mail,@Role,@Cercle,@DateCreation,@DateValidite,@Verrouille,@NumElements,@CheminDefaut,@CopieMail,@AccuseMail)"
                Dim Requete As String = "INSERT INTO USERS (Identifiant,Nom,Prenom,Password,Mail,Role,Cercle,DateCreation,DateValidite,Verrouille,NumElements,CheminDefaut,CopieMail,AccuseMail) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
     
                Dim commande As New OleDbCommand(Requete, Connexion)
     
                With commande
     
                    .Parameters.Add("@Identifiant", OleDbType.VarChar).Value = TxtIdentifiant.Text
                    .Parameters.Add("@Nom", OleDbType.VarChar).Value = TxtNom.Text
                    .Parameters.Add("@Prenom", OleDbType.VarChar).Value = TxtPrenom.Text
                    .Parameters.Add("@Password", OleDbType.VarChar).Value = TxtPassword1.Text
                    .Parameters.Add("@Mail", OleDbType.VarChar).Value = TxtMail.Text
                    .Parameters.Add("@Role", OleDbType.VarChar).Value = TxtRole.Text
                    .Parameters.Add("@Cercle", OleDbType.VarChar).Value = CmbSite.Text
                    .Parameters.Add("@DateCreation", OleDbType.Date).Value = DateTime.Now.Date
                    .Parameters.Add("@DateValidite", OleDbType.Date).Value = DtpValidite.Value.Date
                    If ChkVerrouille.Checked = True Then
                        .Parameters.Add("@Verrouille", OleDbType.VarChar).Value = "OUI"
                    Else
                        .Parameters.Add("@Verrouille", OleDbType.VarChar).Value = "NON"
                    End If
                    .Parameters.Add("@NumElements", OleDbType.VarChar).Value = "5"
                    .Parameters.Add("@CheminDefaut", OleDbType.VarChar).Value = "C:\"
                    .Parameters.Add("@CopieMail", OleDbType.VarChar).Value = "N"
                    .Parameters.Add("@AccuseMail", OleDbType.VarChar).Value = "N"
     
                End With
     
                Try
     
                    Connexion.Open()
     
                    commande.ExecuteNonQuery()
     
                    Connexion.Close()
     
                Catch ex As Exception
     
                    MsgBox("Une erreur est survenue lors de la création de l'utilisateur." & vbCrLf & vbCrLf & ex.Message, vbOKOnly + vbCritical, "MyGED")
     
                    Connexion.Close()
     
                    Exit Sub
     
                End Try
    La requête commentée était un essai précédent. J'arrive sans problème à utiliser ce code en SQL server, mais sur Access je ne parviens pas à l'adapter. J'ai cherché sur le Net, mais je ne trouve rien de concluant. Le code présenté devrait normalement fonctionner selon le dernier exemple que j'ai pu trouver ... mais en fait non.

    Si quelqu'un peut m'expliquer si c'est le VB qui n'est pas correcte au niveau des paramètres, ou si c'est mon SQL qui est foiré ce serait vraiment sympa car là ça me m'enquiquine de perdre du temps sur un truc aussi basique.

    Merci d'avance de votre aide.

    Bonne journée.

    Cordialement-

  2. #2
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut
    J'ai finalement trouvé la solution !

    Donc pour les prochains qui se demanderaient comment qu'y faut bien-t-il faire pour créer un nouvel enregistrement dans une base Access à l'aide d'une requête paramétrée ? #jaimecoderpropre

    Voici un exemple présentant la façon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     Dim Requete As String = "INSERT INTO USERS ([Identifiant],[Nom],[Prenom],[Password],[Mail],[Role],[Cercle],[DateCreation],[DateValidite],[Verrouille],[NumElements],[CheminDefaut],[CopieMail],[AccuseMail]) VALUES (@Identifiant,@Nom,@Prenom,@Password,@Mail,@Role,@Cercle,@DateCreation,@DateValidite,@Verrouille,@NumElements,@CheminDefaut,@CopieMail,@AccuseMail)"
     
                Dim commande As New OleDbCommand(Requete, Connexion)
     
                With commande
     
                    .Parameters.AddWithValue("@Identifiant", TxtIdentifiant.Text)
                    .Parameters.AddWithValue("@Nom", TxtNom.Text)
                    .Parameters.AddWithValue("@Prenom", TxtPrenom.Text)
                    .Parameters.AddWithValue("@Password", TxtPassword1.Text)
                    .Parameters.AddWithValue("@Mail", TxtMail.Text)
                    .Parameters.AddWithValue("@Role", TxtRole.Text)
                    .Parameters.AddWithValue("@Cercle", CmbSite.Text)
                    .Parameters.AddWithValue("@DateCreation", DateTime.Now.Date)
                    .Parameters.AddWithValue("@DateValidite", DtpValidite.Value.Date)
                    If ChkVerrouille.Checked = True Then
                        .Parameters.AddWithValue("@Verrouille", "OUI")
                    Else
                        .Parameters.AddWithValue("@Verrouille", "NON")
                    End If
                    .Parameters.AddWithValue("@NumElements", "5")
                    .Parameters.AddWithValue("@CheminDefaut", "C:\")
                    .Parameters.AddWithValue("@CopieMail", "N")
                    .Parameters.AddWithValue("@AccuseMail", "N")
     
                End With
     
                Try
     
                    Connexion.Open()
     
                    commande.ExecuteNonQuery()
     
                    Connexion.Close()
     
                Catch ex As Exception
     
                    MsgBox("Une erreur est survenue lors de la création de l'utilisateur." & vbCrLf & vbCrLf & ex.Message, vbOKOnly + vbCritical, "MyGED")
     
                    Connexion.Close()
     
                    Exit Sub
     
                End Try
    Des crochets les zenfants !!! des crochets !!! mais quel fou a pondu cette idée ? et créer le paramètre avant de le renseigner ! Mais quelle autre bonne idée ! Heureusement qu'on fait d'une pierre deux coups avec le AddWithValue !

    Allez boujou bien !

    Cordialement-

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    les crochets ne sont pas obligatoires il me semble, ils sont aussi acceptés par sql server d'ailleurs, et sont obligatoires dans le cas d'une colonne ayant un nom réservé ou avec un espace dedans
    et tu as remplacé tes ? par des @nom entre les 2 requêtes
    il faut aussi savoir qu'access ne se sert pas des noms des paramètres, il faut que l'ordre dans lequel ils sont ajoutés soit le même que l'ordre d'apparition dans la requête, ce qui peut créer de gros bugs si 2 sont inversés mais du même type
    après access n'a jamais été un outil pratique et fiable ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] sous Requete sélection aléatoire dans requete update. Problème de syntaxe
    Par Chagui dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/04/2011, 10h58
  2. Requete SQL : problème de syntaxe ?
    Par Thomus38 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/04/2007, 16h50
  3. [VBA-A ] requete paramétrée sous access
    Par mymeal dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/08/2006, 17h54
  4. requete paramétrée access
    Par LostIN dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 30/06/2006, 14h05
  5. [SQL][REQUETE] problème de syntaxe
    Par Stender dans le forum Access
    Réponses: 4
    Dernier message: 02/03/2006, 21h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo