Access VBA et recordset

RiriQC Messages postés 7 Statut Membre -  
RiriQC Messages postés 7 Statut Membre -
Bonjour,

Je me lance dans le VBA et après moultes tentatives me voila bloqué et en quête d'assistance...

Je souhaiterais à l'activation d'un formulaire que celui-ci aille chercher dans une table (non reliée au formulaire) appelée Diffusion, la présence ou non de valeurs (codes des services en diffusion) et s'il les trouvent de m'activer la case à cocher correspondante.

Private Sub Form_Current()
SELECT Diffusion.Indexdoc, Diffusion.CodeService FROM Diffusion WHERE (((Diffusion.CodeService)=1))
If (((Diffusion.Indexdoc)=[Forms]![Documents].[Indexdoc]) AND ((Diffusion.CodeService)=1)) Then
Cocher256 = True
Else
Cocher256 = False
End If
End Sub

Apparemment il faut que je passe par le recordset pour faire quelque chose de ce genre, j'ai fait quelques tests pour l'instant infructeux.

Merci de m'éclairer de vos lumières !

11 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Ce code est fait pour ce connecter a toutes les bases access
    Private Sub Form_Current()
      'Outils, References, ajouter Microsoft DAO 3.6 object library
      Set conn = CreateObject("ADODB.Connection")
      Set rs = CreateObject("ADODB.recordset")
      
      Chemin_Base = "C:\........\nomdelabase.mdb ou ACCDB"
    
      'chaine de connexion: enlever ,*.accdb si pas 2007 et plus
      connstring = "DRIVER={Microsoft Access Driver (*.mdb,*.accdb)}; DBQ=" & Chemin_Base
      
      'Connexion a la base
      conn.Open connstring
      
      'Requete SQL
      SQL = "SELECT Indexdoc, CodeService FROM Diffusion WHERE CodeService=1"
      'Ouverture du recordset
      rs.Open SQL, conn, 3, 3
      
      'cela suppose qu'il n'y a qu'un seul enregistrement!!!!!!!!
      If (Diffusion.Indexdoc = [Forms]![Documents].[Indexdoc]) And _
                                  (Diffusion.CodeService = 1) Then
        Cocher256 = True
      Else
        Cocher256 = False
      End If
      rs.Close
    
    End Sub
    


    Bon courage
    1
  2. RiriQC Messages postés 7 Statut Membre
     
    Merci pour les infos de connexion. J'ai cependant un problème d'ODBC (Source de données introuvable et nom de pilote non spécifié).

    Y a t-il d'autres moyens d'ouvrir un recordset ?
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Vous pouvez montrer ce que vous avez ecrit comme code??

    A+
    0
  4. RiriQC Messages postés 7 Statut Membre
     
    Hello
    Voila le code qui génère le message d'erreur ODBC
    Je viens également de m'acheter un livre sur le VBA histoire de mieux comprendre ce que je fais...... Merci encore pour votre assistance

    Private Sub Form_Current()
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.recordset")
    Chemin_Base = " Q:\Gestion documentaire\Gestion doc.accdb "
    connstring = "DRIVER={Microsoft Access Driver (*.mdb,*.accdb)}; DBQ=" & Chemin_Base
    conn.Open connstring
    SQL = "SELECT Indexdoc, CodeService FROM Diffusion WHERE CodeService=1"
    rs.Open SQL, conn, 3, 3
    If (Diffusion.Indexdoc = [Forms]![Documents].[Indexdoc]) And (Diffusion.CodeService = 1) Then
    Cocher256 = True
    Else
    Cocher256 = False
    End If
    rs.Close
    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    En reportant votre test j'ai oublie de le modifier jusqu'au bout.
    code modifie:

    If (rs![Indexdoc] = [Forms]![Documents].[Indexdoc]) And (rs![CodeService]= 1) Then
    Cocher256 = True
    Else
    Cocher256 = False
    end if

    A+
    0
  7. RiriQC Messages postés 7 Statut Membre
     
    oui j'avais fait un test en remplaçant le nom de la table par le recordset, ça me paraissait en effet plus cohérent mais là j'ai un problème d'ODBC. Merci encore
    0
  8. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    apres avoir acquite le message d'erreur, sur quelle ligne le programme s'arret??
    0
    1. RiriQC Messages postés 7 Statut Membre
       
      sur conn.Open connstring , l'appel ODBC échoue et me renvoie le message : (Source de données introuvable et nom de pilote non spécifié).
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Essayez avec le code de 17:25
      0
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Plus simple, vu que vous restez sur la meme base.

    Private Sub Form_Current()
      'Reference a ajouter: microsoft DAO 3.6 object Library
      Dim rs As DAO.Recordset
      Set rs = CurrentDb().OpenRecordset("SELECT Indexdoc, CodeService FROM Diffusion WHERE CodeService=1;")
      'cela suppose qu'il n'y a qu'un seul enregistrement!!!!!!!!
      If (rs![Indexdoc] = [Forms]![Documents].[Indexdoc]) And _
                                  (rs![CodeService] = 1) Then
        Cocher256 = True
      Else
        Cocher256 = False
      End If
      rs.Close
    End Sub
    


    A+
    0
  10. RiriQC Messages postés 7 Statut Membre
     
    ça m'a l'air en effet plus simple...
    là il m'indique "impossible de mettre à jour recordset"

    je pense que ça vient du fait que mon champ Cocher256 est dans le formulaire et non dans le recordset
    J'ai remplaçé Cocher256 par [Forms]![Documents].[Cocher256] mais j'ai la même erreur !

    Merci de vous trainer un boulet comme moi....
    0
  11. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Dans votre code precedent:
    Chemin_Base = " Q:\Gestion documentaire\Gestion doc.accdb "

    Je viens de voir que dans le chemin de votre base il y a un espace devant et deriere et ca c'est pas bon!!!!!!!!!!!!!!!!

    Dernier code:

    Pour impossible..... Cocher256 n'a rien avoir avec.

    A+
    0
  12. RiriQC Messages postés 7 Statut Membre
     
    Merci pour tout ! je vais approfondir mes connaissances avant de me lancer dans la programmation, je n'ai pas les bases.

    Pour mon problème spécifique, je vais restructurer mes tables et écrire une ou deux macros.

    Cheers
    0