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 :

VB.Net et Access - Erreur de syntaxe dans l'instruction INSERT INTO


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 7
    Points
    7
    Par défaut VB.Net et Access - Erreur de syntaxe dans l'instruction INSERT INTO
    Bonjour à tous,

    Je bute depuis pas mal de temps sur une erreur à l'enregistrement dans une base de donnée Access quand il faut ajouter un nouvel enregistrement. Une erreur "Erreur de syntaxe dans l'instruction INSERT INTO"se produit sans autre précision. J'ai vérifié le nom des différents champs qui ne sont pas des noms réservés Access, J'ai vérifié la contenu de chaque champ dans le nouvel enregistrement qui respecte bien les critères de valeur non nulle et positive. Il doit y avoir un paramètre caché qui m'échappe. Voici ci-dessous la programmation. L'erreur se produit sur l'instruction AdaptateurChantier.Update
    La structure du fichier Access est indiquée ci-dessous avec des liaisons de type Intégrité référentielle; Mise à jour en cascade; Effacement en cascade des entegistrements

    Pouvez vous me donner quelques pistes de 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
                Requete = "SELECT refChantier, refForage, refEssai, refSonde, refEssaiResistancePropre, refEssaiExpansionPropre, refEssaiPerteDeCharge, refSol, Enregistreur, Operateur, VolSonde, Precision, PrecisVolSonde, nomEssai, dateEssai, heureEssai, difPresEauAir, hauteurCpv, " _
                   & "presP0, presFluage, presLimite, presLimiteNf, poidsVol, poidsVolDejauge, coefPoisson, modPressio, modPressioNf, modElastique, modElastiqueNf, cohesion, frottement, frottementintergranulaire, " _
                   & "U0, profNappe, profSonde, coteZeroGeomeca FROM LesEssaisForage"
     
            'definition de la commande
            Commande = New OleDbCommand(Requete, ConnChantier)
     
            ' Définition de l'AdaptateurChantier
            AdaptateurChantier = New OleDbDataAdapter(Commande)
     
            AdaptateurChantier.SelectCommand = Commande
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(AdaptateurChantier)
     
             AdaptateurChantier.AcceptChangesDuringUpdate = True
     
             AdaptateurChantier.Update(MonChantier, "LesEssaisForage")
            MsgBox("Update -LesEssaisForage- successful")
    Nom : Structure Base Donee.jpg
