[C/API] Créer automatiquement une source de donnée - Source ODBC

Salut, pour des besoins professionnels, j’ai un programme qui stocke des infos dans une base de données.

Pour le moment, je suis obligé, lors de l’installation de ce programme, de créer la source de données sous Windows (panneau de config, outils d’administration, sources de données (ODBC) ) qui pointe vers ma base (existante sur le disque)

Or, du moment que c’est moi qui installe le soft, pas de soucis, mais je trouve la manip un peu trop compliquée pour certains clients ‘hermétiques’ à l’info.

je voudrais donc savoir par quel moyen je pourrais automatiser cette opération.

Pour info, j’utilise LabWindows/CVI avec le toolkit SQL.

Bon, pas trop de réponses apparemment…

C’est pas grave, j’ai avancé de mon coté! J’ai trouvé une API qui permet de créer une source de données: SQLConfigDataSource

Voici ce que ça donne une fois codé:

#include <stdio.h>
#include <string.h>
#include "windows.h"
#include "odbcinst.h"


int main()
{
	RETCODE retcode;
	UCHAR    *szDriver = "Microsoft Access Driver (*.mdb)";
	UCHAR    *szAttributes = "DSN=NomDeLaSource\0DESCRIPTION=Test_Description\0"
        "0SAVEFILE=c:\\test.mdb\0";

	retcode = SQLConfigDataSource(NULL, ODBC_ADD_DSN, szDriver, szAttributes);
	
	return retcode;
}

Voila, c’est vraiment pas compliqué. Par contre, je n’arrive toujours pas à lier cette source avec un fichier .mdb présent sur le disque, alors si quelqu’un avait une idée…

Le sujet reste ouvert!

Bon, pas trop de réponses apparemment, mais sur ce coup-ci, je vous ai pas laissé trop de temps!!!!

Bon, pour indiquer le fichier mdb à utiliser, c’est simple, il suffit de déclarer un champ “DBQ” dans les attributs passés à la fonction.

Voici le code que ça donne à la fin:

#include <stdio.h>
#include <string.h>
#include "windows.h"
#include "odbcinst.h"
int main()
{
	RETCODE retcode;
	UCHAR    *szDriver = "Microsoft Access Driver (*.mdb)";
	UCHAR    *szAttributes = "DSN=NomDeLaSource\0DESCRIPTION=Test_Description\0"
        "DBQ=c:\\temp.mdb\0";

	retcode = SQLConfigDataSource(NULL, ODBC_ADD_DSN, szDriver, szAttributes);
	
	return retcode;
}

Voila, dès fois que ça serve à quelqu’un!!

:super: cool, merci pour ceux à qui ça peut servir.

Bon, une dernière modif qui permet de modifier dynamiquement le fichier servant à la source de données OBDC:

#include <stdio.h>
#include <string.h>
#include "windows.h"
#include "odbcinst.h"
  
int main()
{
  RETCODE retcode;
  UCHAR    *szDriver = "Microsoft Access Driver (*.mdb)";
  UCHAR    *szAttributes ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                          "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                          "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

  char  FilePath[1024];

  // Ici, utiliser la fonction qui va bien pour se connecter à la BD (dépend de votre compilo)

  // Si la connexion a échouée
  if(erreur)
  {
    sprintf(FilePath,"c:\\base.mdb");
    sprintf(szAttributes,"DSN=SourceDonnées*DESCRIPTION=Base de données*DBQ=%s",FilePath);

    // La, on remplace les caractères '*' par '\0'.
    // On est obligé de faire comme ça, sinon erreurs à l'exécution du type tentative d'écriture au delà de la 
    // fin de la chaine...
    for(i=strlen(szAttributes);i>0;i--)
      if(szAttributes[i]=='*')
        szAttributes[i]='\0';

    retcode = SQLConfigDataSource(NULL, ODBC_ADD_DSN, szDriver, szAttributes);

    // Ici, re-tentative de connexion à la base après création de la source de données
    if(erreur)
      return -1;
  }

  return 0;
}

Voila, la transformation des ‘*’ en ‘\0’ fait un peu bourrin, mais ça a le mérite de fonctionner. Si quelqu’un a une meilleure idée, je suis prenneur!

Hello,
J’ai un peu le même genre de problème.
Je voudrais pouvoir installer sous Windows en utilisant l’installeur NSIS une appli que j’ai developpée avec tout ce qu’il faut pour qu’elle fonctionne et, entre autres, le fameux driver ODBC MySQL.
Reste un soucis : paramètrer le driver installé lui-même, c’est a dire bypasser “l’administrateur de source de données ODBC” graphique.
Y a t-il moyen de lancer cet administrateur en ligne de commande en lui passant les arguments tels que nom de la ressource, pilote, description, nom de serveur, nom de l’utilisateur, password, database, port, ainsi que toutes les options que l’on peut trouver quand on configure sa ressource avec l’outil graphique?
Voir même lancer le test de connection et tester le résultat…
Le but est de pouvoir lancer cette commande par NSIS et ainsi, en plus d’installer le driver MySQL, le configurer automatiquement.
Si vous avez une idée sur comment je pourrais faire, n’hésitez pas!
Salutations
DD