Opération invalide sur création de table (Access 2003) [Résolu]

Signaler
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010
-
Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009
-
Bonjour,


Je souhaiterai lancer une requête de création de table via une macro.

La requête est correcte (à savoir, elle s'exécute correctement
lorsqu'elle est lancée en "direct"), cependant, j'obtiens une erreur
3219 / Opération invalide lorsque je l'execute via macro. L'erreur est
localisée sur la ligne en gras.

Code :
Private Sub Commande4_Click()

Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("Req1")
While Not Rs.EOF
MsgBox Rs(0)
Rs.MoveNext
Wend

Set Rs = Nothing

End Sub

J'ai bien essayé de supprimer la table créée par la requête au préalable mais rien n'y fait.

J'ai fait quelques recherches ici et ailleurs mais j'ai l'impression
que cette erreur est plutôt "générique" et que la résolution se fait au
cas par cas!


D'avance merci.

10 réponses

Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
Bonjour,

Pourquoi utiliser de du DAO et non pas de l'ADO (surtout avec de l'acces 2003)???
As-tu bien fait ton référencement? (outils --> références)

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
20
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
11 juin 2009
1
Ce que veux dire Hebus c'est qu'apres avoir ouvert ta connexion à la base tu n'as pas besoin d'utiliser un recordset, il te suffit d'utiliser la methode execute de ta connexion




Exemple:





Set conn = New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & db_file & ";" & _
"Persist Security Info=False"
conn.Open




conn.Execute "CREATE TABLE ....."



Vu que tu as l'air de travailler sur ta base access en direct essaie simplement:




Private Sub Commande4_Click()




DoCmd.RunSQL ("Create Table .....;")
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010

Merci pour ta réponse!
J'avoue que j'ai choppé le code sur le net...Je ne suis pas un as en Access :D
Par contre, niveau référence, je pense que c'est bon vu que la référence Microsoft DAO 3.6 Object Library est cochée
Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009

Il est possible que je raconte une bêtise mais jete plutot un oeil sur la methode execute pour les delete/create et update de table. l'openRecordset doit fonctionner pour les select.

Perso Hellangel777 j'utilise moi aussi le DAO et j'en suis content :-p vieilles habitudes mais tant que ça marche et que mes temps de réponses me vont bien je suis peinard ^^
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010

hebus6, pourrais tu etre plus...précis s'il te plait?
Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009

ok si Microsoft DAO 3.6 Object Library alors tu es bon, la librairie est bel et bien active.
Concernant l'exécution de la requête, si j'ai bien compris tu effectues une création de table par une requête. Dans ce cas là définis une Querydef
   Dim QD_Requete As QueryDef
   Dim DB as database
   Dim S_Requete as String

Set QD_Requete = DB.QueryDefs(S_CleRequete)
S_Requete = "CREATE TABLE MACHIN MACHIN MACHIN"
DB.QueryDefs.Delete S_CleRequete ' supprime si ta requête existe deja
Set QD_Requete = DB.CreateQueryDef(S_CleRequete)
QD_Requete.Sql = S_Requete
QD_Requete.Close

' Execution de la requete
   QD_Requete.Execute dbFailOnError

voilà un exemple ... d'ailleurs je viens de reagir que le querydef te servira pas forcement (elle inscrit ta requete directement dans la base de donnée et tu peux donc eviter la reconstitution de la requete en elle meme ... pas sur que cela te soit utile)
par contre là ca te permettra de faire l'execution de tes operations d'ecriture dans la base de donnée avec le Execute

voilà

  e
Messages postés
20
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
11 juin 2009
1
Désolé, je n'avais pas vu la nouvelle réponse d'Hebus
Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009

héé ^^ le DoCmd je l'avais complètement oublié lui ^^ Faudrait peut être que je révise mes bases aussi :p
Après tout dépend de la bibliothèque utilisé et tout et tout ^^ il n,existe pas qu'une seule solution ^^ heureusement sinon on serait tous au chomage :p
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010

Merci à vous 2...En fait, j'ai repris la méthode de Mamsh_bek, en utilisant un simple
DoCmd.RunSQL("...;") qui marche parfaitement...En plus, c'est la méthode que je comprend le mieux...
Ce n'est peut être pas la plus "jolie" mais ca marche très bien!

Hebus, j'ai essayé ta méthode, mais j'avais une erreur 91, bloc With manquant...Je n'ai pas poussé plus loin...

en tout cas, merci à tous les 2!

Excellente fin de journée.
Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009

Tiens doit manquer une déclaration .. ou un objet ...

ahhhh il manque la déclaration de la base de donnée ... le DB n'est pas définit c'est pour ça

Désolé
 prochain coup je me relirais