TableDef

TableDef - VB/VBA/VBS - Programmation

Marsh Posté le 30-06-2005 à 16:35:11    

Salut, je veux pas faire un truc dur mais access à décider de me faire ch.... :fou:  
Je débute en access mais je connais d'autres langage.
 
Je voudrais juste récupérer les valeurs contenu dans une table mais j'y arrive pas.
Normalement avec un truc de genre:
 
Dim T As DAO.TableDef, F As Fields
Dim rs As DAO.Recordset
 
    Set T = CurrentDb.TableDefs("valeur_point" )
    rs = T.OpenRecordset()
     
    F = rs.Fields("valeur" )
     
    MsgBox (rs(0))
 
et là je me prend "Utilisation incorrect de la propriété" à cause du openrecordset je croit. :??:  
Merci beaucoup si quelqu'un pourrait m'aider

Reply

Marsh Posté le 30-06-2005 à 16:35:11   

Reply

Marsh Posté le 30-06-2005 à 16:40:15    

ce serait pas F as Field ?
perso j'utilise ADO :
 
Dim rst as ADODB.Recordset
 
set rst = new ADODB.Recordset
 
rst.open "matable",CurrentProject.Connection
rst.movefirst
msgbox rst!nomduchamp
ou msgbox rst("nomduchamp" )
ou msgbox rst(0)

Reply

Marsh Posté le 30-06-2005 à 20:53:38    

Bonjour,
 
Essaye ceci :
 
Dim rs As DAO.Recordset
     
Set rs = CurrentDb.OpenRecordset("valeur_point", dbOpenTable)
     
Do While Not rs.EOF
   MsgBox rs!valeur
   rs.MoveNext
Loop
 
rs.Close
 
 
pelw


Message édité par pelw le 30-06-2005 à 21:01:16
Reply

Marsh Posté le 01-07-2005 à 08:34:53    

merci je vais tester çà de suite. Sinon oui c'est Field que je voualis mettre et pas fields.

Reply

Marsh Posté le 01-07-2005 à 08:52:37    

je viens d'essayer ton code pelw çà marche merci. Vous pouvez m'expliquer aussi à koi sert "set" en vba ? par rapport à un autre langage si vous en connaisser d'autre.  
Une dernière question aussi, comment on peut retrouver l'indice en cours lorsque l'on parcours le recordset ?
Merci


Message édité par cole le 01-07-2005 à 08:59:49
Reply

Marsh Posté le 01-07-2005 à 10:14:57    

Bonjour,
 
L'instruction Set sert à attribuer une référence d'objet à une variable. C'est ce qu'on appelle "instancier un objet".
 
En ce qui concerne l'indice en cours du recordset, on peut utiliser la propriété AbsolutePosition. Dans ton cas, il faut modifier légèrement l'instruction de constitution du recordset :
 
Dim rs As DAO.Recordset
 
Set rs = CurrentDb.OpenRecordset("valeur_point", dbOpenDynaset)
       
Do While Not rs.EOF
   MsgBox "Indice en cours: " & rs.AbsolutePosition + 1
   rs.MoveNext
Loop
 
rs.Close
 
 
pelw

Reply

Marsh Posté le 01-07-2005 à 11:05:50    

Merci beaucoup. Je peut te demander un autre truc ;-)
Sur un formulaire j'ai les enregistrement d'une table chantier qui s'affiche. Par chantier y a une date de début, fin, les travaux à faire ... en fait les travaux sont en points, y a une table avec les trvaux et leur nombre de point. Le truc c'est que la valeur du point change. J'ai donc fait une table avec les valeurs de point avec les dates. Sur mon formulaire j'ai donc aussi une case point qui affiche le nombre de point du chantier, une case pour la valeur du point et une case pour le multiplcation des deux(donc la somme à payer en euros). J'arrive pas à mettre la valeur du point pour chaque enregistrement. j'ai mis un bouton pour chaque ligne qui utilise la fonction pour récupérer la valeur du point qui est celle-ci
Private Sub Commande29_Click()
    Dim rs As DAO.Recordset
    Dim ddeb, dfin As Date
    Dim val As Double
     
    Set rs = CurrentDb.OpenRecordset("valeur_point", dbOpenTable)
       
    Do While Not rs.EOF
        If (rs!date_debut < Forms!date_fin) And (rs!date_fin > date_fin) Then
            'MsgBox rs!Valeur
            val = rs!Valeur
        End If
        rs.MoveNext
    Loop
 
    rs.Close
    valeur_point.Value = val
End Sub
là, quand je clique sur un bouton, la valeur récupérer est la bonne mais elle s'affiche sur les cases de valeur de point de chaque enregistrement, de plus il compile pas sur "date_fin".
 
Merci beaucoup

Reply

Marsh Posté le 07-07-2005 à 11:28:34    

j'arrive pas à comprendre comment çà fonctionne les recordset. le code suivant fonctionne pas alors que la requête retourne 11 ligne de lcient :-(
Set Qry = CurrentDb.CreateQueryDef("Requete_Temporaire", "SELECT DISTINCTROW general.client FROM [general] GROUP BY general.client" )
    Set Rsclient = Qry.OpenRecordset
     
    Rsclient.MoveFirst
     
    For i = 0 To Rsclient.RecordCount  'ligne
        For j = 0 To 13 'colonne
        'remplissage de la prmière colonne
            If j = 0 Then
                If i = 0 Then
                    Cells(i + 5, j + 5).Value = "Client"
                End If
                Cells(i + 5, j + 5).Value = Rsclient(0)
            End If
             
            Rsclient.MoveNext
       Next j
    Next i

Reply

Marsh Posté le 07-07-2005 à 11:31:26    

ah oui, je copie des donnée de recordset dans une feuille excel. d'ou les "Cells" ... l'erreur est "aucun enregistrement en cours" sur la ligne rsclient.movenext

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed