Le grenier Access

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

Requêtes SQL et VBA

Fil des billets - Fil des commentaires

lundi 15 mars 2010

Calcul de rang

Comment obtenir le rang de personnes, en tenant compte des ex-æquo ? L'idée étant de classer les participants à une épreuve sportive, ou des élèves à partir de leurs notes...

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

samedi 13 septembre 2008

Exécuter une instruction SQL sur une base dorsale

A partir d'une base frontale liée à une base dorsale en réseau (format MDB), je voudrais créer une nouvelle table dans ma base dorsale (par exemple, pour faire une mise à jour de mon application). Comment faire ?

Lire la suite...

Modifier la structure d'une table liée en VBA

Comment modifier la structure d'une table liée en VBA ?

Dans l'article Modifier la taille d'un champ en VBA, il était question de modifier la structure d'une table de la base de données, en exécutant une instruction SQL ALTER TABLE à partir de VBA. Mais ça ne marche pas si la table est liée (elle appartient à une base dorsale, en réseau par exemple). Comment faire dans ce cas ?

Lire la suite...

jeudi 6 septembre 2007

Utiliser la fonction DLookup

A quoi sert la fonction DLookup ? Comment l'utiliser en Visual Basic ?

Présentation de DLookup

DLookup (ou RechDom en français) permet de rechercher une valeur unique dans une table : cette valeur est celle d'un champ précis, pour une ligne précise de la table. Même si elle n'est pas ultra-performante, DLookup a quelques avantages :

  • Elle nécessite peu de code (une formule d'une ligne suffit).
  • En tant que fonction VBA, elle peut s'employer dans des contextes hors programmation : un champ calculé de requête, ou une zone de texte de formulaire ou d'état par exemple. Elle peut bien sûr être exploitée en VBA si nécessaire...

Lire la suite...

mercredi 5 septembre 2007

Requête et tableau VBA

Comment transférer le contenu d'une requête dans un tableau Visual Basic ?

Avant de démarrer, il faut savoir qu'une requête se manipule en VBA à l'aide d'un objet Recordset (DAO.Recordset ou ADODB.Recordset). Cet objet est déjà une forme de tableau en lui-même. Ce qui veut dire qu'il n'est généralement pas nécessaire de le transférer spécifiquement dans un tableau VBA.

Si malgré tout vous avez besoin de transférer le résultat d'une requête, voici une méthode (parmi d'autres) qui peut faire l'affaire. Dans l'exemple, une requête Analyse croisée est transférée dans un tableau VBA nommé avarValeurs.

Lire la suite...

lundi 3 septembre 2007

Modifier le code SQL d'une requête en VBA

En VBA, est-il possible de modifier le code SQL d'une requête enregistrée dans la base de données ?

C'est possible. Dans un fichier .mdb, les requêtes sont listées par la collection QueryDefs (plus de détails dans l'aide en ligne). Chaque requête est un élément de cette collection, et possède une propriété SQL modifiable.

Pour modifier une requête en VBA, écrivez :

Dim strSQL As String
strSQL = "instruction SQL"
CurrentDB.QueryDefs("Requête à modifier").SQL = strSQL

Par exemple :

Dim strSQL As String
strSQL = "SELECT * FROM [tbl Clients] ORDER BY [Nom Client];"
CurrentDB.QueryDefs("rqt Clients").SQL = strSQL

Modifier la taille d'un champ en VBA

Comment modifier la taille d'un champ de type Texte en VBA/SQL ?

L'instruction suivante fait appel à VBA et SQL pour modifier la taille d'un champ Texte (à aménager selon les autres types de champs) :

DoCmd.RunSQL "ALTER TABLE [La Table] ALTER COLUMN [Le Champ] TEXT(nouvelle_taille)"

Par exemple :

DoCmd.RunSQL "ALTER TABLE [tbl Clients] ALTER COLUMN [Prénom] TEXT(25)"

Exécuter une requête Action en VBA

Comment exécuter une requête Action (INSERT, UPDATE, DELETE) en Visual Basic ?

Soit une requête SQL du type : DELETE * FROM [Une table];
Pour exécuter cette requête en Visual Basic, 2 méthodes :

L'instruction DoCmd.RunSQL

Exemple :

DoCmd.RunSQL "DELETE * FROM [Une table];"

La méthode Execute de l'objet DAO.Database

Exemple :

CurrentDb.Execute "DELETE * FROM [Une table];"

Notes

  • RunSQL provoque l'affichage classique de messages de confirmation ("Confirmez-vous la suppression de x enregistrements ?"). Pour éviter ces messages, précédez la commande de la ligne DoCmd.SetWarnings False... ou utilisez la méthode Execute !
    Dans le premier cas, pensez à placer un DoCmd.SetWarnings True après l'exécution de la requête.
  • Ces 2 techniques s'appliquent à des requêtes Action (UPDATE, INSERT, DELETE), mais pas à des requêtes Sélection (SELECT), qui elles renvoient un nombre de lignes à analyser.
    Si vous devez manipuler le résultat d'un SELECT, RunSQL n'est pas la commande appropriée ! Passez plutôt par des Recordsets DAO ou ADO.

- page 1 de 2