Erreur de syntaxe étrange...

Résolu
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - 11 août 2017 à 14:53
 shaegal - 16 août 2017 à 14:44
Bonjour,

Je développe une application permettant de piloter une base de données Access 2010.
Jusqu'à maintenant, je n'ai jamais eu de soucis pour piloter mes BDD access, mais aujourd'hui, je me trouve devant une erreur de syntaxe que je ne comprends pas.

Voici un exemple de requête générée par l'application:
"insert into DOSSIERS (NUM, DATE_INCID, SINISTRE, LOCAL, DEGATS, DATE_ENV_DAJ, ID_TECH, CODE_UF, CLOS) values (2, #2/10/2014#, True, 'BARRIÈRE ENTRÉE', 'BARRIÈRE DÉTRUITE. À REMPLACER (CAMION FRIGORIFIQUE A HEURTÉ ET DÉTÉRIORÉ LA BARRIÈRE AUTOMATIQUE DE L''ENTRÉE.', #2/10/2014#, 4, '0454', False)"

La table contient une clé primaire auto-générée. Le NUM est un numéro complémentaire géré par l'application. Les dates sont au format américain. Les quotes (apostrophes) sont remplacées par des doubles-quotes.

Lors du test de l'application, un message d'erreur apparait me disant que l'instruction INSERT INTO contient une erreur de syntaxe et ne valide pas la ligne dans Access. Pourtant, lorsque je copie cette requête dans une requête SQL d'Access, celle-ci passe sans problème.

Quelqu'un aurait-il une idée?

Merci d'avance

--

5 réponses

vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023 165
Modifié le 11 août 2017 à 19:13
Bonjour
A tout hasard il ne manquerait pas un 0 devant le 2 du mois de février ( dates américaines : #MM/DD/YYYY#

M = Month (Mois)
D = Day (Jour)
Y= Year (Année)

#02/10/2014# et non #2/10/2014#

Sans certitude

Voir : http://codes-sources.commentcamarche.net/forum/affich-1507143-erreur-de-syntaxe-dans-l-instruction-insert-into

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
Bonjour et merci de cette rapide réponse,

Non, car en SQL, les dates (encadrées de #) ne tiennent pas compte des 0 superflus.
Mais j'avoue avoir déjà essayé ce cas de figure.

En attendant, merci d'avoir essayé... ;-)
0
vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023 165
13 août 2017 à 00:08
Bonsoir
Une piste peut-être : https://support.office.com/fr-fr/article/Mots-et-symboles-r%C3%A9serv%C3%A9s-d-Access-2007-e33eb3a9-8baa-4335-9f57-da237c63eabe

A lire surtout cette partie là qui dit :

Mots réservés du moteur de base de données Access
Le moteur de base de données Access s'exécute dans différents modes, selon qu'il est appelé d'Access, d'objets d'accès aux données, du fournisseur OLE Microsoft du moteur de base de données Access, ou du pilote ODBC Microsoft Access. Il peut aussi bien être exécuté en mode ANSI qu'en mode non-ANSI (traditionnel).
Les ensembles de mots réservés de ces deux modes sont légèrement différents, si bien qu'une requête utilisant un mot réservé peut très bien fonctionner dans un mode comme échouer dans l'autre.
0
Whismeril Messages postés 18399 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 mai 2023 623
13 août 2017 à 20:06
Bonjour,

Je ne suis pas spécialiste des bases de données.
Du coup, si j'étais confronté à ce soucis, je chercherais par dichotomie.
D'abord je testerai la requête
"insert into DOSSIERS (NUM) values (2)" 

Puis un champ de plus etc...

Mais d'un autre côté, mon instinct me dit que cela pourrait venir des parenthèses (celle commençant à Camion n'est pas refermée) ou de la double cote.
As tu essayé
"insert into DOSSIERS (NUM, DATE_INCID, SINISTRE, LOCAL, DEGATS, DATE_ENV_DAJ, ID_TECH, CODE_UF, CLOS) values (2, #2/10/2014#, True, 'BARRIÈRE ENTRÉE', 'BARRIÈRE DÉTRUITE. À REMPLACER CAMION FRIGORIFIQUE A HEURTÉ ET DÉTÉRIORÉ LA BARRIÈRE AUTOMATIQUE DE L ENTRÉE.', #2/10/2014#, 4, '0454', False)" 


0
vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023 165
13 août 2017 à 21:51
Salut Whismeril
Sous toutes réserves : la parenthèse qui commence à Camion fait partie de texte mis entre 2 apostrophes et ne joue donc aucun rôle au niveau syntaxe
Que l'on rajoute ou pas la parenthèse manquante n'y change rien au niveau code : c'est juste pour la visibilité de la phrase si l'on peut dire .
J'ai mis le morceau de phrase incriminée en italique


Voici un exemple de requête générée par l'application:
"insert into DOSSIERS (NUM, DATE_INCID, SINISTRE, LOCAL, DEGATS, DATE_ENV_DAJ, ID_TECH, CODE_UF, CLOS) values (2, #2/10/2014#, True, 'BARRIÈRE ENTRÉE', 'BARRIÈRE DÉTRUITE. À REMPLACER(CAMION FRIGORIFIQUE A HEURTÉ ET DÉTÉRIORÉ LA BARRIÈRE AUTOMATIQUE DE L''ENTRÉE) .', #2/10/2014#, 4, '0454', False)"
0
Whismeril Messages postés 18399 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 mai 2023 623
13 août 2017 à 23:31
Étant donné que les parenthèses sont des caractères clés dans cette requête, un couple non refermé est peut être le problème.
Cependant vu qu'après j'ai trouvé des posts sur le Net où il est conseillé de passer par des requêtes paramétrées, je pense que la solution sera plutôt là
0
shaegal > Whismeril Messages postés 18399 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 mai 2023
14 août 2017 à 08:47
Bonjour,

Pourtant, quand je colle la requête dans l'éditeur d'Access, tout se passe bien. C'est à partir de vb.net que ça ne passe pas.
Je n'ai jamais eu ce problème auparavant, d'où mon étonnement... :-/
0
vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023 165 > shaegal
14 août 2017 à 11:02
On en reviendrait au message 3
As-tu testé la méthode de Whismeril qui consiste à tester dans la requête les champs et leurs valeurs les uns après les autres ?
0
shaegal > vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023
Modifié le 14 août 2017 à 11:15
Bonjour vb95,

En fait, j'ai tenté ma chance avec les mots réservés que tu m'as donné en premier. J'ai donc encadré mes champs par des [ ] et tout passe correctement.

J'aimerai connaître le mot clé SQL réservé mais je penche pour LOCAL.
Je pense utiliser la méthode dichotomique suggérée par Whismeril pour le trouver.

Merci à toutes et tous pour votre aide.

PS. Je ne trouve pas la commande RÉSOLU... :-/
0
Whismeril Messages postés 18399 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 mai 2023 623
13 août 2017 à 20:14
sinon après quelques recherches, je vois que il est souvent conseillé d'utiliser une requête paramétrée plutot qu'une string.


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

Alors, pour ceux que ça intéresse, c'est bien le mot LOCAL qui est réservé en SQL Access... ;-)
0