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

C++Builder Discussion :

Déclarer BD Access, sans passer par l'ODBC


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut Déclarer BD Access, sans passer par l'ODBC
    Bonjour
    Lorsque j'utilise une BD Access dans mon programme, je dois déclarer la source de donnée dans l'ODBC de Windows. Jusque là, pas de problème. Le problème c'est que je dois le faire à chaque fois que je change de poste.

    L'idéal serait de déclarer dans le code de l'application, la source de donnée
    Je ne sais pas si c'est possible

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    C'est tout a fais possible, en sachant que cette information est simplement une clé dans la base des registres. Pour ajouter un alias ODBC, il suffit donc de créer des entrées dans la base des registres Windows (avec TRegistry).
    Créer un alias ODBC de facon "classique", puis va vérifier dans la base de registre les entrées qui ont été
    créer dans \\Software\\ODBC\\ODBC.INI\\ODBC Data Sources.
    Il te suffit alors de créer les même par programme.

    Voilà une fonction qui pourrait faire l'affaire (à vérifier!!):

    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
     
    #include <registry.hpp>
    [...]
     
    bool CreateAliasODBC( AnsiString aAliasName, AnsiString aFilenameMDB )
    {
      TRegistry *reg = new TRegistry() ;
      reg->RootKey = HKEY_LOCAL_MACHINE ;
     
      if( !reg->OpenKey( "\\Software\\ODBC\\ODBC.INI\\ODBC Data Sources",false ) )
      {
         return( false ) ;
      }
      reg->WriteString( aAliasName, "Microsoft Access Driver (*.mdb)" ) ;
     
      if( !reg->OpenKey("\\Software\\ODBC\\ODBC.INI\\" +aAliasName,true) )
      {
        return( false );
      }
      reg->WriteString( "DBQ", aFilenameMDB ) ;
      reg->WriteString( "Driver", "C:\\WINDOWS\\System32\\odbcjt32.dll" ) ;
      reg->WriteInteger( "DriverId", 25 ) ;
      reg->WriteString( "FIL", "MS Access;" ) ;
      reg->WriteString( "UID", "" ) ;
      reg->WriteInteger( "SafeTransactions", 0 ) ;
      delete reg ;
      return( true );
    }
    Cette fonction est a utiliser de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CreateAliasODBC( "NOM_ALIAS_PERSO", "C:\\Program Files\\MonAppli\\myDB.mdb" ) ;
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Points : 537
    Points
    537
    Par défaut
    Ou alors utiliser ADO (TADOxxx) qui ne nécessite aucune déclaration d'alias et qui est bien plus rapide en exécution (le moteur jet étant installé d'office dans tous les PC) et tu peux même exécuter des requêtes stockée dans Access... et c'est méga rapide (like procédures stockées)

  4. #4
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    j'ai utilisée votre code sat83 mais j'ai pas réussi.
    merci d'avance

  5. #5
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par faniette Voir le message
    Bonjour,
    j'ai utilisée votre code sat83 mais j'ai pas réussi.
    merci d'avance
    faniette, tu laisses souvent sur le forum des messages incomplet. Peut-tu préciser se qui ne fonctionne pas. Est-ce que tu as des messages d'erreur ou des warnings?

    Est-ce que tu as les droits d'administrateur sur la machine où tu teste car des fois HKEY_LOCAL_MACHINE n'est pas accessible en écriture?

    Est-ce que tu as vérifier le registre pour voir si les clefs étaient écrite?

    À la place d'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateAliasODBC( "NOM_ALIAS_PERSO", "C:\\Program Files\\MonAppli\\myDB.mdb" ) ;
    Essaie plustôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(CreateAliasODBC( "NOM_ALIAS_PERSO", "C:\\Program Files\\MonAppli\\myDB.mdb" ) == false)
    {
        ShowMessage("Il y a eu un problème avec la fonction CreateAliasODBC");
    }
    La prochaine fois que sa ne fonctionne pas, peux-tu mettre le code que tu as utilisé.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  6. #6
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    Bonjour
    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
    Voici le code que j'ai utilisé
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit5.h"
    #include "Unit11.h"
    #include "Unit37.h"
    #include "Unit38.h"
    #include "Unit41.h"
    #include "Unit42.h"
    #include <registry.hpp>
     
     
    bool CreateAliasODBC( AnsiString aAliasName, AnsiString aFilenameMDB )
    {
      TRegistry *reg = new TRegistry() ;
      reg->RootKey = HKEY_LOCAL_MACHINE ;
     
      if( !reg->OpenKey( "\\Software\\ODBC\\ODBC.INI\\ODBC Data Sources",false ) )
      {
         return( false ) ;
      }
      reg->WriteString( aAliasName, "Microsoft Access Driver (*.mdb)" ) ;
     
      if( !reg->OpenKey("\\Software\\ODBC\\ODBC.INI\\" +aAliasName,true) )
      {
        return( false );
      }
      reg->WriteString( "DBQ", aFilenameMDB ) ;
      reg->WriteString( "Driver", "C:\\WINDOWS\\System32\\odbcjt32.dll" ) ;
      reg->WriteInteger( "DriverId", 25 ) ;
      reg->WriteString( "FIL", "MS Access;" ) ;
      reg->WriteString( "UID", "" ) ;
      reg->WriteInteger( "SafeTransactions", 0 ) ;
      delete reg ;
      return( true );
      if(CreateAliasODBC( "system", "C:\\Dossier\\Capitale.mdb" ) == false)
    {
        ShowMessage("Il y a eu un problème avec la fonction CreateAliasODBC");
    }
    }
    apres execution quand je click sur le ok de l'invite de connexion de l'application j'ai une notification d'une exception du débogueur
    "LE PROJET A PROVOQUE UNE CLASSE D'EXCEPTION EDBENGINEERROR AVEC LE MESSAGE 'paramétre de configuration incorrect"
    merci d'avance pour votre aide

  7. #7
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Est-ce que c'est une erreur de copier/coller ou tu as vraiment mis du code après le return( true )???
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  8. #8
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    salut
    j'ai pas comprie quesque tu veut dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tu as vraiment mis du code après le return( true )???
    mais j'ai fait copier /coller de code , est ce que il ya une autre methode de le faire?
    merci d'avance

  9. #9
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      return( true );
      // LE CODE QUI SUIT NE SERA JAMAIS EXÉCUTÉ,
      // CAR TU SORS DE LA FONCTION AVEC LA LIGNE PRÉCÉDENTE
      if(CreateAliasODBC( "system", "C:\\Dossier\\Capitale.mdb" ) == false)
    {
        ShowMessage("Il y a eu un problème avec la fonction CreateAliasODBC");
    }
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  10. #10
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    sayé j'ai résolu le probleme, merciiiiiiii

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/01/2014, 10h20
  2. Specifier le chemin de BDD dBASE sans passer par odbc
    Par faniette dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/12/2010, 09h03
  3. Firebird, communication directe sans passer par un driver odbc
    Par tonic29 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 02/03/2008, 19h18
  4. [BDE][Access] utilisation de BDDs sans passer par ODBC
    Par Guigui_ dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/01/2005, 14h11
  5. [Kylix] Débrider Kylix sans passer par le Net
    Par BXDSPORT dans le forum EDI
    Réponses: 1
    Dernier message: 23/03/2003, 10h52

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