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

MFC Discussion :

[MFC]Lister les sources de données ODBC


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut [MFC]Lister les sources de données ODBC
    Bonjour,

    je fais un programme qui peut se connecter à différentes bases de données .. et je voudrais savoir si vous connaissiez une manière de lister toutes les sources de données ODBC .. et encore mieux si on peux choisir de quel type de base il s'agit ( dans mon cas MySQL ).

    Merci par avance ..

    Cédric

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    Les fonctions:
    http://msdn.microsoft.com/library/en-us/odbc/htm/odbcinstaller_dll_api_reference.asp
    Un exemple qui peut aider:
    http://www.developpez.net/forums/vie...375407#2375407

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    je vais regarder ça ..

    merci pour tout ..

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    en fait il suffit d'aller lire le bon registre qui liste toutes les sources ODBC ..

    Merci pour tout ..

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    Sinon j'ai encore un soucis ..

    Lorsque que je lis ma liste d'odbc, jobtiens souvent l'erreur ERROR_MORE_DATA, mais je n'arrive pas à voir pourquoi j'ai cette erreur, et surtout à quoi elle correspond ..

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    En fait l'erreur ERROR_MORE_DATA .. j'ai trouvé la signification mais je ne vois pas ce quel fait ici ..

    Je vous explique :
    En fait je veux lister mes sources de données odbc .. mais lorsque j'ai une source de donnée qui s'appelle Test et une autre Test_Test , la seconde me donne une erreur ERROR_MORE_DATA .. Si je supprime la source de données Test alors ma source Test_Test sera bien lu sans erreur ...

    Quelqu'un a déjà eu ce problème ?

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    ERROR_MORE_DATA, en général, c'est que le buffer passé est trop petit pour contenir tout ce que la fonction veut te renvoyer.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    oui mais je ne comprends pas pourquoi il est trop petit car Test est la même source que Test_Test ( qui est une copie .. ).

    Et puis si je supprime Test alors Test_Test, il n'y aura pas d'erreur ..

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    Donne le bout de code concerné.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    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
     
    if ( RegOpenKeyEx (HKEY_LOCAL_MACHINE, _T("Software\\ODBC\\ODBC.INI\\ODBC Data Sources"), 0, KEY_READ, &hKey ) == ERROR_SUCCESS )
    {
      cchValue = MAX_VALUE_NAME; 
      achValue[0] = '\0'; 
      for (dwIndex = 0,res = ERROR_SUCCESS ; res == ERROR_SUCCESS ; dwIndex++)
      {
    	res = RegEnumValue (hKey, dwIndex, achValue, &cchValue, NULL, NULL, NULL, NULL);
     	if ( res == ERROR_SUCCESS )
    	{
               int i = 0;
    	}
      }
      RegCloseKey( hKey );
    }
    le "res" de RegEnumValue me renvoie ERROR_MORE_DATA ..
    En espérant que cela va t'aider ..

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    Ah mais ça n'a rien à voir avec ODBC. Lit la doc:
    lpcValueName
    [in, out] Pointer to a variable that specifies the size of the buffer pointed to by the lpValueName parameter, in TCHARs. This size should include the terminating null character. When the function returns, the variable pointed to by lpcValueName contains the number of characters stored in the buffer. The count returned does not include the terminating null character.
    Suite au premier appel, cchValue contient la taille de ce qui a été lu. Donc au 2° appel, comme tu réinitialises pas, ben c'est trop petit. Déplace la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cchValue = MAX_VALUE_NAME;
    juste avant l'appel à RegEnumValue.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 22
    Points
    22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if ( RegOpenKeyEx (HKEY_LOCAL_MACHINE, _T("Software\\ODBC\\ODBC.INI\\ODBC Data Sources"), 0, KEY_READ, &hKey ) == ERROR_SUCCESS )
    {
      for (dwIndex = 0,res = ERROR_SUCCESS ; res == ERROR_SUCCESS ; dwIndex++)
      {
        cchValue = MAX_VALUE_NAME;
        achValue[0] = '\0';
       res = RegEnumValue (hKey, dwIndex, achValue, &cchValue, NULL, NULL, NULL, NULL);
        if ( res == ERROR_SUCCESS )
        {
          int i = 0;
        }
      }
      RegCloseKey( hKey );
    }
    comme ça cela marche très bien ..

    Merci pour tout ..
    je ne l'avais même pas vu ..

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

Discussions similaires

  1. [C#] Lister les Bases de données (SQL SERVER) d'un poste
    Par justice007 dans le forum Accès aux données
    Réponses: 9
    Dernier message: 21/06/2010, 16h10
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. comment lister les sources de données utilisateur
    Par lassad dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/10/2005, 13h56
  4. sources de données ODBC sous win 2000
    Par drinkmilk dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 02/06/2005, 14h00
  5. source de données ODBC interbase
    Par Clotilde dans le forum InterBase
    Réponses: 1
    Dernier message: 25/01/2005, 14h05

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