Le grenier Access

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

Mot clé - requête

Fil des billets - Fil des commentaires

jeudi 8 juillet 2010

Recherche de mot entier

Comment trouver un mot entier dans une requête Access ? Par exemple, dans une phrase comme "Bonjour, aujourd'hui, c'est le jour de Noël !", je souhaite vérifier si la phrase contient le mot "jour".

Un critère comme [Le champ] LIKE '*jour*' semble une bonne idée, mais le critère m'extrait les mots Bonjour, Aujourd'hui et Jour. Alors que je ne souhaite extraire que le mot Jour. Une phrase comme "Bonjour, c'est Noël" serait considérée comme valide, et je n'en veux pas. Comment faire ?

Lire la suite...

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

jeudi 2 avril 2009

Mise en forme dans un champ Mémo

Le saviez-vous ?

A partir d'Access 2007, les champs Mémo peuvent être mis en forme (avec par exemple du gras, de l'italique, des polices, des couleurs...). Pour utiliser cette possibilité :

  1. Ouvrez la table concernée en mode Création.
  2. Sélectionnez ou ajoutez un champ Mémo.
  3. Dans les propriétés du champ, réglez Format du texte sur "Texte enrichi" (par opposition à "Texte brut" qui est un champ Mémo simple).

Formater le texte

Une fois ce réglage fait :
  1. Enregistrez votre table.
  2. Passez en saisie.
  3. Tapez du texte dans le champ Mémo.
  4. Sélectionnez une partie de ce texte (une lettre, un mot, une phrase...).
    Une barre d'outils flottante apparaît, vous pouvez vous en servir pour appliquer votre mise en forme.

Info
Le réglage est hérité par les requêtes et les formulaires dérivés de la table. Autrement dit, la mise en forme sera également possible, automatiquement, sur le formulaire associé à la table.

mardi 10 mars 2009

Cumul dans Access

Comment calculer un cumul ligne à ligne dans Access ?

Lire la suite...

vendredi 6 mars 2009

Améliorer une requête paramétrée

Dans une requête, j'ai défini des paramètres du style : Entre [Montant minimum] et [Montant maximum]. Mais cela produit 2 boîtes de dialogue, qui ne sont pas personnalisables. Que faire ?

Solution

La solution consiste à passer par un formulaire, et à remplacer les critères paramétrés par des champs de ce formulaire. Il y a au moins 2 avantages :

  • Tous les paramètres à saisir se retrouvent sur une seule boîte (le formulaire), ce qui est plus ergonomique.
  • Un champ de formulaire peut être plus sophistiqué qu'une simple boîte de saisie : on peut imaginer des cases à cocher, des listes déroulantes, etc.
Voici comment procéder :
  1. Créez un formulaire, en mode Création par exemple.
  2. Placez 2 zones de texte sur ce formulaire.
  3. Nommez les zones respectivement txtMontantMin et txtMontantMax.
  4. Enregistrez le formulaire (nommez-le par exemple frm Paramètres).
  5. De retour à la requête, remplacez le critère par :
    Entre Forms![frm Paramètres]!txtMontantMin Et Forms![frm Paramètres]!txtMontantMax
  6. Pour finaliser tout ça, ajoutez sur le formulaire un bouton de commande.
    En première étape de l'Assistant Bouton de commande, choisissez la catégorie Divers et l'action Exécuter une requête, vous pourrez ensuite choisir la requête concernée.

Notes :

  • Access va traduire la mention Forms par [Formulaires]. Pas grave !
  • La requête ne marche que si le formulaire est ouvert en mode d'utilisation normale (et pas en mode Création).
  • Vous pouvez faire encore mieux en construisant un état à partir de la requête. Faites en sorte, dans ce cas, que votre bouton de commande ouvre l'état au lieu d'exécuter la requête. L'état s'ouvre, évalue la requête au démarrage, laquelle requête est filtrée via le formulaire. Magique non ?
  • Si le nombre de paramètres est important, et que vous souhaitez faire des tests plus approfondis ("si tel critère n'est pas rempli, alors..."), vous devriez plutôt jeter un oeil sur les instructions OpenForm et OpenReport.

vendredi 27 février 2009

Equivalent de la fonction Si() Excel

Le saviez-vous ?

Dans Access, l'équivalent du SI() d'Excel est la fonction VraiFaux() ou Iif().

  • Cette fonction peut-être utilisée par exemple dans les requêtes, formulaires, états (sous ses formes française ou anglaise).
  • Elle peut également être utilisée en SQL pur ou en VBA (sous sa forme anglaise uniquement).
Dans une requête Champ calculé:VraiFaux(condition;valeur_si_vrai;valeur_si_faux)

Pour plus de détails, consultez la page intitulée Calculer dans une requête.

Dans un formulaire ou un état =VraiFaux(condition; valeur_si_vrai; valeur_si_faux)
En VBA variable = Iif(condition, valeur_si_vrai, valeur_si_faux)
Astuce
Même dans les parties francophones de l'interface graphique d'Access, vous pouvez taper la fonction en anglais. Elle sera automatiquement traduite en français. Cependant, il faut utiliser le séparateur correct (le point-virgule pour les parties françaises, la virgule pour les parties anglaises).

jeudi 19 février 2009

Calculer un total de colonne

Dans une table, comment calculer le total d'une colonne (d'un champ) ?

Dans l'exemple ci-dessous, il s'agirait de totaliser la colonne nommée [La Durée], dans la table [tbl Durées]. Plusieurs méthodes sont envisageables, tout dépend du résultat souhaité et de l'endroit où l'utiliser.


Méthode 1 : requête de regroupement

  1. Créez une requête basée sur la table [tbl Durées].
  2. Dans la grille de requête, placez uniquement le champ [La Durée].
  3. Cliquez sur l'icône Opérations en haut de l'écran.
    Une ligne nommée également Opération doit apparaître dans la grille de requête.
  4. Dans la liste déroulante Opérations, sous le champ [La Durée], sélectionnez Somme.


  5. Exécutez la requête : le résultat apparaît (un peu synthétique : il n'y a que le chiffre voulu !).

Méthode 2 : état

  1. Créez une requête basée sur la table [tbl Durées].

  2. Dans le pied d'état, ajoutez le calcul : =somme([La Durée])
    (la procédure est détaillée dans la fiche Etats de regroupement.

Méthode 3 : fonction de domaine

  1. Dans un formulaire ou un état ouvert en mode Création, ajoutez une zone de texte .
  2. A l'intérieur de cette zone (ou dans sa propriété Source Contrôle, tapez le calcul suivant :
=DSum("[La Durée]"; "tbl Durées"; "")

Il est possible d'aménager toutes ces méthodes pour effectuer le calcul seulement sur une partie des enregistrements. Je vous laisse tester !

mardi 20 janvier 2009

Une méthode élégante de sélection

Dans une base Access, j'ai une table de clients. Je souhaiterais que l'utilisateur puisse consulter la liste des clients, et en sélectionner certains un par un (par des cases à cocher). Ceci afin d'enchaîner sur un traitement spécifique derrière... Comment faire ?

 

Lire la suite...

- page 1 de 2