[vba] requete sql

Fermé
poulain35 - 17 déc. 2010 à 13:24
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 27 mai 2011 à 16:44
Bonjour,

J'ai une erreur pour supprimer des données d'une BDD Access a partir de mon code VBA Excel :
'Se connecter à la base de données
        CheminBDD = ThisWorkbook.Path & "\BDD_WOP.accdb"
        Set base = DBEngine.OpenDatabase(CheminBDD)
        'Déclaration la requète de selection
        requete = "DELETE id_fic, nom_fic, type_fic, loc_fic FROM fichiers WHERE nom_fic = '" & liaison1 & "'"
        'Déclaration du recordset
        Set table = base.OpenRecordset(requete)


Il me mette Erreur d'exécution '3219' : Opération non valide. !! En mode débogage, je tombe sur la ligne : Set table = base.OpenRecordset(requete)

Je ne vois pas d'ou vien le probleme.

Merci d'avance.


5 réponses

Bonjour,

La syntaxe d'une requête SQL DELETE est :
DELETE FROM [NOM_TABLE] WHERE [CONDITIONS]

Donc en premier lieu, ta requête est invalide.

En second lieu, le OpenRecordset permet d'ouvrir un jeu d'enregistrements (comme son nom l'indique).
Une requête SQL DELETE ne renvoie aucun enregistrement (contrairement à un SELECT).
Même si je ne connais pas bien VBA ; je pense donc que le OpenRecordset est inapproprié pour l'exécution d'une requête DELETE.

Cordialement, M.
1
Qu'est ce qui est approprié pour une requete DELETE alors ? parceque je vois ca partout.
0
Bonjour,

Je pense que swedd a raison sur la syntaxe du DELETE.

Essaye :

DIM SQL_test As String
DIM tabe as Recordset

SQL_test = "DELETE FROM fichiers WHERE nom_fic = '" & liaison1 & "';"

Set table = base.OpenRecordset(SQL_test)

table.Close


Sinon

DoCmd.RunSQL "DELETE FROM fichiers WHERE nom_fic = '" & liaison1 & "';"
0
je pense ....
0

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

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 27/05/2011 à 16:51
une piste peut-^tre:

1/ton identifiant est il autoincrémenté ?
2/ as tu des intégrités référentielles avec d'autre tables (dependance)?

3/mais je partage aussi les remarques de Swed et dylan sur la syntaxe de DELETE

autre chose:
Tu peux aussi feinter avec
SELECT..... FROM fichiers WHERE nom_fic = '" & liaison1 & "';"

puis avec table
While not table.eof
table.delete
table.movenext
wend


Michel
0