Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et 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

Réponse
 
Outils de la discussion
Vieux 30/01/2008, 17h07   #1 (permalink)
Expert Confirmé Sénior
 
Avatar de jpcheck
 
Date d'inscription: juillet 2007
Localisation: RP
Âge: 24
Messages: 2 910
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 :
 
'*****************************
'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 :
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 :
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 :
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 :
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
__________________
Piou-Piou
Poussin Developpeur

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

Mon perso ? Une vraie brute

Dernière modification par jpcheck ; 04/02/2008 à 17h42
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2008, 17h33   #2 (permalink)
Responsable PowerPoint
 
Avatar de Philippe JOCHMANS
 
Date d'inscription: mai 2005
Localisation: Loir et Cher et Touraine
Âge: 40
Messages: 9 941
Envoyer un message via MSN à Philippe JOCHMANS
Par défaut

Bonjour

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

Starec
__________________
En cas de questions techniques par MP ou message visiteur
Office : :Les Cours, Les FAQs
VB : Les Cours, Les FAQs
Mes articles : ici
Me connaitre
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2008, 17h56   #3 (permalink)
Expert Confirmé Sénior
 
Avatar de jpcheck
 
Date d'inscription: juillet 2007
Localisation: RP
Âge: 24
Messages: 2 910
Envoyer un message via MSN à jpcheck
Par défaut

certes, certes...
On m'avait conseillé de l'ajouter dans la partie contribuez...
__________________
Piou-Piou
Poussin Developpeur

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

Mon perso ? Une vraie brute
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/02/2008, 09h47   #4 (permalink)
Expert Confirmé
 
Date d'inscription: avril 2006
Localisation: Perpignan
Âge: 36
Messages: 1 564
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 :
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 :
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 actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 02/02/2008, 19h49   #5 (permalink)
Membre Expert
 
Date d'inscription: juin 2003
Localisation: Sénégal
Messages: 1 162
Par défaut

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 :
 
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 :
 
     call SupprimeEnreg("T_Commande","NumCommande","",5,0,"",0)
 
2 - Supprimer le produit de Code 18 de la commande 5
Code :
 
     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
Vieux 04/02/2008, 10h30   #6 (permalink)
Rédacteur/Modérateur
 
Avatar de Papy Turbo
 
Date d'inscription: mars 2004
Messages: 618
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.
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Contribuez

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide