Shaegal
Messages postés110Date d'inscriptionvendredi 1 février 2008StatutMembreDernière intervention12 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.
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.
Whismeril
Messages postés18399Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mai 2023623 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)"
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023165 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)"
Whismeril
Messages postés18399Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mai 2023623 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à
shaegal
>
Whismeril
Messages postés18399Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 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... :-/
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 mai 2023165
>
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 ?
shaegal
>
vb95
Messages postés3417Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention20 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.