Affichages : 672
Taille : 92,9 Ko

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,
    Il me semble voir une bizarrerie dans ton code :
    Tu veux faire un UPDATE mais tu as écrit une requête SELECT ...
    Est-ce normal ?
    🤔

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour Phil,

    Je ne comprends pas bien ta réponse;
    Je pense que tu fais référence à l'instruction : AdaptateurChantier.SelectCommand = Commande .
    mais d'après ce que j'ai compris le SelectCommand est là pour "définir l'instruction SQL stockée..."

    L'erreur se produit sur l'instruction : AdaptateurChantier.Update(MonChantier, "LesEssaisForage") .

    quand je veux créer un nouvel enregistrement avec la méthode UPDATE; quand l'enregistrement existe et qu'il faut le modifier tout va bien; c'est le fait d'ajouter de l'information qui bloque quelque part...

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Sans doute ne suis-je pas très habitués à ces outils, notamment à ... OleDbCommandBuilder ... que je n'ai jamais utilisé ...

    Mais tout de même, je cherche dans ton code et le seul SQL en rapport avec ton AdaptateurChantier est une requête de sélection et non de mise à jour. Mais s'il doit en être ainsi, c'est qu'il s'agit de manière de faire que je ne connais pas.

    Tout de même encore, dans ton dernier message, tu déclares "...je veux créer un nouvel enregistrement avec la methode UPDATE; quand l'enregistrement existe et qu'il faut le modifier tout va bien...". Là aussi il s'agit d'une nouveauté pour moi : j'ai toujours pensé que UPDATE servait à modifier des enregistrements existants et que pour créer un nouvel enregistrement il fallait utiliser INSERT.

    Je suis intéressé de connaître tes corrections quand cela fonctionnera, j'aurai beaucoup à apprendre.

    Bon travail,


  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
    Bonsoir,

    L'objet OleDbCommandBuilder permet effectivement de construire automatiquement les commandes INSERT, UPDATE et DELETE à partir de la commande SELECT.

    Pouvez-vous regarder les commandes générées avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    debug.WriteLine(ObjetCommandBuilder.GetUpdateCommand.CommandText)
    debug.WriteLine(ObjetCommandBuilder.GetInsertCommand.CommandText)
    debug.WriteLine(ObjetCommandBuilder.GetDeleteCommand.CommandText)
    A mettre avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdaptateurChantier.Update(MonChantier, "LesEssaisForage")
    ?

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Comme je l'indiquais dans mon dernier message, je ne connais pas CommandBuilder.
    Comme je le supposais bien, j'avais à apprendre dans ce sujet. Voila qui est fait.
    Merci pour l'info Sankasssss.

    Nul doute que ça aidera JMonnet46.

    Bonne soirée à vous deux,


  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci à Sankasss pour ces éléments;

    Les Debug.WriteLine ne produisent pas de message sur l'écran; par contre en mode Espion on a une réponse :

    ObjetCommandBuilder.GetUpdateCommand.CommandText, a pour valeur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE LesEssaisForage SET refChantier = ?, refForage = ?, refEssai = ?, refSonde = ?, refEssaiResistancePropre = ?, refEssaiExpansionPropre = ?, refEssaiPerteDeCharge = ?, refSol = ?, Enregistreur = ?, Operateur = ?, VolSonde = ?, Precision = ?, PrecisVolSonde = ?, nomEssai = ?, dateEssai = ?, heureEssai = ?, difPresEauAir = ?, hauteurCpv = ?, presP0 = ?, presFluage = ?, presLimite = ?, presLimiteNf = ?, poidsVol = ?, poidsVolDejauge = ?, coefPoisson = ?, modPressio = ?, modPressioNf = ?, modElastique = ?, modElastiqueNf = ?, cohesion = ?, frottement = ?, frottementintergranulaire = ?, U0 = ?, profNappe = ?, profSonde = ?, coteZeroGeomeca = ? WHERE (((? = 1 AND refChantier IS NULL) OR (refChantier = ?)) AND ((? = 1 AND refForage IS NULL) OR (refForage = ?)) AND (refEssai = ?) AND ((? = 1 AND refSonde IS NULL) OR (refSonde = ?)) AND ((? = 1 AND refEssaiResistancePropre IS NULL) OR (refEssaiResistancePropre = ?)) AND ((? = 1 AND refEssaiExpansionPropre IS NULL) OR (refEssaiExpansionPropre = ?)) AND ((? = 1 AND refEssaiPerteDeCharge IS NULL) OR (refEssaiPerteDeCharge = ?)) AND ((? = 1 AND refSol IS NULL) OR (refSol = ?)) AND ((? = 1 AND Enregistreur IS NULL) OR (Enregistreur = ?)) AND ((? = 1 AND Operateur IS NULL) OR (Operateur = ?)) AND ((? = 1 AND VolSonde IS NULL) OR (VolSonde = ?)) AND ((? = 1 AND Precision IS NULL) OR (Precision = ?)) AND ((? = 1 AND PrecisVolSonde IS NULL) OR (PrecisVolSonde = ?)) AND ((? = 1 AND nomEssai IS NULL) OR (nomEssai = ?)) AND ((? = 1 AND dateEssai IS NULL) OR (dateEssai = ?)) AND ((? = 1 AND heureEssai IS NULL) OR (heureEssai = ?)) AND ((? = 1 AND difPresEauAir IS NULL) OR (difPresEauAir = ?)) AND ((? = 1 AND hauteurCpv IS NULL) OR (hauteurCpv = ?)) AND ((? = 1 AND presP0 IS NULL) OR (presP0 = ?)) AND ((? = 1 AND presFluage IS NULL) OR (presFluage = ?)) AND ((? = 1 AND presLimite IS NULL) OR (presLimite = ?)) AND ((? = 1 AND presLimiteNf IS NULL) OR (presLimiteNf = ?)) AND ((? = 1 AND poidsVol IS NULL) OR (poidsVol = ?)) AND ((? = 1 AND poidsVolDejauge IS NULL) OR (poidsVolDejauge = ?)) AND ((? = 1 AND coefPoisson IS NULL) OR (coefPoisson = ?)) AND ((? = 1 AND modPressio IS NULL) OR (modPressio = ?)) AND ((? = 1 AND modPressioNf IS NULL) OR (modPressioNf = ?)) AND ((? = 1 AND modElastique IS NULL) OR (modElastique = ?)) AND ((? = 1 AND modElastiqueNf IS NULL) OR (modElastiqueNf = ?)) AND ((? = 1 AND cohesion IS NULL) OR (cohesion = ?)) AND ((? = 1 AND frottement IS NULL) OR (frottement = ?)) AND ((? = 1 AND frottementintergranulaire IS NULL) OR (frottementintergranulaire = ?)) AND ((? = 1 AND U0 IS NULL) OR (U0 = ?)) AND ((? = 1 AND profNappe IS NULL) OR (profNappe = ?)) AND ((? = 1 AND profSonde IS NULL) OR (profSonde = ?)) AND ((? = 1 AND coteZeroGeomeca IS NULL) OR (coteZeroGeomeca = ?)))

    ObjetCommandBuilder.GetInsertCommand.CommandText) a pour valeur :
    Fin d'expression attendue.
    ObjetCommandBuilder.GetDeleteCommand.CommandText a pour valeur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM LesEssaisForage WHERE (((? = 1 AND refChantier IS NULL) OR (refChantier = ?)) AND ((? = 1 AND refForage IS NULL) OR (refForage = ?)) AND (refEssai = ?) AND ((? = 1 AND refSonde IS NULL) OR (refSonde = ?)) AND ((? = 1 AND refEssaiResistancePropre IS NULL) OR (refEssaiResistancePropre = ?)) AND ((? = 1 AND refEssaiExpansionPropre IS NULL) OR (refEssaiExpansionPropre = ?)) AND ((? = 1 AND refEssaiPerteDeCharge IS NULL) OR (refEssaiPerteDeCharge = ?)) AND ((? = 1 AND refSol IS NULL) OR (refSol = ?)) AND ((? = 1 AND Enregistreur IS NULL) OR (Enregistreur = ?)) AND ((? = 1 AND Operateur IS NULL) OR (Operateur = ?)) AND ((? = 1 AND VolSonde IS NULL) OR (VolSonde = ?)) AND ((? = 1 AND Precision IS NULL) OR (Precision = ?)) AND ((? = 1 AND PrecisVolSonde IS NULL) OR (PrecisVolSonde = ?)) AND ((? = 1 AND nomEssai IS NULL) OR (nomEssai = ?)) AND ((? = 1 AND dateEssai IS NULL) OR (dateEssai = ?)) AND ((? = 1 AND heureEssai IS NULL) OR (heureEssai = ?)) AND ((? = 1 AND difPresEauAir IS NULL) OR (difPresEauAir = ?)) AND ((? = 1 AND hauteurCpv IS NULL) OR (hauteurCpv = ?)) AND ((? = 1 AND presP0 IS NULL) OR (presP0 = ?)) AND ((? = 1 AND presFluage IS NULL) OR (presFluage = ?)) AND ((? = 1 AND presLimite IS NULL) OR (presLimite = ?)) AND ((? = 1 AND presLimiteNf IS NULL) OR (presLimiteNf = ?)) AND ((? = 1 AND poidsVol IS NULL) OR (poidsVol = ?)) AND ((? = 1 AND poidsVolDejauge IS NULL) OR (poidsVolDejauge = ?)) AND ((? = 1 AND coefPoisson IS NULL) OR (coefPoisson = ?)) AND ((? = 1 AND modPressio IS NULL) OR (modPressio = ?)) AND ((? = 1 AND modPressioNf IS NULL) OR (modPressioNf = ?)) AND ((? = 1 AND modElastique IS NULL) OR (modElastique = ?)) AND ((? = 1 AND modElastiqueNf IS NULL) OR (modElastiqueNf = ?)) AND ((? = 1 AND cohesion IS NULL) OR (cohesion = ?)) AND ((? = 1 AND frottement IS NULL) OR (frottement = ?)) AND ((? = 1 AND frottementintergranulaire IS NULL) OR (frottementintergranulaire = ?)) AND ((? = 1 AND U0 IS NULL) OR (U0 = ?)) AND ((? = 1 AND profNappe IS NULL) OR (profNappe = ?)) AND ((? = 1 AND profSonde IS NULL) OR (profSonde = ?)) AND ((? = 1 AND coteZeroGeomeca IS NULL) OR (coteZeroGeomeca = ?)))


    Et ca plante avec la même erreur en mode ajout d'un nouvel enregistrement "Erreur de syntaxe dans l'instruction INSERT INTO"
    C'est vrai que c'est inextricable; je vais supprimer les variables qui ne posent pas de problème et refaire le test avec seulement les 5 variables qui interviennent dans le Beug...

    A suivre....

    Avec seulement 7 variables cela donne la même erreur et le contenu des différents Objets sont les suivants :

    ObjetCommandBuilder.GetUpdateCommand.CommandText, a pour valeur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE LesEssaisForage SET refChantier = ?, refForage = ?, refEssai = ?, refSonde = ?, Enregistreur = ?, Operateur = ?, Precision = ? WHERE (((? = 1 AND refChantier IS NULL) OR (refChantier = ?)) AND ((? = 1 AND refForage IS NULL) OR (refForage = ?)) AND (refEssai = ?) AND ((? = 1 AND refSonde IS NULL) OR (refSonde = ?)) AND ((? = 1 AND Enregistreur IS NULL) OR (Enregistreur = ?)) AND ((? = 1 AND Operateur IS NULL) OR (Operateur = ?)) AND ((? = 1 AND Precision IS NULL) OR (Precision = ?)))

    ObjetCommandBuilder.GetInsertCommand.CommandText) a pour valeur :
    Fin d'expression attendue.
    ObjetCommandBuilder.GetDeleteCommand.CommandText a pour valeur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM LesEssaisForage WHERE (((? = 1 AND refChantier IS NULL) OR (refChantier = ?)) AND ((? = 1 AND refForage IS NULL) OR (refForage = ?)) AND (refEssai = ?) AND ((? = 1 AND refSonde IS NULL) OR (refSonde = ?)) AND ((? = 1 AND Enregistreur IS NULL) OR (Enregistreur = ?)) AND ((? = 1 AND Operateur IS NULL) OR (Operateur = ?)) AND ((? = 1 AND Precision IS NULL) OR (Precision = ?)))

    Je vais réduire encore de moitié....

    C'est la variable Precision qui fait planter l'enregistrement....; si je la supprime alors l'enregistrement fonctionne....Je ne comprends pas pourquoi!!!!!!!!!!!!!
    Il n'est aussi pas très normal que ObjetCommandBuilder.GetInsertCommand.CommandText) ait pour valeur : "Fin d'expression attendue". Il y a pparemment un problème de génération de code Pour INSERT!!!

  8. #8
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonsoir,
    ((? = 1 AND Operateur IS NULL) OR (Operateur = ?))
    le point d'interrogation matérialise la valeur d'un champ comme pour Operateur!

    ? = 1 ne représente aucun champ!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql="PARAMETERS [toto] integer;
    select * from MyTable
    Where (([TOTO] = 1 AND Operateur IS NULL) OR (Operateur = ?)) "


    PARAMETERS se substitue à ?


  9. #9
    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
    @JMonnet46 :
    La méthode debug.WriteLine("mon message") affiche quelque chose dans la fenêtre "Immediate Window" que quand on compile en mode Debug sinon l'instruction est ignorée.

    Au vu des requêtes générées ont dirait que le framework n'arrive pas à identifier les clés primaires alors qu'on dirait, via le schéma, qu'elles existent bien sur les tables.
    Si c'est bien ça le problème, il faudrait essayer de les définir manuellement avant de générer les commandes via ObjetCommandBuilder = New OleDbCommandBuilder(AdaptateurChantier). De cette manière le générateur pourra faire de meilleurs requêtes.

    Pouvez-vous nous dire quelle est la base de donnée utilisée?

    Citation Envoyé par Thumb down Voir le message
    ? = 1 ne représente aucun champ!
    Non ça ne représente aucun champ, juste une condition booléenne d'activation pour activer ou désactiver le test d'après :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (1 = 1 AND Operateur IS NULL) -- activé car 1=1 = True
    (0 = 1 AND Operateur IS NULL) -- désactivé car 0=1 = False
    C'est une manière de rendre la requête dynamique sans devoir la redéfinir pour chaque ligne du dataTable.

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    On ne peut pas écrire ?=1 car ? ne représente aucun champ alors qu'il est possible d'écrire [toto]=1

    Et de gérer toto dans les définition de parameters.

    C'est comme la fonction declare en salle serveur!

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour Sankassss:
    Citation Envoyé par Sankasssss Voir le message
    @JMonnet46
    .....
    Pouvez-vous nous dire quelle est la base de donnée utilisée?
    C'est un fichier Access 2007, mais peut être que cette version est obsolète???? mais je vais essayer d'abord de définir manuellement les clefs primaires comme proposé...

    En ajoutant les instructions suivantes qui définissent le clef Primaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            ' Définition de la clef primaire de la Table "LesEssaisForage"
            columns(0) = New DataColumn
            columns(0) = MonChantier.Tables("LesEssaisForage").Columns("refEssai")
            MonChantier.Tables("LesEssaisForage").PrimaryKey = columns
     
            AdaptateurChantier.Update(MonChantier, "LesEssaisForage")
            MsgBox("Update -LesEssaisForage- successful")
    L'erreur de syntaxe se produit quand même; cependant l'évaluation de l'expression :
    MonChantier.Tables("LesEssaisForage").PrimaryKey contient un tableau de 1 ligne "System.Data.DataColumn[]" qui contient les valeurs suivantes :

    On voit bien dans le champ "EncodedColumnName" la valeur "refEssai" qui définit correctement la clef primaire.... Il me semble que le problème ne se situe pas à ce niveau....

    Nom : Valeur Clef Primaire.jpg
