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 :

Avoir une base de données mobile sous ADOConnection


Sujet :

C++Builder

  1. #1
    bruce-willis
    Invité(e)
    Par défaut Avoir une base de données mobile sous ADOConnection
    Slt!

    J'utilise ADO pour se connecter et manipuler une BD Access.
    Mon problème c'est que le fichier .mdb doit être alors dans un répertoire fixe et précis (non pas dossier1\bb.mdb mais C:\Mes documents\dossier\bb.mdb).

    Alors que faire, faut-il recompiler tjrs le projet à chaque changement de répertoire?

  2. #2
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Pour faire ce que tu désires, il faut que tu créés la valeur pour le propriété ConnectionString de ton TAdoConnection dans ton code.

    Exemple dans le cas d'une connexion ODBC:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AnsiString base = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=MaConnexionODBC;Initial Catalog=";
    base += CheminBase;

  3. #3
    Membre chevronné

    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
    Par défaut
    Pour compléter ce que vient de dire Bakaneto (mode Odbc) ci dessous examples avec Access et Dbo(ADO):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(FileExists(NomBaseLocale) && FileExists(NomBaseParam) && FileExists(NomBaseDataBase) && FileExists(NomBaseData))
    	{ // connextion uniquement si toutes les bases sont présentes
    	LocalConnection->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+NomBaseLocale+";Persist Security Info=False";
    	ParamConnection->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+NomBaseParam+";Persist Security Info=False";
    	DataBaseConnection->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+NomBaseDataBase+";Persist Security Info=False";
    	DataConnection->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+NomBaseData+";Persist Security Info=False";
    	}
    Les composant doivent au départ avoir la propriété Connected à false bien sur, et après affectation il faut remettre cette propriété a true (Nota: elle se remet aussi automatiquement lorsqu'un Dataset ou Query est activé).

    J'en profite aussi pour dire que sous Access, les procédures Stockées fonctionnent super bien (contrairement à ce qui est dit sur certains forum), et c'est pas mal pour le développement des requêtes complexes, c'est plus rapide et cela décharge le réseau.

  4. #4
    bruce-willis
    Invité(e)
    Par défaut
    Ah oui, on peut éditer directement ConnectionString. Je le configure toujours par clic avant, c'est pour cela que j'ai créé cette discussion.Donc, par ex, si le prog est dans le même répertoire que l'executable, il suffira de manipuler Application->Exename.

    Je voudrais aussi savoir qu'est-ce que Microsoft Jet OLE DB Provider et Microsoft OLE DB Provider?

    FBartolo, peux-tu être plus précis car je ne comprends pas!!!!

    Merci d'avance

  5. #5
    Membre chevronné

    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
    Par défaut
    Si tu souhaites voir en mode conception tes données dans tes TdbGrid par exemple, tu réalises à la main la configuration de ton composant.

    Cette méthode doit être à banir à mon sens en mode exécution car si la base n'est pas trouvée tu obtiendra directement à la création de ta fiche des belles "insultes".

    Dans l'exemple que je donne (avec 4 bases) je teste d'abord que la base existe car en réseau (avec le chemin complet), ensuite j'affecte la chaine au ConnexioString et je valide la liaison (prévoir de mettre un try quand même à l'activation).

    Si ta base de donnée est toujours à coté de ton exécutable (donc en local) tu peux mettre le chemin en optant pour un GetCurrentDir + "NomBase.mdb" que tu placeras dans ta chaine de connexion de façon dynamique comme dans les exemples.

    Maintenant pour ce qui concerne OLE DB Provider, je crois que c'est ODBC, ce qui implique la création d'un alias en local sur les postes concernés alors que, pour Access, Jet Engine te permet de t'affranchir d'ODBC et d'après mes tests est plus performant en terme de rapidité.

    j'espère avoir répondu à tes intérogations.

  6. #6
    bruce-willis
    Invité(e)
    Par défaut
    Je crois bien que pour une bd à côté de mon exécutable GetCurrentDir() n'est pas la solution. J'ai déja eu une mauvaise surprise sur cette fonction lors d'une présentation d'un logiciel car son contenu change lorsqu'on utilise un TDialog (TOpenDialog).Vaut mieux: ExtractFilePath(Application->Exename).

    Je crois que c'est résolu maintenant!!

    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/07/2007, 12h14
  2. Réponses: 2
    Dernier message: 21/05/2007, 15h02
  3. Réponses: 1
    Dernier message: 30/01/2007, 14h07
  4. Réponses: 9
    Dernier message: 17/01/2007, 23h37
  5. Réponses: 3
    Dernier message: 06/06/2006, 08h06

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