Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2008, 17h07   #1
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 881
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 881
Points : 10 747
Points : 10 747
Envoyer un message via MSN à jpcheck
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.



Citation:
Lister les tables
Code :
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
Citation:
Vider une table
Code :
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
Citation:
Detruire une table
1/ Par les fonctions Access (Docmd)
Code :
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 :
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 :
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
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 17h33   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 920
Points : 30 920
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

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

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 17h56   #3
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 881
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 881
Points : 10 747
Points : 10 747
Envoyer un message via MSN à jpcheck
certes, certes...
On m'avait conseillé de l'ajouter dans la partie contribuez...
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2008, 09h47   #4
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
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 644
Points : 3 897
Points : 3 897
é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 :
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 :
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.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2008, 19h49   #5
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413
Citation:
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 :
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 :
1
2
 
     call SupprimeEnreg("T_Commande","NumCommande","",5,0,"",0)
2 - Supprimer le produit de Code 18 de la commande 5
Code :
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
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 10h30   #6
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 751
Détails du profil
Informations personnelles :
Nom : Homme Etienne Pailleret
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur VBA

Informations forums :
Inscription : mars 2004
Messages : 751
Points : 1 123
Points : 1 123
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.
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h18.


 
 
 
 
Partenaires

Hébergement Web