Affichages : 590
Taille : 399,5 Ko

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 7
    Points
    7
    Par défaut La solution provisoire
    Pour traiter le problème efficacement et comme l'ajout d'enregistrement fonctionne avec 4 champs, j'ai réécrit le code de la façon suivante, la variable EssaiInitCount compte le nombre d'enregistrement initial du Fichier et EssaiCount compte le nombre d'enregistrement dans la Table du DataSet; si le second est plus grand que le premier, il faut ajouter des enregistrements, ce qui est fait avec succès en utilisant seulement 4 champs; ensuite ce nouvel enregistrement étant créé, le programme met à jour la Table du Fichier Access.
    Ce n'est pas très élégant mais ça marche, donc Youpie!!!!!
    Merci en tout cas à tous pour la discussion ça m'a permis d'avance sur un problème sur lequel j'étais bloqué depuis presque 1 mois.
    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
            EssaiCount = MonChantier.Tables("LesEssaisForage").Rows.Count
            If EssaiInitCount < EssaiCount Then
                ' On ajoute un enregistrement à la Table avec des variables réduites
                Requete = "SELECT refChantier, refForage, refEssai, nomEssai FROM LesEssaisForage"
     
                'definition de la commande
                Commande = New OleDbCommand(Requete, ConnChantier)
     
                ' Définition de l'AdaptateurChantier
                AdaptateurChantier = New OleDbDataAdapter(Commande)
     
                AdaptateurChantier.SelectCommand = Commande
     
                'Pour modifier les valeurs changées dans le DataAdapter
                ObjetCommandBuilder = New OleDbCommandBuilder(AdaptateurChantier)
     
                ' Ajout des lignes à la Table "LesEssaisForage"
                AdaptateurChantier.Update(MonChantier, "LesEssaisForage")
                MsgBox("Update -LesEssaisForage- successful")
            End If
     
            ' Mise à jour de la Table "LesEssaisForage"
            ''ma requete
            'If Not (AncienChantier) Then
     
            Requete = "SELECT refChantier, refForage, refEssai, refSonde, refEssaiResistancePropre, refEssaiExpansionPropre, refEssaiPerteDeCharge, refSol, Enregistreur, Operateur, VolSonde, Precision, PrecisVolSonde, nomEssai, dateEssai, heureEssai, difPresEauAir, hauteurCpv, " _
               & "presP0, presFluage, presLimite, presLimiteNf, poidsVol, poidsVolDejauge, coefPoisson, modPressio, modPressioNf, modElastique, modElastiqueNf, cohesion, frottement, frottementintergranulaire, " _
               & "U0, profNappe, profSonde, coteZeroGeomeca FROM LesEssaisForage"
     
            'definition de la commande
            Commande = New OleDbCommand(Requete, ConnChantier)
     
            ' Définition de l'AdaptateurChantier
            AdaptateurChantier = New OleDbDataAdapter(Commande)
     
            AdaptateurChantier.SelectCommand = Commande
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(AdaptateurChantier)
     
            AdaptateurChantier.Update(MonChantier, "LesEssaisForage")
            MsgBox("Update -LesEssaisForage- successful")

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Solution finale de l'Erreur de Syntaxe
    Bonjour à tous,

    Le solution précédente de n'enregistrer que quelques champs quand on ajoute un enregistrement n'est que partielle;
    La solution du problème rencontré est lié au fait qu'un des champs de l'enregistrement a pour nom "Precision" , qui n'est a priori pas un mot réservé pour Access (voir https://support.office.com/fr-fr/art...f855bdd9c5a2); cependant son utilisation provoque l'erreur de Syntaxe.
    Maintenant, si on change de nom de champ en prenant par exemple "ClassPrecis" alors tout se passe bien et les fichiers Access sont mis à jour. Le code devient :
    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
    Requete = "SELECT refChantier, refForage, refEssai, refSonde, refEssaiResistancePropre, refEssaiExpansionPropre, refEssaiPerteDeCharge, refSol, Enregistreur, Operateur, VolSonde, ClassPrecis, PrecisVolSonde, nomEssai, dateEssai, heureEssai, difPresEauAir, hauteurCpv, " _
               & "presP0, presFluage, presLimite, presLimiteNf, poidsVol, poidsVolDejauge, coefPoisson, modPressio, modPressioNf, modElastique, modElastiqueNf, cohesion, frottement, frottementintergranulaire, " _
               & "U0, profNappe, profSonde, coteZeroGeomeca FROM LesEssaisForage"
     
            'definition de la commande
            Commande = New OleDbCommand(Requete, ConnChantier)
     
            ' Définition de l'AdaptateurChantier
            AdaptateurChantier = New OleDbDataAdapter(Commande)
     
            AdaptateurChantier.SelectCommand = Commande
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(AdaptateurChantier)
     
            AdaptateurChantier.Update(MonChantier, "LesEssaisForage")
            MsgBox("Update -LesEssaisForage- successful")

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/04/2014, 10h26
  2. [AC-2007] Erreur de syntaxe dans l'instruction INSERT INTO
    Par DébutantAccess dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/02/2013, 18h45
  3. OleDbException -{"Erreur de syntaxe dans l'instruction INSERT INTO."}
    Par daniel.moreda dans le forum Framework .NET
    Réponses: 1
    Dernier message: 27/09/2011, 16h38
  4. Erreur de syntaxe dans l'instruction INSERT INTO
    Par doolar dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2008, 15h37
  5. Erreur de syntaxe dans l'instruction INSERT INTO
    Par logiciel_const dans le forum Bases de données
    Réponses: 8
    Dernier message: 19/03/2008, 10h57

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