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 :

Incompatibilité de type avec recordset [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut Incompatibilité de type avec recordset
    Bonjour à tous

    Je me sers d'un recordset qui parcoure une requete pour remplir un champ "creneau"

    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
     
    Dim RsPL As DAO.Recordset
    Dim LeSql As String
     
     
    ' Sélectionne les RDV de la date
    LeSql = "SELECT R_RendezVous.*" & _
    "FROM R_RendezVous " & _
    "WHERE (R_RendezVous.HoraireDebut < " & FormatDateUS(DateDebut + 5) & ") And (R_RendezVous.HoraireFin >" & FormatDateUS(DateDebut) & ") "
     
    Set RsPL = CurrentDb.OpenRecordset(LeSql, dbOpenForwardOnly)
     
       Do While Not (RsPL.EOF) ' on parcours les RDV
     
                If Not IsNull(RsPL!Chir1) Then
                    Forms!F_PlanningWeek!SF_PlanningWeek1.creneau = RsPL!Patient & " " & RsPL!DateNaissance & " " & RsPL!Materiel
     
       RsPL.MoveNext
       Loop
     
    ' libération
     
    RsPL.Close
    Set RsPL = Nothing
    J'ai une erreur d'exécution '13' incompatibilité de type en relation avec "Materiel" qui est un champ texte à liste de choix multiple étendue.
    Je dois convertir Materiel dans ma requête ?
    Par avance merci pour vos bons conseils.

  2. #2
    Membre chevronné
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    Bonjour

    Citation Envoyé par docjo Voir le message
    champ texte à liste de choix multiple étendue.
    Plus précisément quel est le type de ce champ ?

    Cordialement.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Ce ne sont que des champs textes et plus particulièrement "Materiel" qui est un champ texte à selection multiple étendue

  4. #4
    Membre chevronné
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    Citation Envoyé par docjo Voir le message
    Ce ne sont que des champs textes et plus particulièrement "Materiel" qui est un champ texte à selection multiple étendue
    Si vous faites dans visual basic, au moment de l'erreur, dans la fenêtre exécution

    Quel est le résultat ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    Citation Envoyé par docjo Voir le message
    Ce ne sont que des champs textes et plus particulièrement "Materiel" qui est un champ texte à selection multiple étendue
    Peut-être cette rubrique peut vous aider

    http://access.developpez.com/access2...=MultiValueVBA

    ou ici

    http://officesystemaccess.seneque.ne...multivalue.htm

    Cordialement

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Merci Pepito pour ces renseignements précieux. Si je comprends bien, un champ multivalué (c'est comme cela qu'il faut les appeler) se comporte comme un jeu d'enregistrement. Il faut donc l'appeler par un recordset dit "fils". Mais, les valeurs sont stockées dans le champ sous la forme "Valeur1;Valeur2".
    Dans mon exemple j'aimerai récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Nom Prenom Valeur1;Valeur2
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Nom Prenom
    Valeur1
    Valeur 2
    Je pense que cela va ressembler à cela

    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
     
     
    Dim RsPL As DAO.Recordset
    Dim RsCat As  DAO.Recordset
    Dim LeSql As String
     
     
    ' Sélectionne les RDV de la date
    LeSql = "SELECT R_RendezVous.*" & _
    "FROM R_RendezVous " & _
    "WHERE (R_RendezVous.HoraireDebut < " & FormatDateUS(DateDebut + 5) & ") And (R_RendezVous.HoraireFin >" & FormatDateUS(DateDebut) & ") "
     
    Set RsPL = CurrentDb.OpenRecordset(LeSql, dbOpenForwardOnly)
     
       Do While Not (RsPL.EOF) ' on parcours les RDV
            Set RsCat = RsPL!Materiel.Value 'instancier le jeu d'enregistrements enfant du champ Materiel de la Requete R_RendezVous
            Do While Not (RsCat.EOF) ' on parcoure les résultats du matériel
                If Not IsNull(RsPL!Chir1) Then
                    Forms!F_PlanningWeek!SF_PlanningWeek1.creneau = RsPL!Patient & " " & RsPL!DateNaissance & " " & RsCat.Fields(0)
     
       RsCat.MoveNext
       RsPL.MoveNext
       Loop
     
    ' libération
    RsCat.Close 
    RsPL.Close
    Set RsCat = Nothing
    Set RsPL = Nothing
    Ce code crée une erreur. Je continue mes recherches

  7. #7
    Membre chevronné
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    Plutôt à ç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
    Dim RsPL As DAO.Recordset
    Dim RsCat As DAO.Recordset
    Dim LeSql As String
    Dim strValue as String
     
    ' Sélectionne les RDV de la date
    LeSql = "SELECT R_RendezVous.*" & _
    "FROM R_RendezVous " & _
    "WHERE (R_RendezVous.HoraireDebut < " & FormatDateUS(DateDebut + 5) & ") And (R_RendezVous.HoraireFin >" & FormatDateUS(DateDebut) & ") "
     
    Set RsPL = CurrentDb.OpenRecordset(LeSql, dbOpenSnapshot) 'affectation du recordseten snapshot (plus rapide !)
     
       Do until RsPL.EOF ' on parcours les RDV
            strValue = RsPL!Patient & " " & RsPL!DateNaissance
     
            Set RsCat = RsPL!Materiel.Value 'instancier le jeu d'enregistrements enfant du champ Materiel de la Requete R_RendezVous
            Do Until RsCat.EOF ' on parcoure les résultats du matériel
                If Not IsNull(RsPL!Chir1) Then
                   strValue = strValue & " " & RsCat.Fields(0)
                End If
            RsCat.MoveNext
            Loop
     
         Forms!F_PlanningWeek!SF_PlanningWeek1.creneau = strValue
     
       RsPL.MoveNext
       Loop
     
    ' libération
    RsCat.Close
    RsPL.Close
    Set RsCat = Nothing
    Set RsPL = Nothing
    PS : il vous manquait un End If et un Loop sauf erreur de ma part

    Cordialement

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

Discussions similaires

  1. [XL-2010] Incompatibilité de type avec "ActiveWorkbook.SaveAs"
    Par daddygraffiti dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/11/2013, 01h19
  2. [XL-2007] Incompatibilité de type avec "INSTR()"
    Par ESVBA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/11/2010, 18h59
  3. Incompatibilité de type avec une requête Select
    Par desilo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/04/2008, 17h45
  4. Réponses: 4
    Dernier message: 18/03/2007, 17h09
  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