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.
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)"
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)"
É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à
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... :-/
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 ?
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.
Donc le problème serait résolu alors ?
connecte toi avec ton compte et mets le sujet en résolu si c'est le cas !
Si tu ne peux pas je peux le faire pour toi si tu m'autorises !
Bonjour, il n'est pas nécessaire d'être connecté, ni même inscrit, pour poster.
Cependant le site ne propose le lien "Marquer comme résolu" qu'au créateur de la discussion, quand tu es membres, ça marche toujours, quand tu ne l'es pas il faut que tu sois "reconnu", par cookie entre autre.
Il suffit d'effacer le cache, de changer de navigateur, de pc (ou de téléphone) et ça ne marche pas.