[vba] requete sql

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

  1. 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
    1. Qu'est ce qui est approprié pour une requete DELETE alors ? parceque je vois ca partout.
      0
      1. 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
        1. Contributeur
          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