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

Accès aux données Discussion :

[VB.Net] Pourquoi ai-je une erreur de syntaxe INSERT UPDATE ?


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut [VB.Net] Pourquoi ai-je une erreur de syntaxe INSERT UPDATE ?
    Bonjour

    Je veux faire un INSERT et un UPDATE sur ma base access depuis vb.net or cela me sort "ERREUR DE SYNTAXE".
    Les requètes fonctionnent très bien lorsque je les exécute directement dans access, je ne vois donc pas où est l'erreur !

    Voici les requetes :
    INSERT INTO SESSION (session_login, session_deb) VALUES ('admin', '10/08/2006 08:55:41')

    UPDATE SESSION SET session_active = 0, session_fin = '10/08/2006 08:55:48' WHERE session_id = 2
    Si quelqu'un a déjà rencontré le problème, cela me serait bien utile !
    Merci pour votre aide

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Si tes champs "session_deb" et "session_fin" sont de type "Date", tu dois utiliser des cross "#" et entourer tes timestamps (format valide) avec.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    ben justement avec les # c'est encore pire ! ça ne fonctionne qu'avec les simples quotes (aller savoir pourquoi ! avant ça marchait avec les #)

    mes 2 champs sont de type date/heure dans la base access et je ne modifie pas leur format, quand je regarde les valeurs prises avec vb avant l'insertion, elles sont ok et correspondent bien à ce que j'attends ...

    là je sèche complètement !

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par zzzmoi
    ben justement avec les # c'est encore pire ! ça ne fonctionne qu'avec les simples quotes (aller savoir pourquoi ! avant ça marchait avec les #)
    Quelle version d'access utilises-tu??

    Avec les # tu ne dois plus utiliser les quotes, tu mets ta date directement entre les #

    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MaDate FROM MaTable WHERE MaDate=#1/10/2006#;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    access 2003 version de fichier 2000

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Montre ton code alors.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Désolée pour la longueur ...

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    'CREER UNE SESSION
    Public Sub creer_session(ByVal login As String)
     
       Dim myCommandInsert As New OleDb.OleDbCommand
     
       'def de la requete INSERT
       myCommandInsert.CommandText = "INSERT INTO SESSION " &_
           "(session_login, session_deb)" &_
           " VALUES ("'" & login & "'" & ", " & "'" & Now & "')"
       Try
           'initialisation de la connexion
           myCommandInsert.Connection = maConnexion.connexBD
           Debug.Print("***************** " & _
    myCommandInsert.CommandText.ToString)
           'exécution de la requete INSERT
           'myCommandInsert.ExecuteNonQuery()
           Try
               myCommandInsert.ExecuteNonQuery()
           Catch ex As Exception
               MessageBox.Show("Requête: " & _
     myCommandInsert.CommandText.ToString & Chr(13) &_
     ex.ToString)
           End Try
       Catch ex As Exception
           MessageBox.Show("Erreur création session" & Chr(13) &_
                ex.ToString(), "Erreur session", _
                MessageBoxButtons.OK, MessageBoxIcon.Stop)
       Finally
          maConnexion.fermer()
       End Try
    End Sub
     
    '*********************************************
    'FERMER UNE SESSION
    Public Sub fermer_session(ByVal login As String)
     
       Dim myCommandUpdate As New OleDb.OleDbCommand
     
       'def de la requete UPDATE
       myCommandUpdate.CommandText = "UPDATE SESSION SET " &_
         "session_active = 0, " & "session_fin = '" & Now & "' " &_
         "WHERE session_id = " &_
     search.rechercher_id(login,"SESSION","session_id", "session_login")
       Try
     
                ' ouvrir la connexion
                maConnexion.ouvrir()
     
                'initialisation de la connexion
                myCommandUpdate.Connection = maConnexion.connexBD
     
                Debug.Print("----------------- " &_
     myCommandUpdate.CommandText.ToString)
     
                'exécution de la requete UPDATE
                'myCommandUpdate.ExecuteNonQuery()
     
                Try
                    myCommandUpdate.ExecuteNonQuery()
                Catch ex As Exception
                    MessageBox.Show("Requête: " &_
     myCommandUpdate.CommandText.ToString & Chr(13) _
    & ex.ToString)
                End Try
     
     
            Catch ex As Exception
                MessageBox.Show("Erreur fermeture session" & Chr(13) _
                & ex.ToString(), "Erreur session", _
                MessageBoxButtons.OK, MessageBoxIcon.Stop)
     
            Finally
                'fermeture connexion BD
                maConnexion.fermer()
            End Try
     
        End Sub
    EDIT 11h30 : j'ai le même problème avec une autre requète maintenant, elle s'exécute sans problème dans access mais pas depuis vb et elle ne contient pas de date.
    Pourrait-il s'agir d'un autre problème ???

  8. #8
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Dans ton code, je vois une erreur (deux fois). Tu inclus la fonction Now entre simples quotes qui est dès lors considérée comme un string et non une date. Ceci devrait générer une incompatibilité de type. Quand je te disais d'utiliser les # c'était sans savoir que tu utilisais la fonction now. Car dans ce cas, #Now# provoque une erreur de syntaxe.

    Retire les quotes, ça devrait sans doute passer.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    merci pour ton aide mais avec ou sans quote, j'ai exactement la même erreur pour les deux requètes
    Erreur de syntaxe ...
    et je n'ai pas d'incompatibilité de type, enfin pas de message me l'indiquant

    j'avoue que ça me dépasse complètement !

  10. #10
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par zzzmoi
    merci pour ton aide mais avec ou sans quote, j'ai exactement la même erreur pour les deux requètes

    et je n'ai pas d'incompatibilité de type, enfin pas de message me l'indiquant

    j'avoue que ça me dépasse complètement !

    Bon là, j'avoue ne pas connaître ton problème. Est-ce que ton programme compile au moins?

    Voudrais-tu poster le message exact que tu reçois.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Le message d'erreur est :
    Requête : INSERT INTO SESSION (session_login, session_deb) VALUES ('admin', '14/08/2006 08:00:12')
    System.Data.OleDb.OleDbException: Erreur de syntaxe dans l'instruction INSERT INTO.
    à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object&executeResult)
    à System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
    à System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
    à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
    à System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
    à mon_projet.authentification.creer_session(String login) dans C:\...authentif.vb:ligne 132
    et ma ligne 132 contient :
    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
     
    Try
      myCommandInsert.Connection = maConnexion.connexBD
      Try
          myCommandInsert.ExecuteNonQuery()   '*** LIGNE 132 ***
      Catch ex As Exception
          MessageBox.Show("Requête: " &_
     myCommandInsert.CommandText.ToString & Chr(13) & ex.ToString)
      End Try
    Catch ex As Exception
       MessageBox.Show("Erreur création session" & Chr(13) &_
         ex.ToString(), "Erreur session", _
         MessageBoxButtons.OK, MessageBoxIcon.Stop)
    Finally
       maConnexion.fermer()
    merci ...

  12. #12
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Le "syntax error" signifie qu'il y a vraiment une erreur de syntaxe dans ta requête (oublié une virgule, une parenthèse...), or d'après ce que tu me montres, ça ne semble pas être le cas.

    Essaye d'utiliser une requête paramètrée, ça éclaircira les choses et de toute manière, c'est "une best practise"

    Petit exemple détaillé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    OleDbCommand cmd = new OleDbCommand("INSERT INTO MyTable
    (MyDateColumn) VALUES(@MyDate)", conn);
    OleDbParameter p = new OleDbParameter();
    p.ParameterName = "@MyDate";
    p.OleDbType = OleDbType.Date;
    p.Value = System.DateTime.Now;
    cmd.Parameters.Add(p);
    cmd.ExecuteNonQuery();

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    je ne maîtrise absolument pas les requètes paramétrées, j'y comprend pas grand chose d'ailleurs (je débute en vb.net)
    j'ai tout de même essayé d'après l'exemple or il me dit que "cmd" n'est pas déclaré, je me demande vraiment si ça tourne rond car il l'est 2 lignes plus haut !
    je vais attendre le retour de mon tuteur (je suis en stage), il me dépatouillera de tout ça ...

    encore un grand merci pour ton aide, je rajouterai la solution si toutefois on en trouve une ... ça pourra peut être servir à d'autres ...

    bonne fin de journée !

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Voici la solution : SESSION est un mot réservé pour Access ...

  15. #15
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par zzzmoi
    Voici la solution : SESSION est un mot réservé pour Access ...
    Ah ben dites-donc, ça, effectivement, c'est un sale coup . J'y avais pas pensé à celle-là, j'étais convaincu que tu ne devais pas tout nous montrer....

    Evidemment, ça s'appelle pas de chance.

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

Discussions similaires

  1. [VB.Net] Pourquoi ai-je une Erreur SQL sur un update ?
    Par ndsaerith dans le forum Accès aux données
    Réponses: 3
    Dernier message: 03/08/2006, 11h32
  2. [VB.NET] Pourquoi ai-je une erreur avec GetResponse ?
    Par Arnaud_B dans le forum Services Web
    Réponses: 1
    Dernier message: 25/07/2006, 17h13
  3. Réponses: 7
    Dernier message: 29/06/2006, 08h54
  4. [VB.Net] Pourquoi ai-je une erreur à l'exécution d'une requête ?
    Par zooffy dans le forum Accès aux données
    Réponses: 3
    Dernier message: 25/06/2006, 10h35
  5. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 09h37

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