Le grenier Access

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

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...

mardi 8 décembre 2009

Lister les pièces jointes Access 2007 en VBA

Dans l'article Gérer les pièces jointes avec Access 2007, vous avez vu comment stocker des pièces jointes dans un fichier Access 2007 au format ACCDB. Voici comment obtenir la liste de ces pièces jointes en VBA.

Lire la suite...

lundi 29 septembre 2008

Extraire seulement les premières lignes d'une requête

Est-il possible à l'aide d'une requête de ne récupérer que 30 (ou n'importe quel nombre) enregistrements d'une table ?

Le principe

Une liste déroulante appelée "Premières valeurs" est disponible en mode Création de requête, elle  permet d'extraire seulement x enregistrements (ou x% de tous les enregistrements). Vous pouvez choisir l'une des valeurs proposées, ou taper une valeur manuellement.

Sur Access 2007

  1. Ouvrez votre requête en mode Création.
  2. Sous l'onglet Créer du ruban, la liste est précédée du mot "Renvoyer".

  • Combinée à un tri croissant ou décroissant, cette option permet de sélectionner les x premiers ou derniers enregistrements.
  • Pour sélectionner x lignes au hasard, il faut en plus trier la requête sur un critère aléatoire.

Sur Access 2003 et inférieur

  1. Ouvrez votre requête en mode Création.
  2. La liste "Premières valeurs" se trouve à droite de l'icône "Sigma".

En SQL

En SQL, vous obtenez la même chose grâce à la directive TOP.
Pour afficher les 7 premiers acteurs américains (sans ordre précis), par exemple, vous écririez :
SELECT TOP 7
FROM [tbl Acteurs]
WHERE [Code Pays] = 'US';

jeudi 18 septembre 2008

MDB Viewer Plus

MDB Viewer est un logiciel autonome et gratuit qui permet de consulter le contenu d'une base de données Access ; une sorte de visionneuse Access, donc !


  • Système d'exploitation : Windows XP / Windows Vista
  • Licence : Freeware
  • Version testée : 1.50
  • Taille : 950 Ko (version Zip)
  • Site officiel : www.alexnolan.net

Lire la suite...

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...

mercredi 25 juin 2008

Manipuler les colonnes d'une liste

Dans un formulaire, j'ai une liste (déroulante ou non). Comment obtenir des informations sur la ligne sélectionnée ?

La liste

Voici un formulaire contenant une liste d'acteurs.
Lorsqu'on clique sur le bouton Afficher, on obtient une boîte avec certaines informations données par la liste.

La liste est un objet Zone de liste, ou ListBox ; on aurait pu aussi utiliser un objet Liste déroulante, ou ComboBox (le principe est le même). La liste se nomme lstActeurs, et elle a été construite via l'Assistant Zone de liste. Pour information, la requête SQL qui l'alimente est :

SELECT [tbl Acteurs].[Numéro Acteur],
  [tbl Acteurs].[Nom Acteur],
  [tbl Acteurs].[Prénom Acteur],
  [tbl Acteurs].Sexe
FROM [tbl Acteurs]
ORDER BY [tbl Acteurs].[Nom Acteur],
  [tbl Acteurs].[Prénom Acteur];

Toujours pour info, voici quelques autres propriétés typiques de la liste :

  • Nom = lstActeurs
  • Nbre colonnes = 4
  • En-têtes colonnes = Non
  • Largeurs colonnes = 0cm;3cm;3.5cm;1cm
    La première colonne - [Numéro Acteur] - a une taille de 0 cm, elle est donc masquée.
  • Origine source = Table/Requête
  • Contenu = SELECT ... (la requête SQL ci-dessus)
  • Colonne liée = 1
    Ceci implique que, lorsqu'on sélectionne un acteur, la liste prend pour valeur le numéro de cet acteur (soit le 1er champ de la requête SQL).

Le bouton

Le bouton placé sous la liste affiche les informations sélectionnées dans la liste. Voici le code de son événement Sur clic :

Private Sub btnAffichage_Click()
' Vérifier si un acteur a bien été sélectionné
If Me.lstActeurs.ListIndex = -1 Then
  MsgBox "Aucune ligne n'a été sélectionnée !", vbInformation
  Exit Sub
End If

' Afficher quelques infos sur l'acteur
MsgBox "Ligne sélectionnée : " & Me.lstActeurs.ListIndex & vbCrLf _
  & "Nombre de lignes : " & Me.lstActeurs.ListCount & vbCrLf _
  & "Numéro de l'acteur : " & Me.lstActeurs.Column(0) & vbCrLf _
  & "Nom de l'acteur : " & Me.lstActeurs.Column(1) & vbCrLf _
  & "Prénom de l'acteur : " & Me.lstActeurs.Column(2)
End Sub

Un peu d'explications

  • Si aucune ligne n'est sélectionnée, la propriété ListIndex de la liste vaut -1 (on en profite ici pour sortir de la procédure).
    Sinon, elle donne le numéro de la ligne sélectionnée, sachant que la première ligne est numérotée 0.
  • La propriété ListCount, elle, donne le nombre de lignes dans la liste. Vous avez également une propriété ColumnCount qui donne... le nombre de colonnes (dingue, non ?).
  • La propriété Column(x) renvoie la valeur de la colonne x, pour la ligne sélectionnée, sachant que x démarre également à 0. Donc lstActeurs.Column(0) donne le numéro de l'acteur sélectionné (même si cette colonne est masquée). Et ainsi de suite...
  • Column() peut s'écrire également avec 2 paramètres au lieu d'un seul. Dans ce cas, le premier paramètre est toujours le numéro de colonne, le second est le numéro de la ligne. Donc l'instruction MsgBox Me.lstActeurs.Column(1, 3) afficherait le nom (2ème colonne) de l'acteur numéro 4 dans la liste.
  • Vous pouvez en fait simplifier Me.lstActeurs.Column(0) en écrivant seulement Me.lstActeurs. Vous obtiendrez la même valeur, du fait que la première colonne - donc la colonne 0 ! - donne sa valeur à la liste (rappelez-vous de la propriété Colonne liée, plus haut).
Rappel
La constante vbCrLf provoque un retour à la ligne dans la boîte MsgBox.

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