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

IHM Discussion :

Problème DSN dynamique ODBC pour accès tables liées sur serveur distant


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Points : 68
    Points
    68
    Par défaut Problème DSN dynamique ODBC pour accès tables liées sur serveur distant
    Tricky problème !
    J'essaye de définir dynamiquement le DSN pour le lien ODBC de mes tables liées (vers serveur distant).
    J'utilise le 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
     lstr_attr = "DSN=O Naturel" & vbNullChar
        lstr_attr = lstr_attr & "SERVER=ip du serveur" & vbNullChar
        lstr_attr = lstr_attr & "DATABASE=testdb" & vbNullChar
        lstr_attr = lstr_attr & "DESCRIPTION=test accès db" & vbNullChar
        lstr_attr = lstr_attr & "OPTION=3" & vbNullChar
        lstr_attr = lstr_attr & "UID=test" & vbNullChar
        lstr_attr = lstr_attr & "PWD=test" & vbNullChar
        lstr_attr = lstr_attr & vbNullChar
        ll_ret = SQLConfigDataSource(0, ODBC_ADD_DSN, lstr_driver, lstr_attr)
        
        If ll_ret = 0 Then
            li_idx = 0
            Do
                li_idx = li_idx + 1
                lstr_msg_err_odbc = String(2048, vbNullChar)
                ll_ret = SQLInstallerError(li_idx, ll_err_code_odbc, lstr_msg_err_odbc, 2047, ll_err_codemsg_odbc)
                If ll_ret = SQL_SUCCESS_WITH_INFO Then ll_ret = SQL_SUCCESS
                If ll_ret = SQL_SUCCESS Then MsgBox Left(lstr_msg_err_odbc, ll_err_codemsg_odbc)
            Loop Until (ll_ret <> SQL_SUCCESS Or li_idx = 8)
        End If
    Le problème est le suivant : lorsque j'accède en lecture à une table via ce DSN, le système m'ouvre une boîte de dialogue avec les bons paramètres définis ci-dessus mais sans le UID et PWD qui restent vides !!!!!

    Quelqu'un aurait-il une idée ?

    Merci !!!!!

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 336
    Points : 19 572
    Points
    19 572
    Billets dans le blog
    65
    Par défaut
    Salut,

    As-tu testé pour quelle raison tu sors de la boucle avec un :

    Pour vérifier si li_idx=8 ?

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Points : 68
    Points
    68
    Par défaut
    En fait, je ne sors pas en erreur de la fonction SQLConfigDataSource !
    Mon code retour ll_ret est à 1.

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Le problème est lié je pense à Windows 7.
    Je m'était rendu compte, il y a un an et demi, que la création d'un DSN MySQL avec SQLConfigDataSource se faisant sans retourner d'erreur, mais se faisait mal (inscription incomplète dans la base de registre).
    Peut-être un problème lié à la gestion des droits dans Windows 7.

    Je viens de refaire un essai pour créer un dsn utilisateur MySQL 3.51 (MonDSN) et il fonctionne bien.
    Je ne sais pas pourquoi ça fonctionne aujourd'hui

    Sous la clé de registre HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\MonDSN j'ai :
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DATABASE       REG_SZ  test
    DESCRIPTION    REG_SZ  ESSAI DSN MySQL
    Driver         REG_SZ  C:\Windows\SysWOW64\myodbc3.dll
    OPTION         REG_SZ  3
    SERVER         REG_SZ  NomDuServeur
    UID            REG_SZ  NomUtilisateur
    Qu'est-ce que tu as sous HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\O Naturel ?

    A+

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Points : 68
    Points
    68
    Par défaut
    Merci pour ces précisions...

    Dans le registre, je n'ai que la définition du Driver et du Port !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Driver         REG_SZ  C:\Program Files (x86)\MySql\Connector ODBC 3.51\myodbc3.dll
    PORT           REG_SZ  3306
    Je n'ai même pas la DSN name, l'Adresse IP et la Database Name alors qu'ils apparaissent dans la boîte de dialogue... Ils sont stockés dans un autre endroit, je suppose...

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Ce que tu as est exactement ce que j'ai vu il y a un an et demi.
    L'inscription n'est pas complète.
    Je ne sais pas l'expliquer, et je n'arrive pas à le reproduire sur mon nouveau PC.
    La seule différence que je vois entre toi est moi, c'est que le pilote ne s'est pas installé dans le même dossier.

    La seule alternative à SQLConfigDataSource, c'est de faire l'inscription du DSN dans la base de registre par code VBA.
    De préférence dans la section HKEY_CURRENT_USER (dsn utilisateur), plutôt que dans HKEY_LOCALE_MACHINE (dsn système) qui est plus protégée en écriture par Windows 7.

    A+

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Points : 68
    Points
    68
    Par défaut
    Oui, c'est la direction que j'allais prendre...
    Merci beaucoup pour avoir suivi l'affaire
    Merci aussi à Vodiem.

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    De nada

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    J'ai continué à chercher et j'ai peut-être trouvé quelque chose.
    La documentation de SQLConfigDataSource renvoie à la fonction ConfigDSN, en ce qui concerne la syntaxe de la chaîne de caractères des attributs.
    Il est écrit que c'est une chaîne de caractères, comportant des paires mot-clé=valeur, que les paires sont délimitées par un caractère nul, et que la chaîne se termine par un caractère nul supplémentaire.

    Etant donné que je n'ai pas de problème pour créer un DSN utilisateur avec le pilote 'MySQL ODBC 3.51 Driver', mais que j'ai le même problème que toi avec les pilotes 'MySQL ODBC 5.1 Driver' et 'MySQL ODBC 5.2w Driver', je me suis dit que ça pouvait venir du pilote.
    J'ai essayé de remplacer les délimiteurs vbNullChar par ";" et maintenant ça fonctionne avec 'MySQL ODBC 5.2w Driver'.
    Ça doit être une particularité MySQL .

    Voila ce qui a fonctionné pour moi :
    Code vb : 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 strDriver As String, strDSN As String, strAttr As String, RetVal As Long
    Dim pfErrorCode As Long, pcbErrorMsg As Long, lpszErrorMsg As String, i As Integer
     
    strDriver = "MySQL ODBC 5.2w Driver" & vbNullChar
    strDSN = "32MonDSNMySQL"
     
    ' Supprime DSN utilisateur
    strAttr = "DSN=" & strDSN & vbNullChar & vbNullChar
    RetVal = SQLConfigDataSource(0, ODBC_REMOVE_DSN, strDriver, strAttr)
     
    ' Nouvelle chaîne d'attributs ODBC
    strAttr = "DSN=" & strDSN & ";"
    strAttr = strAttr & "Description=" & "ESSAI DSN MySQL 5.2w" & ";"
    strAttr = strAttr & "Server=" & "MonServeurMySQL" & ";"
    strAttr = strAttr & "PORT=3306" & ";"
    strAttr = strAttr & "UID=moimeme" & ";"
    strAttr = strAttr & "Database=" & "test" & ";"
    ' Terminaison
    strAttr = strAttr & vbNullChar & vbNullChar
     
    ' Crée DSN utilisateur
    RetVal = SQLConfigDataSource(0, ODBC_ADD_DSN, strDriver, strAttr)
    A+

  10. #10
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    même résolu, il s’obstine à trouver THE solution.
    t'est formidable, tout mon respect l'ami.
    des gars comme ca faut les bichonner. ^^

  11. #11
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Merci Vodiem

    Ce qui est rassurant c'est que Windows 7 n'est pas la cause du problème.
    Juste un bug du pilote MySQL qui n'affecte que les programmeurs utilisant SQLConfigDataSource de l'api ODBC.

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Points : 68
    Points
    68
    Par défaut
    Voici ce que j'ai testé :
    J'ai gardé le pilote 'MySQL ODBC 3.51 Driver' et j'ai remplacé les 'vbNullChar' par des ';', comme tu me l'as conseillé. J'ai aussi supprimé la partie de code supprimant le DSN avant de la recréer car le remplacement se fait automatiquement (constatation empirique).
    Le tout fonctionne enfin !!!!!!!
    Encore un gros merci à vous deux (LedZeppII et Vodiem).

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

Discussions similaires

  1. Accès à un fichier sur serveur distant
    Par s_n_r_k dans le forum PL/SQL
    Réponses: 2
    Dernier message: 28/12/2014, 11h40
  2. Accés à table Oracle sur serveur
    Par brunodu60 dans le forum AS/400
    Réponses: 1
    Dernier message: 02/11/2009, 11h17
  3. Réponses: 11
    Dernier message: 30/06/2008, 13h15
  4. Réponses: 3
    Dernier message: 21/02/2006, 11h44
  5. ACCES + Tables liées SQLServer 2000
    Par zakori dans le forum Access
    Réponses: 2
    Dernier message: 25/01/2006, 08h19

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