Requêtes imbriquées dans une base Access avec ADO.NET

chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014 - 12 août 2005 à 20:52
chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014 - 16 août 2005 à 14:01
Bonjour

lorsque j'essaie de mettre à jour un enregistrement dans une base access 2000, je récupère l'erreur HY000 : "L'opération doit utiliser une requête qui peut être mise à jour."

j'ai trouvé plein d'articles qui parlent de problèmes de droits d'accès, d'ASP.NET etc...

je ne suis pas dans ce cas : ma base n'a ausune sécurité, aucun mot de passe, le fichier mdb et le répertoire où il se trouve sont accessibles en écriture.

ca n'a rien à voir avec ASP.NET non plus : j'utilise VB.NET avec ADO

j'ai déclaré un DSN sur ma machine, et je procède de la manière suivante :

Dim mycon as OdbcConnection
Dim odbc_cmd as OdbcCommand
mycon.ConnectionString="DSN=mondsn"

mycon.open()

ensuite je fais une transaction avec un BeginTransaction(), puis je positionne :

odbc_cmd.CommandText = "Update Clients Set lien_pays_id=(Select pays_id From table_pays where pays="france") where nom_client=Dupont ;"
odbc_cmd.ExecuteNonQuery()

je précise qu'il n'y a aucune relation entre mes tables Access

le problème vient bien du fait d'imbriquer une requête SELECT dans la requête UPDATE, car le requête suivante fonctionne :

odbc_cmd.CommandText = "Update Clients Set lien_pays_i=5 where nom_client=Dupont ;"
odbc_cmd.ExecuteNonQuery()

Si quelqu'un a une idée, merci d'avance

Chris

5 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
12 août 2005 à 22:22
Salut



Ne serais ce pas le "france" entre double quote sui fait foiré le tout?

Est ce que ca compiles ou pas déja?



Voila
0
chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014
13 août 2005 à 00:30
petite erreur de ma part !

la requete est :

odbc_cmd.CommandText = "Update Clients Set lien_pays_id=(Select pays_id From table_pays where pays='france') where nom_client=Dupont ;"

et oui, ca compile !

en plus, si j'execute a part la requete :

Select pays_id From table_pays where pays='france';

ca me renvoie bien la bonne valeur !

c'est uniquement le fait d'imbriquer les deux qui génère une exception de type OdbcException

Chris
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
13 août 2005 à 12:10
Salut,



Regardes si tu transformes le = en in



Es-tu sur que Select pays_id From table_pays where pays='france

Te renvoies une seule valeur



Sinon c'est peut être une limitaition technique.



Dans ce cas, il y a la solution de faire des requetes

Et dans ce cas la la requete access est appelable comme une procedure stockée?





Voila
0
chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014
14 août 2005 à 21:52
je vais essayer en remplacant le = par un "in" mais je ne comprends pas pourquoi ca marcherait mieux.
et je suis sûr que la requête SELECT renvoie bien une seule valeur, car si je l'exécute séparément, elle renvoie bien une seule valeur !

existe-t-il un logiciel d'interrogation d'une base Access avec SQL ?
juste pour tester la requête hors de la programmation et d'ODBC...

merci
0

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

Posez votre question
chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014
16 août 2005 à 14:01
ca ne marche pas non plus avec le IN

je crois en fait que les requêtes imbriquées ne peuvent fonctionner que dans la clause WHERE d'une première requête.
0
Rejoignez-nous