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 :

Recordset, incompatibilité de type


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Octobre 2009
    Messages : 127
    Par défaut Recordset, incompatibilité de type + probleme dans boucle
    Bonjour à tous,

    J'ai bel et bien effectué une recherche sur le forum / google OUI OUI, mais étant complètement débutant et ne comprenant pas encore bien les recordset je n'arrive pas vraiment a remanier mon code ...

    J'obtient donc le message d'erreur " INCOMPATIBILIE DE TYPE " sur la ligne :

    " Set rst_mois = Db.OpenRecordset(str_requete_stock) " du code suivant :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Public Sub calcul_nbr_mois()
     
    Dim date1 As Date, date2 As Date
    Dim varNbreMois As Integer
    Dim rst_mois As New ADODB.Recordset
    Dim i As Integer
    Dim DateA As Integer
    Dim DateB As Integer
    Dim taBdd As Database
    Dim date1_i As Date, date2_i As Date
    Dim j As Integer
    Dim monTableau() As String
    Dim str_requete_stock As String
     
    str_requete_stock = " SELECT Val(Mid([Transmission Date],7,4) & Mid([Transmission Date],4,2))AS AnMois,Count(FAC_ACTION.ID) AS NbrID,Sum(IIf([Clos] Is Null,Date()-[Transmission Date],[Clos]-[Transmission Date])) AS DMT FROM FAC_ACTION INNER JOIN FAC_SICLOP ON FAC_ACTION.ID= FAC_SICLOP.ID WHERE ((FAC_SICLOP.[Transmission Date]) <  #" & date1_i & "#) AND (((FAC_ACTION.[Clos]) >  #" & date1_i & "#) OR (FAC_ACTION.[Clos]) IS NULL) GROUP BY (Val(Mid([Transmission Date],7,4) & Mid([Transmission Date],4,2)))"
    Set Db = Application.CurrentDb
     
     
    date1 = Forms![f_Reporting]![DateA]
    date2 = Forms![f_Reporting]![DateB]
     
    MsgBox "Durée en nombre de mois : " & DateDiff("m", date1, date2)
     
    varNbreMois = DateDiff("m", date1, date2)
     
     
     
    For i = 0 To varNbreMois
        date1_i = DateAdd("m", i, date1)
     
    Set rst_mois = Db.OpenRecordset(str_requete_stock)
     
    j = 0
    Next i
    ReDim monTableau(rst_requete_stock.RecordCount)
     
    Do While Not rst_requete_stock.EOF
             monTableau(i) = rst_requete_stock.Fields("NbrID") '
     
              rst_requete_stock.MoveNext '
             j = j + 1
    Loop
     
     
     
     
     
    End Sub
    Merci bien à tous !

  2. #2
    Membre Expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Par défaut
    Bonjour,


    Attention à ne pas confondre les syntaxes ADO et DAO...

    Tu as déclaré un recordset de type ADO, mais tu as utilisé la méthode OpenRecordset d'un objet Database, ce qui produit un recordset DAO...

    Pour plus d'explications, je te conseille de faire un tour du coté de la faq et tutos :
    http://warin.developpez.com/access/dao/?page=partie_1
    http://drq.developpez.com/vb/tutoriels/ADO/
    http://vb.developpez.com/bidou/recordset-ado/
    ...

    Au vu de ton code, je te conseille de t'orienter vers DAO.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Octobre 2009
    Messages : 127
    Par défaut
    Bonjour mout,

    Merci de ta réponse aussi rapide ! Je vais de ce pas lire les quelques liens ;-)

    Merci pour le conseil

    Cordialement,

    PS : Pour le dernier lien j'ai déjà tout lus je m'étais même fais un fichier word avec l'important en même tant .. Mais trop théorique

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Octobre 2009
    Messages : 127
    Par défaut
    Bonjour à tous !

    Suite à la lecture de tous ces documents je n'ai pas réellement avancé, j'ai en revanche trouvé quelques brides de réponses par-ci par-là j'en suis donc venu à modifié mon code pour obtenir ça :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Public Sub calcul_nbr_mois()
     
    Dim date1 As Date, date2 As Date
    Dim varNbreMois As Integer
    Dim rst_mois As New ADODB.Recordset
    Dim i As Integer
    Dim DateA As Integer
    Dim DateB As Integer
    Dim taBdd As Database
    Dim date1_i As Date, date2_i As Date
    Dim j As Integer
    Dim monTableau() As String
    Dim str_requete_stock As String
     
    str_requete_stock = " SELECT Val(Mid([Transmission Date],7,4) & Mid([Transmission Date],4,2))AS AnMois,Count(FAC_ACTION.ID) AS NbrID,Sum(IIf([Clos] Is Null,Date()-[Transmission Date],[Clos]-[Transmission Date])) AS DMT FROM FAC_ACTION INNER JOIN FAC_SICLOP ON FAC_ACTION.ID= FAC_SICLOP.ID WHERE ((FAC_SICLOP.[Transmission Date]) <  #" & date1_i & "#) AND (((FAC_ACTION.[Clos]) >  #" & date1_i & "#) OR (FAC_ACTION.[Clos]) IS NULL) GROUP BY (Val(Mid([Transmission Date],7,4) & Mid([Transmission Date],4,2)))"
    Set Db = Application.CurrentDb
     
     
    date1 = Forms![f_Reporting]![DateA]
    date2 = Forms![f_Reporting]![DateB]
     
    MsgBox "Durée en nombre de mois : " & DateDiff("m", date1, date2)
     
    varNbreMois = DateDiff("m", date1, date2)
     
     
     
    For i = 0 To varNbreMois
        date1_i = DateAdd("m", i, date1)
     
    rst_mois.Open (str_requete_stock), CurrentProject.Connection
     
    j = 0
    Next i
    ReDim monTableau(rst_requete_stock.RecordCount)
     
    Do While Not rst_mois.EOF
             monTableau(i) = rst_mois.Fields("NbrID") 'Cette ligne permet de récupérer la case correspondante à la ligne parcourue et au nom de champs que tu aura mit
     
              rst_mois.MoveNext 'On passe à l'enregistrement suivant et on boucle
             j = j + 1
    Loop
     
     
     
     
    End Sub
    Seulement maintenant j'obtient l'erreur :
    " operation is not allowed when the object is open "

    sur cette ligne :

    " rst_mois.Open (str_requete_stock), CurrentProject.Connection "

    En pleine recherche sur google/forum mais pour le moment aucune solution même en essayant de bidouiller ...

    Cordialement,

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    en fait tu tentes de faire plusieurs fois un
    vu que la ligne apparait dans la boucle For. Or ceci n'est pas possible. Une fois le recordset ouvert, la seule facon d'y accéder de nouveau est de passer par la fonction close du recordset pour le libérer et tenter de l'ouvrir de nouveau.

    il faut donc sortir la ligne de la boucle For et ca devrait aller mieux
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    Exact,

    J'ajouterai également:
    rst_mois.Close
    juste avant end sub

Discussions similaires

  1. Incompatibilité de type recordset
    Par tanguy2844 dans le forum VBA Access
    Réponses: 15
    Dernier message: 07/02/2014, 19h41
  2. [AC-2010] Incompatibilité de type avec recordset
    Par docjo dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/04/2012, 20h59
  3. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  4. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 14h54
  5. [Recordset] Incompatibilté de type avec une requête
    Par lbourlet dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 15h52

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