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 :

Impossible de faire un vulgaire OpenRecordset [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Par défaut Impossible de faire un vulgaire OpenRecordset
    bonjour à tous,

    ça fait un bail que je n'avais plus touché à Access ou plutôt que je n'avait plus touché à du VBA et je me retrouve devant un mur :

    J'essaye simplement de déclarer un Recordset basé sur une requête SQL, et Access 2016 m'envoie bouler à chacune de mes tentatives (j'ai googlé et quoi que je trouve cela ne fonctionne pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Declarations
    Dim StrSQL  As String
    Dim FKW_Rst As Recordset
     
    ' Requete SQL   
    StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = 1 And Type = 1 ORDER BY Line"
     
    'Recordset :
    Set FKW_Rst = CurrentDb.OpenRecordset(StrSQL)

    Rien qu'avec ce code j'ai une erreur 13 (incompatibilité de code)

    j'ai vu ici qu'avec 2016, il n'y pas besoin de référence DAO

    Mais bon j'ai essayé avec aussi sans succès (bon après c'est un peu le souk dans toutes les références possibles)

    Quelqu'un pourrait me dire comment Microsoft a simplifié son truc ? Car moi je sèche là ! :/

    Merci

  2. #2
    Membre émérite
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Par défaut Bonsoir 4get9,
    As-tu essayé en déclarant ton Recordset avec une référence explicite à DAO, dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim FKW_Rst As DAO.Recordset
    Si tu recherche "Recordset" dans l'explorateur d'objets, il te dégote quoi ?

    Cordialement,
    Paraffine.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Par défaut
    Bon ben j'ai trouvé une solution (c'est toujours comme ca)

    j'ai ajouté la référence "Microsoft ActiveX Data Object 6.1 Library"
    et modifié mon code ainsi :

    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
    Dim StrSQL  As String
        Dim FKW_Rst As ADODB.Recordset
        Dim cnn As ADODB.Connection
     
        StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = 1 And Type = 1 ORDER BY Line;"
     
        Set cnn = CurrentProject.Connection
        Set FKW_Rst = New ADODB.Recordset
     
        FKW_Rst.Open StrSQL, cnn
     
        While Not FKW_Rst.EOF
            MsgBox FKW_Rst("KWName")
            FKW_Rst.MoveNext
        Wend
     
     
        FKW_Rst.Close

  4. #4
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Dans ton instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = 1 And Type = 1 ORDER BY Line"
    Tu dois être sûr que UnitId est numérique, sinon il faudra l'écrire autrement "WHERE UnitId = '" & 1 & "' And ". Idem pour Type = 1.

    Par ailleurs, je soupçonne le nom "Type" utilisé comme nom de champ, d'être problématique car (mais je n'en suis pas sûr) il peut entrer en conflit avec les mots clés de l'application; pourquoi ne pas nommer ton champ "TypeDeChamp" par exemple ou n'importe quoi qui soit distinct des commandes Access.

  5. #5
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Encore un détail qui pourrait être important: il faudra terminer ton code SQL par un ";" point-virgule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = 1 And Type = 1 ORDER BY Line;"

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    As-tu essayé en déclarant ton Recordset avec une référence explicite à DAO, dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim FKW_Rst As DAO.Recordset
    oui déjà essayé, ça ne fonctionne pas non plus

    Citation Envoyé par Paraffine Voir le message
    Si tu recherche "Recordset" dans l'explorateur d'objets, il te dégote quoi ?

    Cordialement,
    Paraffine.
    "L'identification sous le curseur n'est pas reconnu"

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Dans ton instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = 1 And Type = 1 ORDER BY Line"
    Tu dois être sûr que UnitId est numérique, sinon il faudra l'écrire autrement "WHERE UnitId = '" & 1 & "' And ". Idem pour Type = 1.

    Par ailleurs, je soupçonne le nom "Type" utilisé comme nom de champ, d'être problématique car (mais je n'en suis pas sûr) il peut entrer en conflit avec les mots clés de l'application; pourquoi ne pas nommer ton champ "TypeDeChamp" par exemple ou n'importe quoi qui soit distinct des commandes Access.
    pas de souci sur le format des champs, la requête fonctionne parfaitement en elle même

    pas idiot le cout du type, mais bon c'est contrôlé à la création de la table, donc ça passe. Je modifierai ça par contre pour plus de propreté

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Encore un détail qui pourrait être important: il faudra terminer ton code SQL par un ";" point-virgule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = 1 And Type = 1 ORDER BY Line;"
    j'avais justement testé sans pour voir...
    Mais j'en mets toujours un sinon

  9. #9
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 935
    Par défaut
    Bonsoir,
    quelles sont les références cochées ?

  10. #10
    Membre émérite
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Par défaut
    Oui, comme demande Tee_grandbois, tu as bien Microsoft Office 16.0 Access Database Engine Object Library dans les références du projet ?
    Cela résoudra peut-être ton problème comme ici.
    C'est très louche que l'explorateur d'objet ne te trouve pas Recordset !

    Je ne pourrais pas faire le test, chez moi c'est vintage (97 et 2007).

    Cordialement.

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Par défaut
    de base j'avais juste :
    - Visual Basic for Application
    - Microsoft Access 16.0 Object Library
    - OLE Automation

    et j'ai du coup rajouté Microsoft ActiveX Data Object 6.1 Library

    je vais essayer le tiens Paraffine

    Bon ben c'est bien ça, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    StrSQL = "SELECT KWName FROM Keywords WHERE UnitId = " & Me.IdUnit & " And Type = 2 ORDER BY Line;"
        Set Rst = CurrentDb.OpenRecordset(StrSQL, dbopensnapshot)
     
        While Not Rst.EOF
            KeyWords = KeyWords & "<div>" & Rst("KWName") & "</div>"
            Rst.MoveNext
        Wend
        Rst.Close

    Merci beaucoup !!!
    Je vais utiliser cette syntaxe dont j'ai trop l'habitude

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

Discussions similaires

  1. Impossible de faire une rupture programmée...
    Par Tchupacabra dans le forum WinDev
    Réponses: 1
    Dernier message: 03/03/2006, 13h49
  2. [TP7] Impossible de faire tourner un programme
    Par eleve88 dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 10/01/2006, 19h12
  3. Réponses: 2
    Dernier message: 14/12/2005, 22h57
  4. Impossible de faire marcher SESSIONS_PER_USER
    Par jack554 dans le forum Oracle
    Réponses: 7
    Dernier message: 05/01/2005, 11h50
  5. impossible de faire fonctionner phppgadmin et pgdmin3
    Par le_ben dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 09/12/2004, 14h27

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