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 :

ADO impossible de recuperer une valeur dans une requete Access [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut ADO impossible de recuperer une valeur dans une requete Access
    Bonjour.

    Je cherche a recuperer le code d'echeance pour un fournisseur donne.

    Dans mon fichier Access j'ai relie a des tables Oracle par ODBC.

    Puis, dans une requete Access, je relie les 3 tables et je rajoute mes criteres.

    Dans VBA, pour afficher le code echance dans un champ de mon formulaire, j'ouvre la requete Access par ADO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Set oConn = New ADODB.Connection
        Set oConn = CurrentProject.Connection
     
        Set oRS = New ADODB.Recordset
        oRS.CursorLocation = adUseClient
    'Ouverture de la requete Access
    oRS.Open "select * from [nomrequete]", oConn, adOpenDynamic, adLockOptimistic, adCmdText
    codeech=ors("code_echeance")
    Le programme ne me trouve aucun enregistrement. Etant donne que je n'ai pas fait de test pour verifier si la table etait vide a l'ouverture, j'ai une erreur qui ressemble a ca (le texte de l'erreur est en polonais) : "la fonction BOF ou EOF retourne une valeur reelle ou l'enregistrement actuel a ete supprime. L'operation demandee exige un enregistrement."

    Quand j'ouvre la requete manuellement, elle n'est pas vide.
    D'autre part, en utilisant DAO au lieu de ADO, le programme trouve bien un enregistrement dans la requete. ADO de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    set tb=currentdb.openrecordset("nomrequete",dbopendynaset)
    codeech=tb!code_echeance
    J'ai aussi essaye de ne pas mettre de critere dans la requete Access mais a l'ouverture de la requete par ADO. Meme probleme.

    Savez-vous a quoi ca peut etre du ?

    Merci.
    Cdlt.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Essayes de faire un MoveLast et un MoveFirst de ton recordset pour voir.

    Philippe

  3. #3
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    Que ce soit en rajoutant un movelast et un movefirst ou directement un movefirst, j'obtient le meme message d'erreur comme quoi il n'y a pas d'enregistrement.

    En faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    if ors.eof=true then
         msgbox"la table est vide"
    else
         codeech=ors("code_echeance")
    end if
    Le programme m'affiche le message "la table est vide".

    Cdlt.

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    je n'utilise pas oracle, mais il me semble bizarre que tu n'initialises pas le ConnectionString de ta connection oConn.

    Quelque-chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        sConn = "provider=ProviderOracle;Data source=xxx.xxx.xxx.xxx;USER ID=user;PASSWORD=psw"
        oConn.ConnectionString = sConn
    La syntaxe est à regarder dans ta doc oracle. ici j'ai juste pris la syntaxe de l'ADO pour l'IBM I5.

  5. #5
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    J'utilise des tables reliees a Oracle par ODBC et ca fonctionne en temps normal. J'accede donc aux tables qui se trouvent dans Access. Je me connecte a ma base Access actuelle et non pas a Oracle.

    Dans ma requete Access j'utilise aussi des valeurs que j'ai recupere dans mon formulaire.

    C'est vrai que je pourrais remplacer par une connection directe a Oracle dans mon programme. Mais j'ai decide de faire autrement.

    Ce que je ne comprend pas, c'est pourquoi par DAO le programme trouve les donnees alors que par ADO aucun enregistrement n'est trouve.

    Cdlt.

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    J'accede donc aux tables qui se trouvent dans Access.
    Pas besoin d'utiliser ADO dans ce cas, il me semble.

    Tu peux accéder à ta requête comme un simple recordset de ta CurrentDB.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Je vais peut-être dire une betise, mais si vous cherchez à ne retourner qu'un seul enregistrement vous devriez peut être utiliser un dlookup ?

  8. #8
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Bonjour,



    Pas besoin d'utiliser ADO dans ce cas, il me semble.

    Tu peux accéder à ta requête comme un simple recordset de ta CurrentDB.
    Pour acceder a ma requete je ne vois que ADO (comme je fais actuellement), DAO (ce que j'utilisais jusqu'a present), ou une requete sql saisie dans le module VBA qui me renvoie une valeur que je dois recuperer.
    Probleme d'une requete sql dans le module VBA : les champs texte ne me recuperent pas la valeur en tant que tel mais la requete sql en elle meme ("select......from...."). Je suis alors oblige de remplacer mon champ texte par un autre type de champ, sauf erreur de ma part un champ de liste (je ne me souviens plus comment s'appelle exactement en francais ce type de champ, j'ai la version polonaise au bureau).

    D'autre part, il semble que ca pose probleme de melanger de l'ADO et du DAO dans un programme.

    Si aucune solution n'est trouvee, je modifierai le type de champ de mon formulaire pour recuperer la valeur recherchee par une requete sql dans VBA.

    Par contre, chose que j'ai constate : avec le Runtime Access, meme la requete sql ne permet pas de recuperer la valeur cherchee. Et je veux que les utilisateurs utilisent le Runtime et non la version complete comme actuellement. Mais mes problemes avec le Runtime sera mentionne dans un autre appel.

    Cdlt.

  9. #9
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    J'accede donc aux tables qui se trouvent dans Access.
    Pour ce faire, il me semble que ni ADO ni DAO ne sont requis.

    Un exemple, au hasard, sorti de mes codes. où on suppose que ta requete existe et est stockée ainsi que la table dans access (sinon il faut ADO, DAO, ...)

    ce code extrait un numéro d'un classeur excel et vérifie qu'on a enregistré dessus dans access (Booking_Attendees)

    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
    Dim Dbp             As Database                              'This Db
    Dim R_Events        As Recordset                             'Events Recordset
    Dim Ob_Events       As String
    Dim Criteria_Events As String
    Dim Event_Key       As String                               'Event_key is Excel : Search argument
     
     
    'Open Events by Eventcode
    Ob_Events = "SQL_Events_By_EventCode"
    Set R_Events = Dbp.OpenRecordset(Ob_Events)
    ' ......
            Event_Key = xlBook.Worksheets(xlSheet).Range(Me![Importing_File_Ref_Column] & Off).Value
            'Look for Event Info in Access
            Criteria_Events = "EventCode Like  '" & Event_Key & "'"
            R_Events.FindFirst (Criteria_Events)
            'Found Event
            If Not R_Events.NoMatch Then
                Event_Found = True
                Booking_nbr = R_Events![Booked_Attendees]
             Else
                Event_Found = False
            End If

  10. #10
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    Merci pour les reponses.

    J'ai resolu mon probleme autrement.

    Sans rentrer dans les details, j'accede par ADO a une table MYSQL qui contient les donnees d'Oracle (pour une question de rapidite d'acces) au lieu d'acceder aux donnees d'une requete reliee par ODBC a Oracle.

    Et ca fonctionne.

    Cdlt.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. recuperer la valeur d'une liste dans une zone de text
    Par judy_ dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 28/05/2008, 11h58
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Recupere la valeur d'une ComboBox dans une autre cellule
    Par Henricoo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/06/2007, 13h56
  5. recuperer la valeur d'une variable dans une nouvlle page
    Par gloglo dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 11/01/2007, 17h08

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