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

Contribuez Discussion :

Les méthodes pour Lister / Vider / Supprimer les Tables


Sujet :

Contribuez

  1. #1
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut Les méthodes pour Lister / Vider / Supprimer les Tables
    Bonjour à tous,
    suite à plusieurs topics sur le sujet, je laisse ici mon code qui permet de manipuler les tables d'une base.

    Plusieurs approches, selon les choix de programmation des uns et des autres..
    Ces fonctions retournent Vrai si elles ont bien fonctionné, elles fonctionnent dans la base en cours.



    Lister les tables
    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
     
    '*****************************
    'fonction de récupération de la liste des tables d'une base par les propriétés VBA
    'input = nom de la base
    'output = booleen (debug.print)
    '*****************************
    Function ListeTablesBase(PathBase As String) As Boolean
    Dim Db As DAO.Database
    Dim tempo As TableDef
        Set Db = DBEngine.OpenDatabase(PathBase)
        Debug.Print "******LISTE DES TABLES DE LA BASE " & Db.Name & "******"
        For Each tempo In Db.TableDefs
            Debug.Print "---------------------------------------------------"
            Debug.Print tempo.Name
            Debug.Print tempo.connect
        Next
        Debug.Print "********* FIN LISTE *********"
    End Function
    Vider une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function ViderTable(NomTable As String) As Boolean
    On Error GoTo fin
        CurrentDb.Execute "DELETE * FROM [" & NomTable & "];"
        ViderTable = True
    Exit Function
    fin:
        ViderTable = False
    End Function
    Detruire une table
    1/ Par les fonctions Access (Docmd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DetruireTable2(NomTable As String) As Boolean
    On Error GoTo fin
        DoCmd.DeleteObject acTable, NomTable
        DetruireTable2 = True
    Exit Function
    fin:
        DetruireTable2 = False
    End Function
    2/ Par les fonctions VBA par TableDefs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DetruireTable(NomTable As String) As Boolean
    On Error GoTo fin
        CurrentDb.TableDefs.Delete NomTable
        DetruireTable = True
    Exit Function
    fin:
        DetruireTable = False
    End Function
    3/Par le requêtage SQL (DROP)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DetruireTable3(NomTable As String) As Boolean
    On Error GoTo fin
        CurrentDb.Execute "DROP TABLE [" & NomTable & "]"
        DetruireTable3 = True
    Exit Function
    fin:
        DetruireTable3 = False
    End Function
    N'hésitez pas à poser des questions sur l'utilisation de ces méthodes, qui sont certes optimisables si on veut pinailler, mais suffisamment intuitives pour être comprises par le plus grand nombre
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    La plupart de ces codes (voir tous) sont déjà présents dans la Access.

    Starec

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    certes, certes...
    On m'avait conseillé de l'ajouter dans la partie contribuez...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    étant l'intiateur du conseille, je voudrais préciser qq point:
    . poster ces codes (ceux de suppression) à chaques fois que qq'un avait besoin ne me paraissait pas utile.
    . d'après mes recherches, la faq contient que deux fonctions:
    Comment supprimer une table avec ADO ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function SupprimerTable(NomTable As String) As Boolean
    On Error GoTo err
    Dim MCat As New ADOX.Catalog
    Set MCat.ActiveConnection = CurrentProject.Connection
    MCat.Tables.Delete (NomTable)
    SupprimerTable = True
    err:
    Set MCat = Nothing
    End Function
    Comment supprimer une table si elle éxiste ?
    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
    Function Delete_Table(NomTable As String) As Boolean
        Dim db As DAO.Database
        Dim tbl As DAO.TableDef
        Delete_Table = False
     
        Set db = CurrentDb
     
        For Each tbl In db.TableDefs
            If tbl.Name = NomTable Then
                db.TableDefs.Delete (tbl.Name)
                Delete_Table = True
            Else
                Delete_Table = False
            End If
        Next tbl
     
    End Function
    que je recommandais de rajouter.
    . je trouvais l'idée d'énumérer les différentes possibilités de suppression intéressante mais ce que j'attendais surtout c'était d'expliquer leur différence qui aurait apporter ce + qui manque à la faq.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    je trouvais l'idée d'énumérer les différentes possibilités de suppression intéressante
    Alors ici la suppression d'une table et la suppression de tous les enregistrements sont présentées.

    Je proposes un code de suppression des enregistrements spécifiques dans n'importe quelle table

    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
    26
    27
     
    Public Sub SupprimeEnreg(ByVal MaTable As String, ByVal MaCle1 As String, ByVal MaCle2 As String, _
                            ByVal MaValeur1 As Integer, ByVal MaValeur2 As Integer, Optional MaCle3 As String, Optional MaValeur3 As Integer)
     
    '--------------------------------------------------------------------------------------------
    'Objectif     : Supprimer des enregistrements spécifiques dans une table
    'Méthodologie : Construire une requête de suppression SQL dynamique sur une table passée en paramétre
    '               ainsi que les clés et valeurs de l'enregistrement à supprimer
    '--------------------------------------------------------------------------------------------
     
    Dim msql As String
     
        If IsNull(MaCle2) Or MaCle2 = "" Then ' si le 2éme critère n'est pas renseigné
            msql = "Delete * From " & MaTable & " Where " & MaCle1 & " = " & MaValeur1
        Else
            If IsNull(MaCle3) Or MaCle3 = "" Then ' si le 3éme critère n'est pas renseigné
                msql = "Delete * From " & MaTable & " Where " & MaCle1 & " = " & MaValeur1 & " and " & MaCle2 & " = " & MaValeur2
            Else
                msql = "Delete * From " & MaTable & " Where " & MaCle1 & " = " & MaValeur1 & " and " & MaCle2 & " = " & MaValeur2 & " and " & MaCle3 & " = " & MaValeur3
            End If
        End If
     
        DoCmd.SetWarnings False
        DoCmd.RunSQL (msql)
        DoCmd.SetWarnings True
     
    End Sub
    Utilisation
    1 - Supprimer la commande N°5 de la table T_Commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         call SupprimeEnreg("T_Commande","NumCommande","",5,0,"",0)
    2 - Supprimer le produit de Code 18 de la commande 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         call SupprimeEnreg("T_DetailCommande","NumCommande","CodeProduit",5,18,"",0)
    PS : Pour être totalement générique, il faudra tester le type des champs à passer en paramètre et modifier le code en conséquence.
    Amicalement

  6. #6
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Citation Envoyé par vodiem Voir le message
    c'était d'expliquer leur différence qui aurait apporter ce + qui manque à la faq.
    Olla, Ô grands destructeurs de tables,
    Question plus intéressante qu'il n'y paraît, mais qui, à mon avis, n'a pas sa place ICI, mais plutôt dans un débat, voire un micro-projet commun.

    Je m'explique :
    - ma 1ère réaction serait de dire : il n'y a aucune différence entre un 'Drop SQL' et un 'DAO.TableDefs.Delete' : le choix se fait d'abord en fonction des ta formation, de tes habitudes de développeur, et le résultat sera le même.
    - 2ème réaction : si la table appelée n'existe pas (déjà supprimée..., peu importe.), les erreurs déclenchées ne seront pas les mêmes.
    Donc, il y a quelques différences, même si aucune méthode n'est 'meilleure' ou 'moins bonne'.
    Pour les trouver et les lister, faut faire une recherche, des tests exhaustifs (tant que le sujet reste ouvert, d'autres pourront l'enrichir)... et pondre un petit résumé -> Faq, peut être un article...

    Je propose donc, (en me défilant avec une habileté déconcertante parce que je sais que je n'aurai pas le temps), que Vodiem qui cherche et DmBoup qui a plus de connaissances créent ensemble un mini-projet de 'méthodes comparées pour supprimer une table, etc.', dans le sous-forum dédié.

    Rappel : ne pas attendre que ça tombe tout cru. Il n'y a qu'en cherchant, en testant qu'on trouve les réponses.

    Bon courage, et miam-miam-merci de toutes contributions.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

Discussions similaires

  1. Supprimer les commentaires pour Doxygen
    Par Garulfo dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 20/03/2008, 15h13
  2. Réponses: 3
    Dernier message: 30/08/2007, 15h41
  3. JFrame - supprimer les boutons pour minimiser et agrandir
    Par Casp dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/07/2006, 16h58
  4. [DEBUTANT]Supprimer les espaces pour une requete
    Par tripper.dim dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 16h04

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