IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Précisions sur les recordset DAO [Tutoriel]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Précisions sur les recordset DAO
    bonjour,

    pour l'insant je suis un "utilisateur graphique" d'Access
    ya des taches qui peuvent etre surement plus simple en vba
    mais je n'y connais rien
    pour lire une table j'ai essaye ca mais ca marche pas
    vous pouvez m'aider svp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub liretable()
     
    Dim rs As Recordset
    Dim t_temp As TableDef
    Set t_temp = "test_table"
    For Each rs In t_temp
        Debug.Print rs.Fields(champ1)
    Next rs
     end Sub
    c'est a mon avis le truc a faire en commencant
    mais je n'ai rien trouve de tel ds tous els exemple de code poste sur lr forum et ds les tutoriaux

    merci de votre aide

    Igricheff

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour, le plus simple serait de commencer par un tutoriel DAO.


    Là, ce que tu souhaites, c'est lire les enregistrements d'une table. Or un recordset est un jeu d'enregistrement. Donc, tu mélange un peu toutes les notions, de plus, il te faut ajouter une référence Microsoft DAO à ton prjet. Dans VBA, outils, références


    Je vais tenter de t'expliquer certaines de ces notions :

    I Qu’est ce qu’un objet Recordset

    Un objet Recordset est un ensemble de données regroupées dans un tableau en ligne et colonne. Comme dans une table, une ligne est appelée enregistrement, une colonne est appelée champ et l’intersection d’une ligne et d’une colonne est appelée valeur.

    Un objet Recordset peut donc être assimilé à une table temporaire chargée en mémoire dont les données peuvent provenir d’une ou plusieurs tables, voire d’une ou plusieurs base de données. On aborde donc ici la notion de curseurs.

    II Une base de donnée ACCESS ?

    Une base de données peut être découpées en plusieurs couches. Chaque couche est appelée une collection. Ainsi, la collection Recordsets regroupe l’ensemble des recordsets.

    Chaque élément d’une collection est identifié par son nom ou le nom de sa collection suivi de son rang dans la collection. Ainsi si le premier recordset s’appelle "Liste des clients" alors on pourra accéder à celui ci par [liste des clients] ou bien Recordsets(0).

    1.Workspaces

    Littéralement, « espace de travail », il regroupe l’ensemble des espaces de travails des systèmes de base de données. Cette notion a peu d’importance et on ne gardera en mémoire que l’espace de travail courant : Workspaces(0).

    2.Databases
    C’est l’ensemble des bases de données contenues dans un même Workspace. On y accède par leur chemin. A noter que l’on accède à la base de donnée en cours par la méthode CurrentDb.

    3.Recordsets

    C’est l’ensemble des objets Recordset contenues dans une même base de données

    III La méthode Set
    La méthode Set permet d’affecter une valeur à une variable et plus particulièrement de définir chacun des objets de chacune des collections.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntaxe : Set Variable = [i]Valeur [/i]
    IV Ouvrir une base de données
    Il serait facile de penser que le fait de travailler sur une base de données permet de dire qu’elle est ouverte. C’est faux. Même si la base de données courante est ouverte en Access, il faut la redéfinir au niveau du client Visual Basic.

    Pour ce faire, on utilise la méthode Set et la méthode opendatabase



    1.Ouvrir une base quelconque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set mabase = Workspaces(0).opendatabase(Chemin)
    Où mabase est le nom à donner à la base de données. Ce nom peut être différent du
    véritable nom de la base de données. Ce n’est qu’un Alias. Et Chemin est le chemin complet de la base de données. Y compris le lecteur.

    A noter que l’on ouvre la base de données dans l’espace de travail Workspaces.

    2.Ouvrir la base de données en cours

    V Ouvrir un objet Recordset

    Etant donné que l’on ouvre le Recordset dans la base de données définie juste au-dessus, on utilise donc la méthode OpenRecordset dans mabase. On utilise aussi la méthode Set. La méthode OpenRecordset accepte plusieurs arguments facultatifs dont on ne tiendra pas compte car le plus performant est le mode OpenDBDynaset (Feuille de réponse dynamique) qui est celui définit par défaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MonRecordset = mabase.openrecordset(SQL)

    Où SQL est une requête SQL classique qui peut aussi intégrer les fonctions de sélection SQL Access (comme par exemple la fonction Mois). Toutefois, on peut utiliser l’objet Recordset en tant que table entière et dans ce cas, on remplacera la requête par le nom de la table concernée.

    Important : Le paramètre SQL est une chaîne de caractère. Celle ci doit donc être soit le nom d’une variable contenant une chaîne de caractère valide, soit la requête SQL en toute lettre mais entre guillemet.

    VI Accès aux données

    On accède à une valeur d’un champs de l’enregistrement par :

    Nom ![champ]

    Où Nom est le nom de l’objet Recordset et Champ, le nom du champ dans l’objet Recordset.

    Important : Cette méthode renvoie la valeur du champ pour l’enregistrement en cours !

    VII Déplacement entre enregistrements

    On utilise pour cela les méthode MoveFirst, MoveNext, MovePrevious, MoveLast.
    (Premier, suivant, précédent, Dernier).

    Syntaxe : VIII Ajout d’enregistrements

    On utilise la méthode AddNew. La méthode AddNew crée un nouvel enregistrement vierge qui devient l’enregistrement courant. Il faut donc saisir ensuite les valeurs et mettre à jour l’objet Recordset.

    Syntaxe : IX Mise à jour

    On utilise la méthode Update.

    Syntaxe : X Modifier un enregistrement

    On utilise la méthode Edit qui permet de modifier l’enregistrement. On affecte ensuite les nouvelles valeurs dans l’enregistrement courant sans oublier de mettre l’objet Recordset à jour à la fin des saisies.

    Syntaxe : XI Supprimer un enregistrement
    On utilise la méthode Delete.

    Syntaxe :
    XII Les propriétés EOF et BOF

    La propriété EOF est vraie lorsque l’enregistrement en cours est le dernier ; à l’inverse la propriété BOF est vraie lorsque l’enregistrement en cours et le premier.

    Syntaxe : XIV Exemple Récapitulatif

    On considère la table client(N° Client,Nom,Prénom) dans la base de donnée en cours.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    ‘Déclaration des variables
    Dim MonSql As String
    Dim Db as dao.database
    Dim MaTable as DAO.recordset
    'Ouverture de la base de données
    Set DB=CurrentDB
     
    'Création d’une requête SQL en mode Texte qui sélectionne le client dont le numéro est saisi dans l’objet texte1
    MonSql = "SELECT * FROM Client WHERE [N° Client]=" & texte1
     
    'Ouverture du Recordset
    Set MaTable = DB.OpenRecordset(MonSql)
     
    'Modifier le nom
    MaTable.Edit
    MaTable ![Nom] = "PAUL"
    MaTable.Update
     
    'Ajouter un enregistrement
    Matable.AddNew
    Matable![N° Client] = 12
    Matable![Nom] = "DUJARDIN"
    Matable![Prénom] = "Jean"
    Matable.Update
    MaTable.close

    Bon courage

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    merci

    oulalala je me rends compte que je suis loin du compte
    mais avec un peu de l'huile de coude ca devrait passer
    deja j'ai transformer mon module en ce qui suit et ca tourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Sub liretable()
     
    Dim DB As Database
    Dim matable As Recordset
    Set DB = CurrentDb
    Set matable = DB.OpenRecordset("test_table")
     
    While (Not matable.EOF)
        Debug.Print matable![champ1]
        matable.MoveNext
    Wend
     
     
    End Sub
    maintenant il faut qu je remplace mon debug.print par du sql
    suite au prochaine episode

    encore merci
    bravo pour les explications
    un petit lien vers un tito dao serait le bien venu


    Igricheff

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Précisions sur les générateurs
    Par GnouDream dans le forum SQL
    Réponses: 2
    Dernier message: 02/08/2006, 08h59
  2. Précision sur les makefile
    Par vinzzzz dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 09/05/2006, 20h40
  3. [HTML][USEMAP] Précision sur les zones réactives
    Par cladsam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/02/2006, 08h20
  4. Précisions sur les listes
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2006, 21h20
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo