IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Vider une table en VBA


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Par défaut Vider une table en VBA
    Bonjour,

    Comment puis-je vider une table avec une instruction en VBA lorsque je quitte un formulaire?

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      DoCmd.SetWarnings False 'empêche les messages d'alerte
        DoCmd.RunSQL "DELETE * FROM MaTable "
      DoCmd.SetWarnings True

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Autre solution possible :

    créer une requête de suppression (ex : rViderMaTable) et l'appeler à partir du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim db as dao.database:set db=currentdb
    db.querydefs("NomTaRequeteSuppression").execute
    db.close:set db=nothing
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre confirmé
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Par défaut
    OK !!

    Merci à tous les 2 !

    Je vais tester en priorité la solution en VBA ... lundi !

    Bon WE !

  5. #5
    Membre confirmé
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Par défaut
    En fait je n'ai pas pu résister à la tentation de tester vos proposition dès vendredi soir : Ça marche impec !!

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Par défaut Une de plus
    ... et en voici une troisieme qui ne generera aucun message de confirmation de la part d'Access :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call CurrentDb.Execute("DELETE * FROM MaTable;")
    Bon amusement

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Merci SSJconsult je ne connaissais pas celle la.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Deux autres solutions :

    Avec un recordset DAO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Suppr1()
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
    Set oDb = CurrentDb
    Set oRst = oDb.TableDefs("Table1").OpenRecordset
    While Not oRst.EOF
      oRst.Delete
      oRst.MoveNext
    Wend
    End Sub

    Avec un ordre SQL et ADO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Suppr2()
    CurrentProject.Connection.Execute "DELETE FROM TABLE1"
    End Sub

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Merci TOFALU, celle par la connexion est vraiment originale.

    Intuitivement je pense que celles qui utilisent du SQL sont plus rapides que celle qui utilise du VBA mais quelqu'un a-t-il fait un comparatif sérieux. C'est de la pure curriosité car je n'ai pas de besoin dans ce domaine actuellement.

    En tout cas en SQL cela nécessite moins de code.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre confirmé Avatar de Patrice.H
    Homme Profil pro
    Étudiant en alternance
    Inscrit en
    Février 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant en alternance

    Informations forums :
    Inscription : Février 2010
    Messages : 82
    Par défaut
    On m'a toujours dit que pour supprimer il valait mieux utiliser un truncate, surtout si ta table contient de grands quantité de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.runSQL= "truncate table TABLE1"

  11. #11
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    RunSQL n'est pas une proprité mais une fonction. Le = générera donc une erreur de compilation

    Quant à Truncate, il n'est pas utilisable dans Access

  12. #12
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Merci TOFALU, celle par la connexion est vraiment originale.

    Intuitivement je pense que celles qui utilisent du SQL sont plus rapides que celle qui utilise du VBA mais quelqu'un a-t-il fait un comparatif sérieux. C'est de la pure curriosité car je n'ai pas de besoin dans ce domaine actuellement.

    En tout cas en SQL cela nécessite moins de code.

    A+
    Toutes celles utilisant des ordres SQL, soit générés depuis VBA soit via des querydef (requête enregistrées) vont avoir des performances semblables.
    En revanche, les recordsets vont avoir des perfs lamentables plus le volume à traiter sera grand, qu'il s'agisse de recordset DAO ou ADO

    L'avantage d'utiliser Execute (querydef ou Database) réside dans la gestion des erreurs (dbfailonerror) et dans le mode transactionnel qui permet de simuler la suppression afin de la confirmer ou de l'annuler sans passer par les traditionnels messages d'Access.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub Suppr2()
    On Error GoTo err
    Dim oDb As DAO.Database
     
    Set oDb = CurrentDb
     
    DBEngine.BeginTrans
    With oDb
      .Execute "DELETE FROM Table1", dbFailOnError
      If MsgBox("Supprimer " & .RecordsAffected & " lignes ?", vbYesNo) = vbYes Then
        DBEngine.CommitTrans
      Else
        DBEngine.Rollback
      End If
    End With
     
    fin:
    Set oDb = Nothing
    Exit Sub
     
     
    err:
    DBEngine.Rollback
      resume fin
    End Sub

  13. #13
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Pour être complet :

    L'utilisation de transaction avec AdoDb via l'objet Currentproject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub Suppr32()
    Dim n As Integer
     
    On Error GoTo err
     
    With CurrentProject.Connection
      .BeginTrans
      .Execute "DELETE FROM TABLE1", n
      If MsgBox("Supprimer " & n & " lignes ?", vbYesNo) = vbYes Then
        .CommitTrans
      Else
        .RollbackTrans
      End If
    End With
    fin:
      Exit Sub
     
    err:
      CurrentProject.Connection.RollbackTrans
      Resume fin
    End Sub
    La gestion d'erreur est améliorable, impossible de rollback si c'est le begintrans qui lève l'erreur, mais le principe est là.
    L'intéret est de comparer la manière dont on récupère le nombre de lignes affectées par la méthode Execute. Avec DAO, il s'agit d'une propriété, avec ADO, il s'agit d'une variable passée byref

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Je n'ai qu'une seule chose à dire : WAOW !

    Merci TOFALU.
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Hé bien, si avec tout ça.... il reste quelque chose dans la table.

    Par contre, je ne savais pas que le passage par les Recordset donnait des performances si mauvaises...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Vider une table
    Par philippef dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 22/03/2013, 19h20
  2. Vider une table MySQL suite à javascript:confirm()
    Par anutka dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 16/09/2005, 12h16
  3. comment vider une table de tous ses enregistrements ?
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/07/2005, 10h19
  4. Vider une table a une fermeture subite
    Par mimosa7 dans le forum Access
    Réponses: 6
    Dernier message: 15/06/2005, 17h13
  5. Créer une table en VBA ?
    Par nicburger dans le forum Access
    Réponses: 11
    Dernier message: 16/02/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo