none
RowSource d'un etat VBA qui ne marche pas RRS feed

  • Question

  • Bonjour,

    j'ai le code suivant qui me permet de parcourir  un état précis le code ci dessous plante ici :

     strSQL = Reports("MyReport").RowSource

    et  me renvoie l'erreur: 2465. Comment définir mon recordset basé sur ce report?

      Private Sub Report_Open(Cancel As Integer)
      
    Dim strSQL As String
    Dim rsData, rst As DAO.Recordset
    
    strSQL = Reports("MyReport").Recordset
    Set rst = CurrentDb.OpenRecordset(strSQL, CurrentProject.Connection, adOpenKeyset)
    
    
    Do While rst.EOF = False
    
      Debug.Print rst.Fields(1).Name
      rsData.MoveNext
    
    Loop
    Merci


    • Modifié kesamba mardi 14 février 2012 23:11
    • Déplacé Ciprian Duduiala mercredi 15 février 2012 08:04 question de VBA (Origine :Visual Basic)
    • Déplacé ArgyronetModerator vendredi 17 février 2012 15:14 947b0296-ec0a-4c25-97fb-d382f0da2cc3 (Origine :Développement VBA)
    mardi 14 février 2012 23:05

Réponses

  • C'est normal. Tu montes une usine à gaz pour résoudre un faux problème.

    Crée un formulaire avec 2 zone de texte pour remplir tes 2 paramètres (mois et nom du client).

    Puis 1 bouton de commande pour lancer ton report en utilisant simplement la clause Where de la commande openreport (voir l'aide pour les détails de la syntaxe.)

    Le contenu de cette clause est une clause Where valide de SQL.

    Dans ce cas plus de requête paramétrée. Tu mets en source la requête sans paramètre et la clause Where de la commande se chargera automatiquement du reste.

    Pour l'appel :

    docmd.Openreport "toto",,,"[Nom]='" & me.texteNom & "' AND [Mois]=" & me.texteMois

    toto c'est le nom du report

    Nom c'est le nom du champ contenant le nom du client

    Mois c'est le nom du champ contenant le mois

    texteNom c'est le nom du controle du formulaire où l'on saisie le nom du client.

    texteMois c'est le nom du ...................................................... mois.

    On part du principe que le mois est saisie en numérique. Pour du texte ne pas omettre de rajouter les cotes.

    Cordialement,


    Visitez mes sites : http://2gm.free.fr | http://loufab.developpez.com

    • Marqué comme réponse kesamba mercredi 22 février 2012 18:57
    lundi 20 février 2012 17:40

Toutes les réponses

  • Bonjour,

    Un recordset ne renvoit pas une string mais un objet Recordset.

    Donc

    strSQL = Reports("MyReport").Recordset

    ça ne peut pas fonctionner.

     Reports("MyReport")

    Est-il le report courant ? Dans ce cas utiliser Me. La propriété qui contient la source est RecordSource.

    strSQL = me.recordsource

    Je doute que tu ailles quelque part avec ça :

    Set rst = CurrentDb.OpenRecordset(strSQL, CurrentProject.Connection, adOpenKeyset)

    Ceci est en trop :

    CurrentProject.Connection, adOpenKeyset

    Enfin :

      Debug.Print rst.Fields(1).Name
      rsData.MoveNext

    Qui est rsData ? un recordset fantôme ou le reste d'un copier/coller.

    Bref !

    Il y a un tuto sur developpez concernant l'utilisation de DAO. Je pense (et même persuadé) que tu devrais le lire.

    Dans tous les cas ce code peut-être écrit simplement comme ceci :

    dim rst as dao.Recordset
    Set rst = currentdb.openrecordset(me.recordsource,dbopensnapshot)
    
    Do While not rst.EOF
      Debug.Print rst.Fields(1).Name
      rst.MoveNext
    Loop
    rst.close
    set rst = nothing

    Cordialement,


    Visitez mes sites : http://2gm.free.fr | http://loufab.developpez.com



    • Modifié loufab mercredi 15 février 2012 13:24
    mercredi 15 février 2012 13:22
  • la source de mon état est une requete parametrée qui permet de  limiter l'ensemble d'enregistrements qu'il renvoie.

    à l'ouverture de l' etat deux boîtes de dialogue s'affichent   demandant  le mois et le nom du client sur lequel l'état doit porter. Lorsque j' entre un mois et  nom du client , Access me renvoie l'erreur suivante.

    erreur 3061 trop peu de paramètres. 2 attendu.

    comment faire pour remedier à cette erreur

    merci

    mercredi 15 février 2012 20:22
  • C'est normal. Tu montes une usine à gaz pour résoudre un faux problème.

    Crée un formulaire avec 2 zone de texte pour remplir tes 2 paramètres (mois et nom du client).

    Puis 1 bouton de commande pour lancer ton report en utilisant simplement la clause Where de la commande openreport (voir l'aide pour les détails de la syntaxe.)

    Le contenu de cette clause est une clause Where valide de SQL.

    Dans ce cas plus de requête paramétrée. Tu mets en source la requête sans paramètre et la clause Where de la commande se chargera automatiquement du reste.

    Pour l'appel :

    docmd.Openreport "toto",,,"[Nom]='" & me.texteNom & "' AND [Mois]=" & me.texteMois

    toto c'est le nom du report

    Nom c'est le nom du champ contenant le nom du client

    Mois c'est le nom du champ contenant le mois

    texteNom c'est le nom du controle du formulaire où l'on saisie le nom du client.

    texteMois c'est le nom du ...................................................... mois.

    On part du principe que le mois est saisie en numérique. Pour du texte ne pas omettre de rajouter les cotes.

    Cordialement,


    Visitez mes sites : http://2gm.free.fr | http://loufab.developpez.com

    • Marqué comme réponse kesamba mercredi 22 février 2012 18:57
    lundi 20 février 2012 17:40
  • Merci.
    mercredi 22 février 2012 18:57