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 :

Accès dynamique à différent fichier database


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Accès dynamique à différent fichier database
    Bonjour à tous,

    J'ai besoin d'accéder à des fichiers dont je ne connais pas le nom (l'utilisateur entre le nom). Normalement cela ne me cause pas trop de soucis. Dans ce cas-ci, je dois utiliser le fichier pointé par l'utilisateur comme source pour ma DBGrid. En d'autre termes, ma DBGrid accède à un fichier .PMR (qui s'ouvre très bien avec accèss et avec la DBGrid) via un TQuery et un TDataSource. Alors, c'est donc de créer dynamiquement un alias?

    Je suis un peu nouveau dans les base de donnée.. alors excuser mon ignorance!

    merci à l'avance!

    antoine

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Tu dois pouvoir assigner le nom de ton fichier en runtime depuis une propriété de ta composante qui localise la base de données. Tu utilises quelle composante pour cela?


    PS: C'est quel genre de database les fichiers "pmr" ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    Bonjour Patrick,

    merci de ton intérêt,


    Les fichiers .PMR sont des fichier database de MS Access au meme titre que les .MDB (il doit y avoir certaines différences, mais je ne les connais pas et les PMR fonctionnent avec borland tout comme les MDB alors... je ne saurais quoi dire).

    Vous devez vous posez la question "Pourquoi utilisez des PMR alors?". Ce sont des fichiers qui résultent d'une application dont je n'ai pas le contrôle.

    Ensuite, les composantes que j'utilise sont :

    Une TDBGrid qui pointe vers une TDataSource qu'elle pointe vers un TQuery qui pointe vers une database que j'ai configuré dans le SQL Explorer (pointant vers mon fichier .PMR).

    Je suis pas certain que sa soit clair... peut-être que ceci aidera :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DBGrid1->DataSource = "DataSource1";
    DataSource1->Dataset = "Query1";
    Query1->DatabaseName = "antoine2";
    Je ne suis pas sur de comprendre ce que vous avez dit à propos des runtime...

    désolé pour mon ignorance.

    merci,

    antoine

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Désolé!
    Désolé tout le monde, j'ai mal faite mes devoirs :

    http://www.developpez.net/forums/d47...ique-bde-odbc/

    http://www.developpez.net/forums/d23...amique-dalias/

    Je m'y mets.

    antoine

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Suite...
    Bonjour, encore moi!

    Juste pour aider ceux qui voudrait utiliser les codes que j'ai mit en lien ci-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(NULL,"open","odbcconf","configsysdsn \"Microsoft Access Driver (*.mdb)\" \"DSN=dsn2;DBQ=C:\mabase.mdb;\"",0,SW_SHOWDEFAULT);
    C'est mieux de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(NULL,"open","odbcconf","configsysdsn \"Microsoft Access Driver (*.mdb)\" \"DSN=MonAlias;DBQ=C:\\mabase.mdb;\"",0,SW_SHOWDEFAULT);

    Et pour l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Query1->DatabaseName = "MonAlias";
    Query1->Active = true;
    Cependant, j'ai un probleme lorsque je veux permettre à l'utilisateur de modifier le fichier à son aise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AnsiString dbFichierNom = NomduFichier->Text;
    ShellExecute(NULL,"open","odbcconf","configsysdsn \"Microsoft Access Driver (*.mdb)\" \"DSN=MonAlias;DBQ=C:\\" + dbFichierNom + ".mdb;\"",0,SW_SHOWDEFAULT);
    L'erreur est une erreur qui me reviens souvent et dont je n'ai pas encore réussit à règler. :

    "Cannot convert 'AnsiString' to '...' "

    dans ce cas-ci : ... = const char *

    Pouvez-vous m'indiquer un emplacement où chercher de l'info sur cette conversion?

    Ou tout simplement me renseigner directement?

    Merci infiniment,

    Antoine

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Autre questions
    J'ai toujours mon problème de nom de fichier dynamique, mais j'ai aussi un autre problème.

    Lorsque je créer dynamiquement un nouveau alias pour un nouveau fichier .mbd (ou PMR, les deux fonctionnent de la même façon), l'alias reste présent même lorsque le programme est fermé. Je m'explique :

    Je compile mon programme qui est constitué d'un bouton qui a pour action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
     
    ShellExecute(NULL,"open","odbcconf","configsysdsn \"Microsoft Access Driver (*.mdb)\" \"DSN=Selection;DBQ=C:\\mabase.mdb;\"",0,SW_SHOWDEFAULT);
    Query1->DatabaseName = "Selection";
    Query1->Active = true;
    }
    Je test mon programme tout va bien, les données de mabase.mdb se retrouve dans ma DBGrid et je peux filtrer etc. Je ferme mon test.

    Je vais dans mon Database Explorer. Mon alias (MonAlias) est toujours présent. Alors pour la seconde exécution du programme je n'ai plus besoin de la ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(NULL,"open","odbcconf","configsysdsn \"Microsoft Access Driver (*.mdb)\" \"DSN=Selection;DBQ=C:\\mabase.mdb;\"",0,SW_SHOWDEFAULT);
    pour que mon bouton fonctionne.

    Pour l'instant ce n'est pas un problème, mais si le logiciel garde en mémoire toutes mes alias créés dynamiquement, je vais finir par avoir un problème.

    Je me posais comme question si c'était seulement un phénomène qui dure sous Borland et du moment que j'effectue une compilation finale, ce phénomène ne se produiera plus?

    Enfin, je me demandais comment effacer dynamiquement un alias.

    J'imagine que ça doit être avec la commande ShellExecute(), mais je n'ai pas encore trouver comment.

    Merci de votre patience.

    Antoine

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Citation Envoyé par antoinelac Voir le message
    L'erreur est une erreur qui me reviens souvent et dont je n'ai pas encore réussit à règler. :

    "Cannot convert 'AnsiString' to '...' "

    dans ce cas-ci : ... = const char *
    C'est parce que tu as un objet de type "AnsiString" et que la fonction attend un "const char*". Tu peux convertir avec la fonction "c_str()" de AnsiString:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnsiString text="Hello";
    text.c_str();

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

Discussions similaires

  1. [C#] Utiliser dynamiquement un fichier de config différent ?
    Par StringBuilder dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/04/2011, 13h19
  2. [XSL]Accès totalement dynamique à un fichier
    Par Wells dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 03/07/2008, 17h36
  3. Réponses: 5
    Dernier message: 07/05/2004, 09h44
  4. problème d'acces concurentiel à un fichier
    Par Theoden dans le forum MFC
    Réponses: 2
    Dernier message: 04/03/2004, 09h49
  5. Chemin d'accès d'un fichier
    Par guitaros dans le forum Langage
    Réponses: 6
    Dernier message: 16/01/2004, 09h27

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