none
erreur de syntaxe INSERT INTO RRS feed

  • Question

  • slt tout le monde je suis en train de coder sous VB2008 j'ai un problème dans l'ajout dans la base access j'ai le code comme suit :

     cnxstro = "provider = microsoft.jet.oledb.4.0 ; data source = D:\Base.mdb;"

            cnn = New OleDbConnection
            cnn.ConnectionString = cnxstro
            cnn.Open()
            'Création de la requête sql
            sqlo = "select Fournisseur.* from Fournisseur"

            'Création de la commande et on l'instancie (sql) 
            cmdo = New OleDbCommand(sqlo)

            'Création du dataadapter (dta) et on l'instancie (cmd)
            dtao = New OleDbDataAdapter(cmdo)

            'On instancie la commande (cmd) à la connection (cnx) 
            cmdo.Connection() = cnn

            'On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)
            dtao.Fill(dtso, "Fournisseur")

            'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)                  
            dtto = dtso.Tables("Fournisseur")

    'crátion d'une nouvelle ligne avec les données des textbox 
            dtro = dtso.Tables("Fournisseur").NewRow
            dtro("Matriculefour") = Me.matfour.Text
            dtro("Numéro compte") = Me.compte.Text
            dtro("Intitulé") = Me.intitule.Text
            dtro("Qualité P") = Me.qualite.Text
            dtro("Adresse") = Me.adresse.Text
            dtro("Numéro série") = Me.serie.Text
            dtro("Numéro téléphone") = Me.tel.Text
            dtro("Fax") = Me.fax.Text
            dtro("E-mail") = Me.mail.Text
            dtro("Contact") = Me.contact.Text
            'ajout de la ligne dans le DataSet
            dtso.Tables("Fournisseur").Rows.Add(dtro)

            'création et exécution du commandbuilder pour mettre à jour le DataAdapter
            cmdbo = New OleDbCommandBuilder(dtao)

            'mise à jour des données du dataadapter(dta)à partir du commandbuilder (cmdb)
            dtao.Update(dtso, "Fournisseur")
            cnn.Close()
            'on vide le dataset pour le recréer avec  les nouvelles données 
            dtso.Clear()
            dtao.Fill(dtso, "Fournisseur")
            dtto = dtso.Tables("Fournisseur")

    mais une erreur m'apparut lors de l’exécution au niveau de : " dtao.Update(dtso, "Fournisseur")" (erreur de syntaxe dans l'instruction insert into) j'ai pas pu résoler le problème j'ai besoin d'aide s'il vous plaît :/


    • Modifié amounnn mercredi 2 mai 2012 13:17
    mercredi 2 mai 2012 13:11

Réponses

  • Au temps pour moi. Donc si je reproduis le souci et que regarde cmdbo.GetInsertCommand.Command (et non pas dtao.InsertCommand), je vois que les noms de colonnes ne sont pas encadrés entre crochets :

    "INSERT INTO Fournisseur (Matriculefour, Numéro compte, Intitulé, Qualité P, Adresse, Numéro série, Numéro téléphone, Fax, E-mail, Contact) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

    Ce qui est donc effectivement incorrect...

    Après recherche j'ai corrigé en en ajoutant :

     cmdbo.QuotePrefix = "["
     cmdbo.QuoteSuffix = "]"
    Pour que les noms des tables et colonnes soient bien encadrés entre crochets (cela fait longtemps que je n'utilise plus Access et je pensais que c'était fait automatiquement).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    lundi 7 mai 2012 17:05
    Modérateur

Toutes les réponses

  • Bonjour,

    Le plus simple serait sans doute d'examiner DataAdapter.InsertCommand pour voir quelle est la commande insert qui a été générée par le "builder". Mes deux soupçons principaux sont sur les blancs dans les champs et le - dans e-mail (bien que les noms des champs auraient du être encadré par des crochets ce qui devrait permettre de prendre en charge cela ou alors ce n'est le cas que si on a un espace et donc le - ne passe pas ?)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 2 mai 2012 13:56
    Modérateur
  • salut,

    j'ai essayé d'éliminer le -  mais rien ne change la même erreur ce répète et j'ai pas bien  compris la partie du commandbuilder mais ce que j'ai c'est:

     'création et exécution du commandbuilder pour mettre à jour le DataAdapter
            cmdbo = New OleDbCommandBuilder(dtao)

    j'ai tester cette code sur une autre interface et elle marche bien mais j'ai pas compris pourquoi pour celle-çi 

    mercredi 2 mai 2012 16:59
  • Donc quand l'erreur se produit on devrait pouvoir inspecter l'objet dtao.InsertCommand avec le debugger pour voir comment a été générée la commande permettant de faire l'insertion.

    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 3 mai 2012 08:54
    Modérateur
  • Merci je vais l'essayer :) 
    jeudi 3 mai 2012 18:28
  • Bonjour, Amounnn,

    Est-ce que vous avez pu avancer en utilisant les infos fournies par Patrice ? Merci de tenir la communauté informée sur la suite de vos démarches.

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 7 mai 2012 06:15
  • salut Ciprian 

    j'ai essayé de les utiliser mais malheureusement rien ne change et j'ai pas pu résolu  mon problème  si vous avez une idée merci de la partager :))))

    lundi 7 mai 2012 11:45
  • Au temps pour moi. Donc si je reproduis le souci et que regarde cmdbo.GetInsertCommand.Command (et non pas dtao.InsertCommand), je vois que les noms de colonnes ne sont pas encadrés entre crochets :

    "INSERT INTO Fournisseur (Matriculefour, Numéro compte, Intitulé, Qualité P, Adresse, Numéro série, Numéro téléphone, Fax, E-mail, Contact) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

    Ce qui est donc effectivement incorrect...

    Après recherche j'ai corrigé en en ajoutant :

     cmdbo.QuotePrefix = "["
     cmdbo.QuoteSuffix = "]"
    Pour que les noms des tables et colonnes soient bien encadrés entre crochets (cela fait longtemps que je n'utilise plus Access et je pensais que c'était fait automatiquement).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    lundi 7 mai 2012 17:05
    Modérateur
  • merciiiii bein patrice 

    mais avec le code que j'ai utiliser j'ai pas inclure le insert into mais j'ai utiliser le select from et ça que j'ai pas compris 

    et pour être clair cette code marche bien dans une autre application que j'ai :////

    lundi 7 mai 2012 21:44
  • Super! 

    Merci bien Patrice

     cmdbo.QuotePrefix = "["
     cmdbo.QuoteSuffix = "]"


    samedi 21 novembre 2015 12:58