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

Bases de données Delphi Discussion :

[Delphi 2005 + Interbase] Paramétrer le chemin la Database


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut [Delphi 2005 + Interbase] Paramétrer le chemin la Database
    Bonjour à tous,

    J'ai une application Delphi qui utilise plusieurs DataModule (composants IBX avec Interbase 6.0). Cette appli étant destinée à être installée chez différents clients, l'emplacement de la base de données doit donc être paramétrable.

    J'aimerais connaître votre avis avant de mettre en oeuvre :

    D'après votre expérience, quelle est la meilleure façon de paramétrer le composant IBDatabase dans ce contexte ?

    Pour aller un peu plus loin, j'ai pensé à faire ceci :
    l'événement OnCreate de chaque fiche utilisant un Datamodule initialise ce dernier de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if not Assigned(DataModule7) then DataModule7:= TDataModule7.Create(self);
      RecupBDD(ParamAppli.PathBDD);
    et chaque DataModule comporte cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Procedure RecupBDD(BDD : string);
    var Reponse : word;
    begin
     try
       DataModule4.IBDatabase.DatabaseName := BDD;
     except
      Reponse:=MessageDlg('Bases de données non trouvées.'+ #10+#13 +
                   'Arrêt de l''application', mtError, [mbAbort], 0);
      halt;
     end ;
    end;
    La variable BDD est récupérée dans le fichier INI de l'application.

    Qu'en pensez-vous ?

    Merci de votre aide.

  2. #2
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    J'ai un mal terrible a comprendre ce que tu veux faire.

    Pourquoi creer les datamodules ?


    Pour le IBDatabase je te conseillerai de paramétrer le databasename au demarrage de ton appli. (avec le chemin de ta BDD).

    Tu conserve le chemin dans un fichier texte (nommé en .ini par exemple) que tu lis a l'ouvertude de l'appli.

    A++

    [EDIT] oups, c'est ce que tu fais deja, c'est tres bien , juste je comprend pas pourquoi tu essaye de construire tes datamodules.[/EDIT]

    Reedit : perso je garderais la variable BDD en tant que variable globale pour ne pas avoir à relire le fichier texte X fois à l'ouverture du prog.

    Par contre, si j'ai bien compris tu as autant de IBDatabase que de Fiches, franchement je n'ai jamais essaye cette technique : moi j'ai un seul IBDatabase sur lequel tous les datasets sont liés.

    Attention le .NET sur PDA peut causer des chutes de cheveux

  3. #3
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Merci de ta réponse.

    Pourquoi creer les datamodules ?
    Pardon de m'être mal exprimé.

    L'appli utilise plus d'1 trentaine de fiches. La plupart de ces fiches sont reliées à des DataModule. Ceux-ci contiennent des composants d'accés à la database.

    J'ai constaté que lorsque les DataModules se créent automatiquement, le temps de chargement de l'appli est trés important (plusieurs secondes).

    Je crée donc ces DataModule chaque fois qu'une fiche est appelée.

    Mais peut-être que je n'emploie pas la bonne méthode ?

  4. #4
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    Je ne peux pas te dire si ta méthode est mauvaise, elle est juste différente de la mienne, et on a surement des impératifs différents.
    En général j'essaye de faire de maniere à ce que l'ouverture des fiches soit le plus rapide possible car après tout c'est ce que l'utilisateur fait en utilisant le prog. Et je me permet un petit chargement au démarrage du logiciel, avec une jauge et tout.

    Du coup je réunis tous mes compos BDD sur un ou deux Datamodules avec un seul IBDatabase par BDD. Ensuite je connecte toutes mes tables dessus au besoin. A Noter que je me permet aussi quelques compos non visuels sur les fiches si nécessaire (une quantité modérée).

    Attention le .NET sur PDA peut causer des chutes de cheveux

  5. #5
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Ca y est, on parle d'architecture ! Mais c'est intéressant et je m'aperçois que le sujet ressurgit régulièrement.

    J'ai débuté Delphi il y a 6 mois avec un projet assez vaste que j'ai recommencé une 2eme fois car ce ne me plaisait pas (j'avais un peu de temps, merci !).

    Donc, voici comment je procède :
    1 fonctionnalité = 1 fiche.
    1 fiche = 1 DataModule (grossièrement...)
    1 Data Module = 1 composant IBDatabase + quelques IBQuery (5 au maxi) reliés à des IBTransactions (1 IBtransaction par "sous-fonctionnalité") + DataSources si besoin.

    Je privilégie la lisibilité. Donc, avec mon principe je peux faire accés à la même table (ou vue) selon des critères identiques dans 2 (ou plus) DataModule différents. J'ai donc une certaine redondance du code, mais pas si énorme.

    Au début, j'accédais à la base par des fonctions ou des procédures au niveau de chaque fiche. Du genre :

    function RechercheNomClient(id-client)

    Trop lourd, pas assez lisible.

    Maintenant, tous mes ordres SQL sont codés dans la fiche. J'utilise donc largement les :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with ModuleDonnes01 do
    begin
    ....
    end;
    Il n'est donc pas rare que certaines fiches fassent entre 500 ou 600 lignes.

    Le seul composant orienté BD que j'utilise sont les DBGrid et les DBedit (sans en abuser). J'ai eu certains déboire en voulant utiliser les autres (DBLookupComboBox) qui ne répondent que partiellement à mes besoins.

    Voilà. J'ai encore bcp de choses à apprendre, en particulier la puissance du langage objet. Je pense savoir ce qu'est l'héritage ou le polymorphisme. Seulement, concrètement, je n'ai pas toujours les bons réflexes...

    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2003
    Messages : 51
    Points : 60
    Points
    60
    Par défaut
    Salut à tous,


    Perso, j'utilise un datamodule contenant mon objet database qui me sert pour toute l'appli et est créé au démarrage de l'application.

    Ensuite pour chaque fiche, j'ai un datamodule créé en ouverture de fiche.
    Les composants BD (Query....) pointent vers le datamodule principal pour la connection à la base.

    Les tmeps de réponse et de lancement de l'appli sont correct.

  7. #7
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Je vais retenir ton idée : j'utilise un composant Database par DataModule, ce qui n'est pas terrible...

Discussions similaires

  1. [Interbase]Delphy 2005
    Par JMDG13 dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/10/2005, 18h22
  2. problème avec Foreign Key [Interbase 7.5] [Delphi 2005]
    Par xenos dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/09/2005, 11h21
  3. [DELPHI 2005] Paramètre ADO, SQL Server et chaîne vide (' ')
    Par danbern dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2005, 15h21
  4. [Delphi 2005][Interbase] Licence ?
    Par aem_ dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/08/2005, 15h13
  5. [Delphi 2005][INTERBASE] isEmpty toujours faux
    Par Vulcanos dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/03/2005, 20h43

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