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

Windows Discussion :

[2000] automatiser la creation d'une sources de données ODBC


Sujet :

Windows

  1. #1
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut [2000] automatiser la creation d'une sources de données ODBC
    Salut à tous,

    Je dois ajouter des sources de données ODBC sur plusieurs postes d'un réseau et j'aimerais automatiser tout ça. En effet, pour ajouter une source de données ODBC il faut aller dans le panneau de config -> outils d'administration -> Sources de données (ODBC), puis ajouter une source en spécifiant le nom, la description, l'utilisateur et le serveur.
    Ceci devant être fait sur un certain nombre de poste et etant donné que seul l'utilisateur change (en fait c'est celui du poste), je voudrais savoir s'il est possible d'automatiser un peu tout ça (éventuellement en faisant un petit programme (pas trop compliquer) pour le distribuer via un msi).

    Merci d'avance.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    une solution à base de script mais le déploiement ne seras peut être pas aisé. A l'origine il s'agit d'automatisation sur des serveurs Citrix il faut un peu l'adapter.
    J'utilise des fichiers .inf :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    echo off
     rem mkODBC.CMD
     rem Insertion/ création des entrées du fichier ODBC.INI
    
    set InfName=sde-odbc.inf
    set PATHInfName=\\Pruneau\D$\Livraison\SDE
    
    del create.log /Q /F
    
    echo ; File created with %0>%infname%
    echo.>>%infname%
    echo [Version]>>%infname%
    echo Signature = "$Windows NT$">>%infname%
    echo.
    echo [DefaultInstall]>>%infname%
    echo UpdateInis = UpdateInis>>%infname%
    echo.>>%infname%
    echo [UpdateInis]>>%infname%
    
    for  /f "Skip=1 tokens=1,2,3,4 delims=;" %%I in (newodbc.txt) do call _inf.cmd %%I %%J %%K %%L 
    
    pause
     rem exécute le fichier généré
     rem renseigne la base de registre et le fichier h:\wtsrv\odbc.ini
    Change User /install
     rundll32 setupapi,InstallHinfSection DefaultInstall 128 %pathInfName%\%InfName%
    Change User /Execute
    
     rem supprime les variables utilisées pour ce script
    set InfName=
    set BaseName=
    set Schema=
    SET BaseType=
    Set SDEUserName=
    Set SchemaName=
    set DLLPath=
    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
    23
    24
    25
    26
    27
    28
    29
    echo off
     rem script appelé par MkOdbc.cmd
     rem Génére un fichier .INF pour les entrées du fichier ODBC.INI
    
    set BaseName=%1
    set Schema=%2
    SET BaseType=%3
    Set SDEUserName=%4
    
    Set SchemaName=%BaseName%_%Schema%
    
    set  DLLPath=K:\tools\orawin\ODBC\SQORA73N.DLL
    
    
    echo "h:\Wtsrv\odbc.ini","ODBC Data Sources",,"%SchemaName%=%baseType%">>%infname%
    
    echo "h:\Wtsrv\odbc.ini","%SchemaName%",,"Driver=%DLLPath%">>%infname%
    
    echo "h:\Wtsrv\odbc.ini","%SchemaName%",,"Server=%BaseName%">>%infname%
    
    echo "h:\Wtsrv\odbc.ini","%SchemaName%",,"UserId=%SDEUserName%">>%infname%
    
    echo "h:\Wtsrv\odbc.ini","%SchemaName%",,"AsyncSupport=Disabled">>%infname%
    
    Echo create Data Sources : %SchemaName%
    echo.
    Echo create Data Sources : %SchemaName% >>create.log
    echo.>>create.log
    newodbc.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ;nom de base;nom de schema;type de database;nom utilisateur
    baserjmd;SDE;Oracle73;sasde
    ...
    tu peux aussi utiliser des fichiers de registry, pour des DSN user :
    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
    23
    24
    25
    26
    27
    28
    [HKEY_CURRENT_USER\Software\ODBC]
    
    [HKEY_CURRENT_USER\Software\ODBC\ODBC.INI]
    [HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\XXXXCITRIX2]
    "Driver"="H:\\WTSRV\\system32\\SYSYBNT.DLL"
    "Description"="Homologation XXXX Asie/Paris"
    "ServerName"="XXXXX"
    "Servers"=""
    "Database"="XXXXCITRIX2"
    "Databases"=""
    "LogonID"="XXUSER"
    "InterfacesFile"=""
    "Charset"=""
    "WorkStationID"=""
    "Language"=""
    "ApplicationName"=""
    "OptimizePrepare"="2"
    "ArraySize"="50"
    "SelectMethod"="1"
    "PacketSize"="0"
    "CursorCacheSize"="1"
    "PasswordEncryption"="0"
    "ApplicationUsingThreads"="1"
    "EnableQuotedIdentifiers"="0"
    "SecurityServiceProvider"=""
    "DirectoryServiceProvider"=""
    "InitializationString"=""

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Merci, je regarderai ça lundi au boulot et je te tiens au courant
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    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 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Salut, tout d'abord merci beaucoup pour ton aide et ces solutions variées
    Je vais d'abord voir la solution avec les scripts. J'ai donc regardé de prés le code que tu m'as donné et j'ai deux questions.

    1° Qu'est-ce que la commande "Change" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Change User /install
    ...
    Change User /Execute
    Mon système me dit qu'il connaît pas.

    2° Il faut donc renseigner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ;nom de base;nom de schema;type de database;nom utilisateur
    Mais à quoi correspondent-ils par rapport aux champs que l'on entre quand on fait la manip manuellement ("Nom de la source de données", "description", "Nom d'utilisateur", "Serveur") ? Pour le nom d'utilisateur ça va et pour le type je pense que dans mon cas il s'agit de "Oracle92" mais pour les autres je suis pas sûr.

    Merci encore.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par le y@m's
    1° Qu'est-ce que la commande "Change" ?[code]
    Sous Windows TSE cela indique au systéme de prendre en compte les modifications effectuées sur le système lors d'une d'installation, enfin si je me souviens bien. Donc tu peux les retirer.
    Citation Envoyé par le y@m's
    pour le type je pense que dans mon cas il s'agit de "Oracle92" mais pour les autres je suis pas sûr.
    et ceci est-il plus parlant ?
    baserdjd;SDE;Oracle73;sasde
    Cela date de 4-5 ans donc je ne me souviens plus trop mais ça tournais en prod pour des utilisateurs Front et Back Office.

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Bon je me suis finalement rabattu vers la solution C++, et après moult péripéties, ça marche nickel

    Voici mon code (très largement inspiré de celui d'Aurelien.Regat-Barrel )
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #ifndef H_ORAWRAPPER
    #define H_ORAWRAPPER
    
    #include <string>
    
    class OraWrapper
    &#123;
    public&#58;
    
    
       /// crée une source ODBC avec authentification faite par Oracle
       static bool CreateDSN&#40;
          const std&#58;&#58;string SourceName,      /// nom de la source ODBC
          const std&#58;&#58;string SourceDescr,   /// description
          const std&#58;&#58;string Server,         /// nom du serveur
          const std&#58;&#58;string User            /// utilisateur
          &#41;;
    
    
       /// supprime source ODBC dont le nom est donné
       static bool RemoveDSN&#40;
          const std&#58;&#58;string SourceName      /// nom de la source ODBC
          &#41;;
    
       /// teste si la source donnée est déjà créée
       static bool IsExistingDSN&#40;
          const std&#58;&#58;string SourceName      /// nom de la source ODBC
          &#41;;
    
       /// en cas d'erreur, cette fonction renvoie un message explicatif
       static std&#58;&#58;string GetLastErrorMsg&#40;&#41;;
    &#125;;
    
    #endif
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    define WIN32_LEAN_AND_MEAN
    #include <string.h>
    #include <windows.h>
    #include <odbcinst.h>
    #include "orawrapper.h"
    
    
    
    /// crée une source ODBC avec authentification faite par Oracle
    bool OraWrapper&#58;&#58;CreateDSN&#40;
       const std&#58;&#58;string SourceName,      /// nom de la source ODBC
       const std&#58;&#58;string SourceDescr,   /// description
       const std&#58;&#58;string Server,         /// nom du serveur
       const std&#58;&#58;string User       /// utilisateur
       &#41;
    &#123;
       std&#58;&#58;string odbc_cfg_params;
       odbc_cfg_params += "DSN=";
       odbc_cfg_params += SourceName;
       odbc_cfg_params += '\0';
    
       odbc_cfg_params += "Description=";
       odbc_cfg_params += SourceDescr;
       odbc_cfg_params += '\0';
    
       odbc_cfg_params += "Server=";
       odbc_cfg_params += Server;
       odbc_cfg_params += '\0';
    
       odbc_cfg_params += "UID=";
       odbc_cfg_params += User;
       odbc_cfg_params += '\0';
    
       BOOL ret = SQLConfigDataSource&#40;
          NULL,
          ODBC_ADD_DSN,
          "Microsoft ODBC for Oracle",
          odbc_cfg_params.c_str&#40;&#41;&#41;;
       return ret == TRUE;
    &#125;
    
    
    /// supprime source ODBC dont le nom est donné
    bool OraWrapper&#58;&#58;RemoveDSN&#40;
       const std&#58;&#58;string SourceName      /// nom de la source ODBC
       &#41;
    &#123;
       std&#58;&#58;string odbc_cfg_params;
       odbc_cfg_params += "DSN=";
       odbc_cfg_params += SourceName;
       odbc_cfg_params += '\0';
    
        BOOL ret = SQLConfigDataSource&#40;
          NULL,
          ODBC_REMOVE_DSN,
          "Microsoft ODBC for Oracle",
          odbc_cfg_params.c_str&#40;&#41; &#41;;
    
       return ret == TRUE;
    &#125;
    
    /// teste si la source donnée est déjà créée
    bool OraWrapper&#58;&#58;IsExistingDSN&#40;
       const std&#58;&#58;string SourceName      /// nom de la source ODBC
       &#41;
    &#123;
       // on teste l'existence / l'accès de la clé dans la BDR
       // à HKCU\Software\ODBC\ODBC.INI\<source_name>
    
       std&#58;&#58;string hkey_path =
          "Software\\ODBC\\ODBC.INI\\";
       hkey_path += SourceName;
    
       HKEY hKey;
       if &#40; RegOpenKeyEx&#40;
          HKEY_CURRENT_USER,
          hkey_path.c_str&#40;&#41;,
          0,
          KEY_READ,
          &hKey &#41; == ERROR_SUCCESS &#41;
       &#123;
          RegCloseKey&#40; hKey &#41;;
          return true;
       &#125;
       return false;
    &#125;
    
    /// en cas d'erreur, cette fonction renvoie un message explicatif
    std&#58;&#58;string OraWrapper&#58;&#58;GetLastErrorMsg&#40;&#41;
    &#123;
       DWORD ErrorCode;
       const int ErrorMsgMaxSize = 1000;
       char ErrorMsg&#91; ErrorMsgMaxSize &#93;;
       WORD ErrorMsgSize;
    
    #ifdef SQLInstallerError // UNICODE...
    #undef SQLInstallerError
    #endif
       if &#40; SQLInstallerError&#40;
          1,
          &ErrorCode,
          ErrorMsg,
          ErrorMsgMaxSize,
          &ErrorMsgSize &#41; == SQL_SUCCESS &#41;
       &#123;
          return ErrorMsg;
       &#125;
       return "<Erreur inconnue>";
    &#125;
    ça doit faire deux ans que j'ai plus fait de c++ donc il y a surement des remarques à faire (n'hésitez pas ).

    Encore beaucoup à vous deux pour votre aide.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  2. Création d'une source de donnée ODBC
    Par Sylverx dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/09/2008, 11h50
  3. Réponses: 2
    Dernier message: 28/02/2008, 18h57
  4. Réponses: 1
    Dernier message: 25/02/2008, 13h50
  5. Sélectionner une source de données ODBC (DNS)
    Par Sebastos dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/04/2007, 15h49

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