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

Access Discussion :

Erreur Openrecordset sur une table DB2


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Erreur Openrecordset sur une table DB2
    Bonjour,

    J'essaie d'accéder a une table DB2 qui se trouve sur le mainframe via le code VB dans access et ça ne veut pas fonctionner

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim ws As Workspace
        Dim DB2 As Database
        Dim str As String
        Dim strSQL As String
        Dim rs As Recordset
     
        Let str = "ODBC;DSN=DB2XMVS;UID=monuser;PWD=monMDP;"
        Set ws = DBEngine.Workspaces(0)
        Set DB2 = ws.OpenDatabase("", False, False, str)
        strSQL = "SELECT TE_NOM, TE_PRENOM FROM [sens.personne] WHERE NO_MATR='28407100690'"
        Set rs = DB2.OpenRecordset(strSQL, dbOpenSnapshot)
    Access plante sur la derniere instruction et me donne une erreur d'execution 3078 qui dit qu'il ne peut pas trouver la table ou la requête source "sens.personne". Lors de mes premiers essais, j'avais une autre erreur car je n'avais pas entouré le nom de la table avec les balises [ ] et accesss essayait d'ouvrir la db c:\documents&settings\...\sens.mdb car il considerait le shema "sens" de ma table comme une DB. J'ai trouvé le workaround [ ] sur le site de microsoft, malheureusement ça me donne l'erreur 3078 et là je ne trouve plus de solution.

    Je précise que je suis sous access 2007 et que je suis sûr et certain de ma connectivité ODBC etant donné que j'ai créé une requête directe en lui donnant le même connection string "ODBC;DSN=DB2XMVS;UID=monuser;PWD=monMDP;" et celle-ci passe sans probleme, je reçois bien les données venant du mainframe dans access...

    Si quelqun a une quelconque alternative pour récupérer les données externes (ODBC) a partir du code VB, je suis preneur.(je cherche depuis 8H00 ce matin je crois que je vais à présent attendre une réponse de votre part )

    Merci d'avance pour votre aide

    Thomas

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    ouf !

    Ben, perso, je l'aurai fait en ADO plutôt non ?
    Faire du DAO pour accéder à du DB2 en ODBC, c'est un peu 'osé' quand même !


    Qu'en penses-tu ?
    Tu es obligé de passer par DAO ?


    Sinon, ton Numéro de Matricule, c'est du Texte ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    oui c'est un champ texte dans la DB meme si ce ne sont que des chiffres (c pas moi l'analyste je precise )

    Heuu oui je veux bien utiliser ADO mais je ne vois pas bien ou se situe la difference... dans les instructions utilisées ou dans les références?
    (je regarde dans vos tutos, ici mais je ne vois rien qui parle de DB2)
    Faut-il installer des drivers pour se connecter a DB2 ou y en a t il des standard avec access?
    Si tu avais un exemple de connection DB2 avec ADO je t'en serait reconnaissant.

    merci

    Thomas

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    En fait depuis DAO 3.5, on distingue 2 types de Workspaces:
    - workspace JET,
    - workspace ODBC direct.

    Et dans ton exemple, tu tentes d'ouvrir un objet Database à la manière de ODBC direct, mais il manque quelques petites choses...
    et en particulier, créer un Worspace ODBC direct !
    /!\ Tu dois préciser le nom d'utilisateur et son mot de passe (ci dessous "Admin" et "" chaîne vide) dans le contexte du fichier de sécurité MDW utilisé par DBEngine, à ne pas confondre avec le nom d'utilisateur et le mot de passe utilisés pour ton SGBD (mentionnés ici dans la chaîne de connexion).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim ws As DAO.Workspace
        Dim DB2 As DAO.Database
        Dim str As String
        Dim strSQL As String
        Dim rs As DAO.Recordset
     
        Let str = "ODBC;DSN=DB2XMVS;UID=monuser;PWD=monMDP;"
        Set ws = DBEngine.CreateWorkspace("ODBCDirect DB2", "Admin", "", dbUseODBC)
        Set DB2 = ws.OpenDatabase("DB2", dbDriverNoPrompt, False, str)
        strSQL = "SELECT TE_NOM, TE_PRENOM FROM [sens.personne] WHERE NO_MATR='28407100690'"
        Set rs = DB2.OpenRecordset(strSQL, dbOpenSnapshot)

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    C'esst pour cela que je préconisais l'ADO.

    Il peut créer son recordset en passant sa chaine de connexion.
    Donc, le code est plus light !

    Là, je suis au boulot et je vais avoir du mal à te répondre directement à la question, mais tu dois pouvoir faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim rst as adodb.recordset
    set rst=new adodb.recordset
    rst.open "tatable","tachaine de connexion",la constantedetypederecordset
    C'est quand même plus simple que de passer par DAO

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Euh je crois que le deuxième paramètre de Open est un objet Connection et non une chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim oRst As ADODB.Recordset
    Dim oCon As New ADODB.Connection
     
    oCon.Open chaineconnexion, User, pwd
    oRst.Open "matable",ocon,...

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci à tous les 2 pour votre aide, j'y suis enfin arrivé en utilisant ADO

  8. #8
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par Tofalu
    Euh je crois que le deuxième paramètre de Open est un objet Connection et non une chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim oRst As ADODB.Recordset
    Dim oCon As New ADODB.Connection
     
    oCon.Open chaineconnexion, User, pwd
    oRst.Open "matable",ocon,...



    Citation Envoyé par Aide
    Open, méthode (objet Recordset ADO)

    Ouvre un curseur.

    Syntaxe
    recordset.Open Source, ActiveConnection, CursorType, LockType, Options


    Paramètres
    Source
    Facultatif. Valeur de type Variant qui représente un objet Command valide, une instruction SQL, un nom de table, une procédure stockée, une URL, le nom d'un fichier ou un objet Stream contenant un objet Recordset stocké de façon permanente.

    ActiveConnection
    Facultatif. Valeur de type Variant qui représente le nom d'une variable objet Connection ou valeur de type String qui contient des paramètres ConnectionString.


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

Discussions similaires

  1. ORA-01031: erreur de droits d'accès sur une table
    Par thisistheend dans le forum PL/SQL
    Réponses: 3
    Dernier message: 28/02/2012, 21h31
  2. Erreur de filtre sur une table Firebird
    Par defluc dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/06/2010, 11h22
  3. Réponses: 6
    Dernier message: 08/12/2009, 21h12
  4. [MySQL] Sort sur une table - erreur stupide pour sort et order
    Par cyrella99 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2009, 13h17
  5. Ordre de sélection des lignes sur une table DB2
    Par Pierre Formosa dans le forum DB2
    Réponses: 1
    Dernier message: 26/04/2006, 20h03

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