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

Delphi Discussion :

Erreur de Création Source ODBC


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Par défaut Erreur de Création Source ODBC
    Bonjour a tous,
    Quand je crée un alias sur une Base de donnée Interbase (on utilisons le Driver Firebird_ODBC_1.2.0.69-Win32 ) avec l'administrateur ODBC, j'y ai accès sans problème Via Delphi.
    Par contre, je n'arrive pas à créer l'alias dynamiquement via mon programme Delphi
    Voici Mon Code
    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
     
    const
      PATH_ODBC = '\Software\ODBC\ODBC.INI\';
    Var fichierDriver, versionDriver : String;
     
     // Creation de la Source ODBC
      with TRegistry.Create do
      try
        { Recensement de la source de données }
        RootKey := HKEY_CURRENT_USER;
        OpenKey(PATH_ODBC + 'ODBC Data Sources',false);
        WriteString('Gescomm','Firebird/InterBase(r) driver');
        { Ecriture des paramètres }
        if not OpenKey(PATH_ODBC + 'MaSource1',true) then
          raise Exception.Create('impossible de créer la clé : <' + PATH_ODBC + 'MaSource1' + '>');
        fichierDriver := IfThen(ValueExists('Driver'),ReadString('Driver'));
        versionDriver := IfThen(ValueExists('DriverODBCVer'),ReadString('DriverODBCVer'));
        WriteString('Driver',fichierDriver);
        WriteString('Dbname', lechemin.Text); // chemin complet de la base de donnée
        WriteString('Client','');
        WriteString('User','SYSDBA');
        WriteString('Role','');
        WriteString('CharacterSet','NONE');
        WriteString('JdbcDriver','IscDbc');
        WriteString('ReadOnly','N');
        WriteString('NoWait','N');
        WriteString('Dialect','3');
        WriteString('QuotedIdentifier','Y');
        WriteString('SensitiveIdentifier','N');
        WriteString('AutoQuotedIdentifier','N');
        WriteString('Password','BGHKJUACICAIKKAOMCAEOKAKADAACHGFDLAKJHGFDKAEAACMAGEEAMGMACIEAIDK');
      finally
        Free;
      end;
    ce code est inspirer de notre Faq et aussi on utilisons le fameux utilitaire de Bloon (ODBCReg).
    merci a tous, et bon developpement

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut autre méthode
    J'utilise pour ma part une autre méthode, en passant par une API windows
    Voici le code:

    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
    program CreationDSNSqlServer;
    {$APPTYPE CONSOLE}
    uses
      sysutils;
     
    Const
    ODBC_ADD_DSN = 1;
    ODBC_CONFIG_DSN = 2;
    ODBC_REMOVE_DSN = 3;
    ODBC_ADD_SYS_DSN = 4;
    vbAPINull = 0;
    DriverSQLServer:AnsiString='SQL Server';
     
    function SQLConfigDataSource (hwndParent : Integer; fRequest : Longint;
             lpszDriver : AnsiString;
             lpszAttributes : AnsiString): Longint;stdcall;external 'ODBCCP32.DLL' name 'SQLConfigDataSource' ;
     
     
     
    Var
    i:integer;
    StrAttributes:AnsiString;
    NbParam,CodeRetour:Integer;
    msg:PChar;
    begin
         // 1er paramètre: Nom de la source de données ODBC
         // 2ème paramètre: Adresse du server (IP ou nom du PC)
         // 3ème paramètre: Nom de la base de données
     
         // remarque: il ne sert à rien de saisir un nom d'utilisateur ici, car on doit le saisir à chaque connexion par ODBC
         // un code retour est renvoyé. Il doit être différent de 0 pour que le paramétrage se soit bien passé.
         //Voir le site http://www.connectionstrings.com/ pour le détaiol des chaînes de connexion existantes
     
         If ParamCount<>3 then
         begin
              Writeln('Usage: creationDsn NomDeLaSourceDeDonnées AdresseServeur NomBd');
              Halt(0);
         end
         else
         begin
     
               StrAttributes:='DSN='+ParamStr(1)+#0;
               StrAttributes:=StrAttributes+'Server='+ParamStr(2)+#0;
               StrAttributes:=StrAttributes+'Database='+ParamStr(3)+#0;
               StrAttributes:=StrAttributes+'Trusted_Connection=yes'+#0;
     
               //cette ligne est dans le cas ou l'authentification se fait par WinNT
               //StrAttributes:=StrAttributes+'Trusted_Connection=yes'+#0;
     
               CodeRetour:=SQLConfigDataSource(vbApiNull,ODBC_ADD_SYS_DSN,DriverSQLServer,StrAttributes);
               if coderetour<>0 then
                  Writeln('OK')
               else
                   writeln('Problème, modifs non effetuées '+inttostr(CodeRetour));
     
     
               Halt(CodeRetour);
         end;
     
     
    end.
    Il te reste à modifier le code pour que ça marche pour un autre type de base de données que SQLServer. Plein d'infos sur www.connectionstrings.com

  3. #3
    Membre éclairé Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Par défaut
    Bonjour,
    Merci baucoup pour cette reponse , je vais tester immediatement.
    Bonne journée et merci encore.
    bon developpement.

  4. #4
    Membre éclairé Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Par défaut
    Bonjour,
    j'ai trouver la solution Merci a tous,
    et voici le bout de prgramme :
    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
    const
      ODBC_ADD_DSN=1;
      ODBC_REMOVE_DSN = 3 ;
     
      function SQLConfigDataSource(hwndParent:HWND;
                                 fRequest:WORD;
                                 lpszDriver:PCHAR;
                                 lpszAttributes:PCHAR):BOOL;
                                 stdcall; external 'odbccp32.dll';
     
     
     
    procedure TForm1.BitBtn1Click(Sender: TObject);// creation un DSN
    begin
    if SQLConfigDataSource(0, ODBC_ADD_DSN, pchar('Firebird/InterBase(r) driver'),
                            Pchar('DSN=MaSource'+ #0 +
                                  'Server=192.168.0.1'+ #0 + // server IP
                                  'Database=C:\MonLogiciel\MaBase.IB'+ #0 +
                                  'Uid=SYSDBA'+ #0 +
                                  'Pwd=masterkey'+ #0 +
                                  'Trusted_Connection=yes' +#0#0 ))
     
            then
      begin
        ShowMessage('DSN Créer');
      end
      else
      begin
        showMessage('Erreur');
      end;
    end;
     
    procedure TForm1.BitBtn2Click(Sender: TObject);// suppresion d'un DSN
    begin
    if SQLConfigDataSource(0, ODBC_REMOVE_DSN, pchar('Firebird/InterBase(r) driver'),
                            Pchar('DSN=MaSource'+ #0 +
                                  'Server=192.168.0.1'+ #0 + // server IP
                                  'Database=C:\MonLogiciel\MaBase.IB'+ #0 +
                                  'Uid=SYSDBA'+ #0 +
                                  'Pwd=masterkey'+ #0 +
                                  'Trusted_Connection=yes' +#0#0 ))
     
            then
      begin
        ShowMessage('DSN supprimer');
      end
      else
      begin
        showMessage('Erreur');
      end;
     
    end;
    Merci baucoup sbeu pour ton aide et bon developpement a tous.

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

Discussions similaires

  1. Création auto d'une source ODBC Sql
    Par eddyphan dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/04/2012, 22h22
  2. que pensez vous de ce code (Création source ODBC)
    Par aimer_Delphi dans le forum Débuter
    Réponses: 1
    Dernier message: 26/05/2010, 14h47
  3. Création source odbc machine
    Par yoann7 dans le forum C#
    Réponses: 1
    Dernier message: 26/03/2010, 12h11
  4. création dynamique d'une sources ODBC
    Par sodjinou dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/09/2009, 22h34
  5. comment automatiser la création d'une source ODBC ?
    Par belmansour tidjani dans le forum Windows
    Réponses: 2
    Dernier message: 22/02/2006, 10h10

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