[vba] requete sql

poulain35 -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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. swed
     
    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
  2. poulain35
     
    Qu'est ce qui est approprié pour une requete DELETE alors ? parceque je vois ca partout.
    0
  3. Dylan.B
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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