Opération invalide sur création de table (Access 2003)

Résolu
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010 - 10 févr. 2009 à 13:04
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 - 10 févr. 2009 à 16:10
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

hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
10 févr. 2009 à 13:38
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
3
mamash_bek Messages postés 20 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 11 juin 2009 1
10 févr. 2009 à 15:45
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 .....;")
3
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010
10 févr. 2009 à 14:22
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
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
10 févr. 2009 à 14:22
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 ^^
0

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

Posez votre question
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010
10 févr. 2009 à 14:29
hebus6, pourrais tu etre plus...précis s'il te plait?
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
10 févr. 2009 à 15:15
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
0
mamash_bek Messages postés 20 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 11 juin 2009 1
10 févr. 2009 à 15:47
Désolé, je n'avais pas vu la nouvelle réponse d'Hebus
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
10 févr. 2009 à 15:54
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
0
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010
10 févr. 2009 à 16:07
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.
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
10 févr. 2009 à 16:10
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
0