requête SQL qui ne passe pas sous Acces mais sous Oracle et MSSQL - SQL/NoSQL - Programmation
Marsh Posté le 20-01-2004 à 09:00:54
j'ajoute que j'ai les droits d'écriture sur la BD et il n'y a aucune contrainte d'intégrité sur les champs mis à jour, si je tape une requête plus simple du genre :
"UPDATE INTERVENTION AS i SET i.DATEMAJIMPCPA = 01/01/2003, i.VERSIONIMPCPA = 1 WHERE i.NTCLEUNIK=1 And i.WRITELOCK Is Null" alors ça passe sans prob...
Marsh Posté le 20-01-2004 à 09:12:03
access c'est pas un sgbd c'est un gestionnaire de fiches ^^
Marsh Posté le 20-01-2004 à 10:57:10
merci pour vos réponses super constructives enfin à priori il s'agit bien d'une limitation d'accès...
Marsh Posté le 20-01-2004 à 18:27:47
Oui, Access est très très limité mais pour un usage bureautique monoposte, ça convient.
J'avais rencontré cette erreur sur un Access 97, et je me souviens que la mise en place d'une clé primaire sur la table à updater avait résolu le problème. Essaie d'en ajouter une.
Access a des problèmes sur les update et delete avec jointure.
Marsh Posté le 20-01-2004 à 08:53:51
J'écrit une application en delphi utilisant de nombreuses requêtes, et qui doit-être "compatible" avec les SGBD Oracle, MSSQL et Access. Pour le moment je m'étais toujours débrouillé pour faire des requêtes SQL qui passaient sur toutes les SGBD, mais dernièrement je bute sur l'une d'entre elles. J'ai déjà dû la rendre un peu plus compliqué qu'au départ à cause de la syntaxe d'oracle (étant parti de la SGBD MSSQL) mais sous Access pas moyen de trouver la syntaxe correcte.
Voici la requête incriminée :
"UPDATE INTERVENTION AS i SET i.DATEMAJIMPCPA = ( Select pr.DATEMAJ From PREOP pr Inner Join ( Select Max(pr2.PREOPCLEUNIK) As LASTPREOPCLEUNIK From PREOP pr2 Inner Join ( Select ii.NTCLEUNIK From INTERVENTION ii Where ii.NTCLEUNIK = 1 ) iii On pr2.NTCLEUNIK = iii.NTCLEUNIK Group by pr2.NTCLEUNIK ) sel On pr.PREOPCLEUNIK = sel.LASTPREOPCLEUNIK ), i.VERSIONIMPCPA = ( Select iii.VERSIONIMPCPA+1 From INTERVENTION iii Where iii.NTCLEUNIK = 1 ) WHERE i.NTCLEUNIK=1 And i.WRITELOCK Is Null"
elle n'est franchement pas très compliqué, j'ai l'impression que le "SET XXX = (Select...)" n'est pas supporté sous Access d'après kk essais que j'ai pû faire, il me semblait pourtant bien que c'était supporté ! le "(Select...)" ne retourne évidemment qu'un seul résultat.
Différentes précisions : il s'agit d'une BD Access 2000 (les autres c MSSQL2000 et Oracle 8/9). Le message d'erreur retourné est "l'opération doit utilisé une requête qui peut-être mise à jour"
Any ideas ? merci.