Le grenier Access

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 9 juillet 2010

Sauvegardes datées

Je souhaiterais automatiser la sauvegarde de ma base de données, en dupliquant le fichier MDB de temps en temps. Pour différencier les sauvegardes, l'idéal serait de dater chaque copie. Comment faire ?

 

Lire la suite...

jeudi 18 février 2010

Banque d'images : compléter la liste d'images

On continue la série Gérer une banque d'images sur Access (cliquez ici pour consulter la liste des articles de cette saga, bientôt autant d'épisodes que dans les Feux de l'Amour, une référence !).

Dans l'article Alimenter une banque d'images automatiquement, je donnais un bout de code qui recense les images d'un dossier et stocke leur chemin dans une table Access. Mais ce code VBA recense systématiquement tout le dossier à chaque fois. En d'autres termes, si vous lancez le programme 2 fois sur le même dossier, vous obtenez 2 fois la même liste d'images dans la table.

Dans cet article, vous trouverez une version améliorée : cette fois, le programme n'indexe les images qu'une seule fois dans le dossier (en se basant uniquement sur le nom du fichier Image et le chemin du dossier). A la fin de la procédure, il signale le nombre d'images recensées, et éventuellement le nombre de doublons ignorés.

Lire la suite...

mardi 15 décembre 2009

Obtenir le dernier NuméroAuto attribué

J'exécute une instruction SQL de type INSERT pour ajouter des lignes dans une table. La clef primaire de cette table est un NuméroAuto. Comment connaître la valeur du NuméroAuto qui vient d'être inséré ?

Lire la suite...

mercredi 25 novembre 2009

Liste des requêtes

Comment obtenir la liste de toutes les requêtes de la base de données ?

Lister les requêtes de la base de données

Voici une petite procédure VBA qui devrait faire l'affaire (à taper dans un module standard) :

Sub ListeRequetes()
  Dim db As DAO.Database
  Dim qdf As DAO.QueryDef
 
  Set db = CurrentDb
  For Each qdf In db.QueryDefs
    Debug.Print qdf.Name
  Next
 
  Set db = Nothing
End Sub

Tester

Pour tester, ouvrez la fenêtre de debug (CTRL + G), et tapez-y :
ListeRequetes et appuyez sur la touche [Entrée].

Vous obtiendrez la liste de toutes les requêtes de votre base.

Info
Ajoutez un Debug.Print qdf.SQL dans la boucle For/Next pour afficher également le code SQL de la requête.
Important
L'exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.
 
Pour plus de détails sur les références, consultez cette page.

Ne pas lister les requêtes obsolètes

Avec la méthode ci-dessus, vous obtenez toutes les requêtes, y compris certaines inutiles, dont le nom démarre par le signe "~". Vous pouvez les éliminer de cette manière :

Sub ListeRequetesStandard()
  Dim db As DAO.Database
  Dim qdf As DAO.QueryDef
 
  Set db = CurrentDb
  For Each qdf In db.QueryDefs
    If Left(qdf.Name, 1) <> "~" Then
      Debug.Print qdf.Name
    End If
  Next
 
  Set db = Nothing
End Sub

Dans la même série

lundi 4 mai 2009

RecordsAffected ne fonctionne pas ?

Suite à une conversation sur les forums...
J'exécute des instructions SQL à l'aide de la commande Execute. J'ai vu qu'on pouvait récupérer le nombre de lignes modifiées par CurrentDb.RecordsAffected. Mais on dirait que ça ne marche pas ?

Lire la suite...

lundi 6 avril 2009

Alimenter une banque d'images automatiquement

Cet article fait suite à l'article Gérer une banque d'images, dans lequel vous avez pu voir comment stocker une liste d'images dans une table, pour l'afficher ensuite dynamiquement sur un formulaire ou sur un état. Mais pourquoi alimenter la table manuellement, alors qu'on peut le faire à l'aide d'un peu de VBA ?

Lire la suite...

samedi 21 février 2009

Lier des tables Excel en VBA

Comment, en VBA, lier une feuille Excel à une base de données Access ?

Lire la suite...

lundi 16 février 2009

Liste des tables

Comment obtenir une liste des tables présentes dans la base de données ?

Lister les tables de la base de données

Tapez le code suivant dans un module quelconque :

Function ListeTables()
  Dim db As DAO.Database, tdf As DAO.TableDef

  Set db = CurrentDb
  For Each tdf In db.TableDefs
    Debug.Print tdf.Name
  Next tdf
  Set db = Nothing
End Function

Pour tester, ouvrez la fenêtre de debug (CTRL + G), et tapez-y :
? ListeTables() et appuyez sur la touche [Entrée].

Vous obtiendrez la liste de toutes les tables de votre base, y compris les tables système (celles gérées en interne par Access).

Important
L'exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.
 
Pour plus de détails sur les références, consultez cette page.

Lister les tables non système

Généralement, la liste qui vous intéresse est celle de vos propres tables, sans les tables système. Dans ce cas, vous pouvez faire un test supplémentaire sur les attributs de la table, ce qui donne :

Function ListeTablesNonSysteme()
  Dim db As DAO.Database, tdf As DAO.TableDef

  Set db = CurrentDb
  For Each tdf In db.TableDefs
    If (tdf.Attributes And dbSystemObject) = 0 Then
      Debug.Print tdf.Name
    End If
  Next tdf
  Set db = Nothing
End Function

jeudi 5 février 2009

libMail : une bibliothèque VBA pour expédier des emails avec ou sans pièces jointes

Dans la série : "comment, à partir d'Access, expédier un email avec ou sans pièces jointes ?", voici une méthode alternative proposée par Denis Scheidt (également contributeur sur les forums self-access.com)...

La bibliothèque libMAIL fournie par Denis implémente ce qu'il faut de la RFC821 pour permettre l'envoi de mails à partir d'Access. Le tout en pur VBA et sous licence LGPL... Ca vous dit d'essayer ?

Lire la suite...

mardi 7 octobre 2008

Supprimer toutes les relations

Comment supprimer toutes les relations de la base de données ?

Ça ne devrait pas vous servir souvent, mais si vous deviez supprimer toutes les relations entre les tables de votre base de données, faites comme ceci :

  1. Ajoutez un module standard dans votre base de données.
  2. Recopiez dans ce module le bout de code VBA donné plus bas.
  3. Placez votre curseur quelque part dans la portion de code.
  4. Cliquez sur l'icône Exécuter Sub/UserForm, en haut de l'écran.

Le code

' ---
' SUPPRIMER TOUTES LES RELATIONS DE LA BASE DE DONNEES
' ---
'
Sub SupprimerRelations()
Dim db As DAO.Database
Dim intI As Integer

' Une confirmation, au cas où ;-)
If MsgBox("Confirmez-vous la suppression de toutes les relations ?", _
  vbQuestion + vbYesNo) = vbNo Then
  Exit Sub
End If

' Une instance de la base de données
Set db = CurrentDb

' Mémoriser le nombre de relations
intTotal = db.Relations.Count

' Supprimer toutes les relations
For intI = db.Relations.Count - 1 To 0 Step -1
  db.Relations.Delete db.Relations(intI).Name
Next

' On libère les objets
Set db = Nothing

' Un petit message final :-)
MsgBox "Nombre de relations supprimées : " & intTotal, _
  vbInformation
End Sub
Important
L'exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.
 
Pour plus de détails sur les références, consultez cette page.

- page 1 de 3