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 :

Problème d'insertion des données dans la base


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 143
    Points : 60
    Points
    60
    Par défaut Problème d'insertion des données dans la base
    Salut à toute la communauté et excusez moi beaucoup pour le dérangement.
    En fait je veux insérer des données dans une base access 2007 mais j'ai une erreur qui se produit:
    Erreur de Syntaxe dans l'instruction INSERT INTO.
    J'avoue que j'ai vu et revu cette instruction mais à vrai dire je ne remarque rien d'anormale.
    Voici le bout de code
    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
    Private Sub cmd_enregistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_enregistrer.Click
            ' Déclaration de la variable cmd
            ' OleDbCommand représentera ici une instruction SQL à exécuter par rapport à une source de données
            Dim cmd As OleDb.OleDbCommand
            ' Déclaration de sql_ajouter, qui contiendra la requête SQL permettant d'ajouter un enregistrement
            Dim sql_ajouter As String
            ' On écrit notre requête et on l'assigne à la variable sql_ajouter
            sql_ajouter = "INSERT INTO  Cotisation (ID_coti,mont_coti,dat_adhe,nom, prenom,dat_janv,dat_fev,dat_mars,dat_avr,dat_juin,dat_juill,dat_aout,dat_sept,dat_oct,dat_nov,dat_dec,avance,arrieres,total,somm_due,note) VALUES(Val_ID_coti, Val_mont_coti,Val_dat_adhe,Val_nom,Val_prenom,Val_dat_janv,Val_dat_fev,Val_dat_mars,Val_dat_avr,Val_dat_mai,Val_dat_juin,Val_dat_juill,Val_dat_aout,Val_dat_sept,Val_dat_oct,Val_dat_nov,Val_dat_dec,Val_avance,Val_arrieres,Val_total,Val_somm_due,Val_note) "
     
            ' Initialisation de la requête
            cmd = New OleDb.OleDbCommand(sql_ajouter, con)
     
            ' On définit les paramètres utilisés pour le bon déroulement de la requête
            ' On assigne à Val_pren" le texte contenu dans le prenom et ainsi de suite pour les autres
     
            cmd.Parameters.AddWithValue("Val_ID_coti", idtxt.Text)
            cmd.Parameters.AddWithValue("Val_mont_coti", montxt.Text)
            cmd.Parameters.AddWithValue("Val_dat_adhe", datadtxt.Text)
            ' On assigne à Val_Nomm" le texte contenu dans le nom
            cmd.Parameters.AddWithValue("Val_nom", nomtxt.Text)
            cmd.Parameters.AddWithValue("Val_prenom", prentxt.Text)
            cmd.Parameters.AddWithValue("Val_dat_janv", janv_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_fev", fev_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_mars", mars_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_avr", avr_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_mai", mai_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_juin", juin_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_juill", juill_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_aout", aout_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_sept", sept_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_oct", oct_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_nov", nov_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_dec", dec_txt.Text)
            cmd.Parameters.AddWithValue("Val_avance", avnctxt.Text)
            cmd.Parameters.AddWithValue("Val_arrieres", arrietxt.Text)
            cmd.Parameters.AddWithValue("Val_total", totaltxt.Text)
            cmd.Parameters.AddWithValue("Val_somm_due", sommdutxt.Text)
            cmd.Parameters.AddWithValue("Val_note", notxt.Text)
            'Ouverture de la connection
            cmd.Connection.Open()
     
            ' Exécution de la requête SQL
     
            cmd.ExecuteReader()
            ' Fermeture de la connexion
            cmd.Connection.Close()
     
     
     
     
            ' Message indiquant que le nouveau membre a bien été enregistré
            MsgBox("La Cotisation a bien été enregistrée.", MsgBoxStyle.Information)
     
            ' On vide le dataset
            ds.Clear()
     
            ' et on le réaffiche en faisant appel à Connexion()
            ' pour que notre nouveau contact apparaisse bien
            Connexion()
     
            ' Si la table contient 1 seul enregistrement après avoir cliqué sur le bouton ajouter
            ' il faut activer tous les boutons
            If Max_Enregistrements = 1 Then
                cmd_modifier.Enabled = True
                cmd_suivant.Enabled = True
                cmd_precedent.Enabled = True
                cmd_premier.Enabled = True
                cmd_dernier.Enabled = True
                cmd_supprimer.Enabled = True
     
            End If
        End Sub
    Il faut dire aussi que ID_coti est une clé étrangère dans une autre table et ici dans la table cotisation,il est de type NuméroAuto.
    Et je ne sais pas pourquoi il ne fonctionne pas car j'ai utilisé ce même code pour insérer des données dans les autres tables de ma base sans problème.

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    Bonjour,

    en regardant rapidement, j'ai trouvé ceci

    INSERT INTO "table_name" ("column1", "column2", ...)
    VALUES ("value1", "value2", ...)
    Ma question est :
    Ne manquerait-il pas les VALUES a ta requete?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    (je vois bien un values dans sa requete)

    un des problèmes d'access, c'est que sur les messages d'erreur il est plutot avare de renseignements, une vraie base de données t'aurais indiqué clairement le problème

    tu peux essayer de faire passer ta requête telle quelle dans access, il devrait te demander les valeurs des paramètres
    si ca ne passe pas ca vient de la requête
    si ca passe ca vient des parameters je pense, auquel cas essaye de les typers (.Add à la place .addwithvalue)

    sinon ExecuteReader est en théorie fait pour les select, pour les insert ExecuteNonQuery suffit (mais ce n'est pas ca qui fait que ca plante)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    (je vois bien un values dans sa requete)


    si ca passe ca vient des parameters je pense, auquel cas essaye de les typers (.Add à la place .addwithvalue)

    sinon ExecuteReader est en théorie fait pour les select, pour les insert
    Merci pour les réponses.
    Pour la suggestion de genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters.Add("Val_ID_coti", OleDb.OleDbType.Integer).Value = idtxt
    Merci

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour,

    essayez en mettant des espaces entre chaque paramètre. L'erreur ne provient peut-être pas de là mais ca vaut le coup d'essayer car j'ai déjà eu souvent le problème qu'une requête passant dans mon logicielle d’édition de requête fonctionnait mais la même requête dans le code ne fonctionnait pas car il ne fallait pas coller les virgules au chaîne... J'avais mi 1/2 heures à comprendre d'où venait l'erreur...

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql_ajouter = "INSERT INTO  Cotisation "
    sql_ajouter &=  " (ID_coti , mont_coti , dat_adhe , nom , prenom , dat_janv , dat_fev , dat_mars , dat_avr , dat_juin , dat_juill , dat_aout , dat_sept , dat_oct , dat_nov , dat_dec , avance , arrieres , total , somm_due , note ) "
    sql_ajouter &=  " VALUES( Val_ID_coti , Val_mont_coti , Val_dat_adhe , Val_nom , Val_prenom , Val_dat_janv , Val_dat_fev , Val_dat_mars , Val_dat_avr , Val_dat_mai , Val_dat_juin , Val_dat_juill , Val_dat_aout , Val_dat_sept , Val_dat_oct , Val_dat_nov , Val_dat_dec , Val_avance , Val_arrieres , Val_total , Val_somm_due , Val_note ) "
    Et en mettant en forme le code j'ai remarqué qu'il y avait 21 noms de colonne pour 22 valeurs

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Salut et merci pour les remarques car vous aviez raison.
    Mais après correction,c'est toujours la même chose:
    Erreur dans l'instruction INSERT INTO.
    Je ne sais plus quoi faire.

    Voici le code après correction
    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
     sql_ajouter = "INSERT INTO  Cotisation "
            sql_ajouter &= " (ID_coti , mont_coti , dat_adhe , nom , prenom , dat_janv , dat_fev , dat_mars , dat_avr , dat_mai,  dat_juin , dat_juill , dat_aout , dat_sept , dat_oct , dat_nov , dat_dec , avance , arrieres , total , somm_due , note ) "
            sql_ajouter &= " VALUES( Val_ID_coti , Val_mont_coti , Val_dat_adhe , Val_nom , Val_prenom , Val_dat_janv , Val_dat_fev , Val_dat_mars , Val_dat_avr , Val_dat_mai , Val_dat_juin , Val_dat_juill , Val_dat_aout , Val_dat_sept , Val_dat_oct , Val_dat_nov , Val_dat_dec , Val_avance , Val_arrieres , Val_total , Val_somm_due , Val_note ) "
     
            ' Initialisation de la requête
            cmd = New OleDb.OleDbCommand(sql_ajouter, con)
     
            ' On définit les paramètres utilisés pour le bon déroulement de la requête
            ' On assigne à Val_pren" le texte contenu dans le prenom et ainsi de suite pour les autres
     
            cmd.Parameters.AddWithValue("Val_ID_coti", idtxt.Text)
            cmd.Parameters.AddWithValue("Val_mont_coti", montxt.Text)
            cmd.Parameters.AddWithValue("Val_dat_adhe", datadtxt.Text)
            ' On assigne à Val_Nomm" le texte contenu dans le nom
            cmd.Parameters.AddWithValue("Val_nom", nomtxt.Text)
            cmd.Parameters.AddWithValue("Val_prenom", prentxt.Text)
            cmd.Parameters.AddWithValue("Val_dat_janv", janv_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_fev", fev_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_mars", mars_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_avr", avr_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_mai", mai_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_juin", juin_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_juill", juill_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_aout", aout_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_sept", sept_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_oct", oct_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_nov", nov_txt.Text)
            cmd.Parameters.AddWithValue("Val_dat_dec", dec_txt.Text)
            cmd.Parameters.AddWithValue("Val_avance", avnctxt.Text)
            cmd.Parameters.AddWithValue("Val_arrieres", arrietxt.Text)
            cmd.Parameters.AddWithValue("Val_total", totaltxt.Text)
            cmd.Parameters.AddWithValue("Val_somm_due", sommdutxt.Text)
            cmd.Parameters.AddWithValue("Val_note", notxt.Text)
            'Ouverture de la connection
            cmd.Connection.Open()
     
            ' Exécution de la requête SQL
     
            cmd.ExecuteNonQuery()
            ' Fermeture de la connexion
            cmd.Connection.Close()

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Essayez de remplacer le nom des paramètres après VALUES par des points d'interogation car OleDb c'est des ? qu'il faut mettre pour chaque paramètre, voir MSDN :
    The OLE DB.NET Framework Data Provider uses positional parameters that are marked with a question mark (?) instead of named parameters.

Discussions similaires

  1. Problème d'insertion des données dans ma base de données
    Par daniel1985 dans le forum Général Python
    Réponses: 1
    Dernier message: 18/12/2012, 17h52
  2. [MySQL] Problème d'insertion des accents dans une base de donnée MYSQL
    Par maroon1970 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/08/2011, 18h35
  3. Réponses: 1
    Dernier message: 16/06/2010, 19h14
  4. nouveau problême d'insertion des données dans la base de données
    Par tchimou dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/03/2007, 15h32
  5. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 12h17

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