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 :

Comment connecter une BDD pour une compilation.


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Comment connecter une BDD pour une compilation.
    Bonjour, quand je compile mon projet avec Inno Setup pour obtenir une application, la base de données de l’application est toujours connectée à la base de données du projet, pourquoi. Je suis sous Delphi 10.3 Rio, BDD Access et FastReport. Merci.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Il faut explicitement mette Active à False dans vos objets connexion et query, le design time c'est un piège pour les novices.
    Toujours commit vos sources en vérifiant que tous les objets DataSet sont fermés et produire votre package inno setup via une machine de build dédié par exemple un Final Builder.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 034
    Points : 40 936
    Points
    40 936
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Il faut explicitement mette Active à False dans vos objets connexion et query, le design time c'est un piège pour les novices.
    Pas que, il m'arrive encore de me faire piéger en maintenance de vieilles applications
    Surtout que, avec Firedac, utiliser (décocher) les propriétés ConnectedStoredUsage.auDesignTime et ConnectedStoredUsage.auRunTime évite (généralement) ce genre de problème
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Pas que, il m'arrive encore de me faire piéger en maintenance de vieilles applications
    Surtout que, avec Firedac, utiliser (décocher) les propriétés ConnectedStoredUsage.auDesignTime et ConnectedStoredUsage.auRunTime évite (généralement) ce genre de problème
    Dommage, je ne suis pas sous Firedac.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Il faut explicitement mette Active à False dans vos objets connexion et query, le design time c'est un piège pour les novices.
    Toujours commit vos sources en vérifiant que tous les objets DataSet sont fermés et produire votre package inno setup via une machine de build dédié par exemple un Final Builder.
    Bonjour, j'ai beau cherché et je ne me retrouve toujours pas. Si vous pouvez m'éclaicir encore un petit peu, sachant que je suis sous access.Merci.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 034
    Points : 40 936
    Points
    40 936
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par nacer0806dz Voir le message
    Dommage, je ne suis pas sous Firedac.
    Et c'est bien dommage sachant que Firedac permet d'accéder à MSAccess, je présume donc qu'il s'agit D'ADO et, ce que votre autre post indiquait : Access (en bref 2 choses qui ne sont absolument pas à mon goût)
    j'ai beau chercher et je ne me retrouve toujours pas
    Il faut "simplement" indiquer ADOconnection.Connected à False avant de compiler

    De même si vous voulez déployer sur un autre poste, vous devez vous assurer qu'Access est bien installé sur le poste en question
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Pas que, il m'arrive encore de me faire piéger en maintenance de vieilles applications
    Surtout que, avec Firedac, utiliser (décocher) les propriétés ConnectedStoredUsage.auDesignTime et ConnectedStoredUsage.auRunTime évite (généralement) ce genre de problème
    Ah voilà enfin un truc intelligent pour les utilisateurs de SQL en l'IDE, ce que je ne suis pas
    En ORA, je me suis fait ceci qui est très facilement adaptable à un TADOConnection ... l'utilisant en 100% allocation dynamique au RunTime où je travaille actuellement, je n'ai pas besoin de ce genre de protection qui était utile dans un ancien taf où le DataModule avait été choisi comme "coeur" de la partie DB, j'ai toujours préféré un mode plus Code que RAD.

    OraSessionEx.inc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      TOrasession = class(Ora.TOraSession)
      private
        function GetConnectedAllowed(): Boolean;
      protected
        procedure SetConnected(Value: Boolean); override;
      public
        property ConnectedAllowed: Boolean read GetConnectedAllowed;
      end;
    OraSessionEx.Impl.inc

    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
    { TOrasession }
     
    procedure TOrasession.SetConnected(Value: Boolean);
    begin
      if (Value and ConnectedAllowed) or not Value then
        inherited
      else
        raise exception.Create('Erreur DEVELOPPEUR : Connexion session Oracle ouvert par défaut !'
          +sLineBreak+sLineBreak+'Conctactez le support APPS.');
    end;
     
    function TOrasession.GetConnectedAllowed(): Boolean;
    begin
      Result := not (csLoading in ComponentState);
    end;
    et l'utilisation dans un objet commun à tous les applications et quelques fois dans un autre DataModule lors qu'il y avait un second objet TOrasession :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    interface
     
    uses
      Windows, ..., DBAccess, Ora, OraSmart, MemDS, OraError ...;
     
    type
    {$I OraSessionEx.INC}
      TCommonMainDataModule = class(TDataModule)
        MainSession: TOraSession;
        qry...: TOraQuery;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    implementation
     
    {$R *.DFM}
     
    uses ...;
     
    {$I OraSessionEx.Impl.INC}
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Citation Envoyé par nacer0806dz Voir le message
    Bonjour, j'ai beau cherché et je ne me retrouve toujours pas. Si vous pouvez m'éclaicir encore un petit peu, sachant que je suis sous access.Merci.
    ACCESS n'est pas le problème c'est vos objets Connection, Session, Query, DataSet ... qui sont ouverts, soit la propriété Active ou Connected
    Vu que l'on ne sait pas si c'est BDE, ADO ou une autre lib.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Bonjour, j'ai essayé pas mal de choses et toujours PAS de solutions.

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    En réalité, on ne comprend pas le problème

    Titre "Comment connecter une BDD pour une compilation."
    Contenu "quand je compile mon projet avec Inno Setup pour obtenir une application, la base de données de l’application est toujours connectée à la base de données du projet, pourquoi."

    Pour le titre, cela n'a pas de sens
    Pour le contenu, suffit de mettre les Active à False partout, cela demande juste un peu de rigueur, créer un fichier ini pour stoker la config qui sera construire via un écran InnoSetup et créer la ConnectionString au RunTime en lisant le fichier ini, sans oublier de chiffrer le mot de passe dans le ini.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    En réalité, on ne comprend pas le problème

    Titre "Comment connecter une BDD pour une compilation."
    Contenu "quand je compile mon projet avec Inno Setup pour obtenir une application, la base de données de l’application est toujours connectée à la base de données du projet, pourquoi."

    Pour le titre, cela n'a pas de sens
    Pour le contenu, suffit de mettre les Active à False partout, cela demande juste un peu de rigueur, créer un fichier ini pour stoker la config qui sera construire via un écran InnoSetup et créer la ConnectionString au RunTime en lisant le fichier ini, sans oublier de chiffrer le mot de passe dans le ini.
    Ma question est tres claire, par contre vos réponses sont sans détails et souvent hors sujet.

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 034
    Points : 40 936
    Points
    40 936
    Billets dans le blog
    62
    Par défaut
    C'est votre titre de message qui n'est pas clair, je pense que vous vouliez parler de "déploiement d'une application et sa base de données (ACCESS) avec InnoSetup"
    La dernière réponse de ShaiLetroll est pourtant explicite et même un peu plus

    pour reprendre
    - Pour le contenu (Entendez par là le programme) , suffit de mettre des Active à False partout, cela demande juste un peu de rigueur
    - créer un fichier ini pour stoker une configuration qui sera construit via un écran InnoSetup
    - créer la ConnectionString au RunTime (donc niveau programme) en lisant le fichier ini << ce qui sera fait dans le OnCreate du datamodule ou de la forme principale
    - sans oublier de chiffrer le mot de passe dans le ini. << ça c'est le plus

    La clé de la solution, c'est le besoin d'un fichier ini pour paramétrer la connexion au niveau de l'exécution du programme et que ce fichier ini doit être "fourni et modifié" quand l'exécution du programme d'installation (créé avec Innosetup) se déroule.

    j'ai essayé pas mal de choses et toujours PAS de solutions.
    Mais vous ne nous avez fourni aucun code pour nous montrer comment était faite la connexion

    montrez le code de connexion (fichier ini ou non dépendant d'où vous voulez placer la BDD) et nous en reparlerons
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Un code quelconque lors de l'installation modifie-t-il le chemin de la BDD ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Voici des détails qui peuvent régler le problème : Dans TForm1, j'ai ADOConnection1, 4xADOTable et 4xDataSource, 3xDBGrid et 3xDBNavigator. Pour la connection (sans code), propriétés ADOConnection1, ConnectionString, Construire: Fournisseur = Microsoft Jet 4.0 OLE DB Provider, Connexion = 1.Selection de la base de données, Propriétés avancés- Autorisations d'accés = Share Deny None, OK, OK. Puis connected = True et LoginPrompt = False. Pour ADOTable1, Active = True, Connection = ADOConnection1 et TableName = Nom de table. Pour DataSource1, DataSet = ADOTable1. La meme opération est repetée pour les 3 autres ADOTable et DataSource. Pour DBGrid et DBNavigator, DataSource = DataSource1. Voila des details, si vous avez besoin d'autres, vous me le demandez. Merci.

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Citation Envoyé par nacer0806dz Voir le message
    Pour la connection (sans code), propriétés ADOConnection1
    le Problème est là, vous devez manuellement AVEC du code construire la ConnectionString à partir d'un fichier ini (ou autre, xml, json ce que vous préférez)
    Et via InnoSetup, l'intégrateur installe votre application, configure le Provider\Driver (si vous laissez le choix entre Jet, Ace, ODBC)
    l'intégrateur choisit via un Selecteur de dossier\fichier où sera le fichier Base de Données, fournir un fichier vierge est opportun
    Eventuellement, il ajoute un mot de passe, à vous de le chiffrer dans le fichier ini


    Citation Envoyé par ShaiLeTroll Voir le message
    créer un fichier ini pour stoker la config qui sera construire via un écran InnoSetup et créer la ConnectionString au RunTime en lisant le fichier ini, sans oublier de chiffrer le mot de passe dans le ini.
    cela donne au démarrage du projet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOConnection1.ConnectionString := Format('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Jet OLEDB:Database Password=%s;', [DBPathFromIni, Decrypt(PasswordFromIni)]);
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOConnection1.ConnectionString := Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s;', [DBPathFromIni, Decrypt(PasswordFromIni)]);
    A vous de voir votre Provider favori

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [INI]
    Filename: "MyProg.ini"; Section: "InstallSettings"; Flags: uninsdeletesection
    Filename: "MyProg.ini"; Section: "InstallSettings"; Key: "DBPath"; String: "{db}"
    Je vous laisse lire la documentation de InnoSetup pour créer des écrans de saisie et le lien entre écran avec le fichier ini

    Pensez dans InnoSetup a proposer un écran de téléchargement du driver depuis une page Microsoft.

    Citation Envoyé par nacer0806dz Voir le message
    connected = True ... Active = True,
    Citation Envoyé par ShaiLeTroll Voir le message
    Il faut explicitement mette Active à False dans vos objets connexion et query ...
    A mettre à False dans les propriétés en DesignTime
    A mettre à True dans le code après avoir défini ConnectionString en RunTime


    CQFD !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    ConnectionString à partir d'un fichier ini ??? J'ai appris uniquement la ConnectionString decrite ci-dessus, je suis debutant !!! Si vous pouvez detailler un peu plus.

  17. #17
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 034
    Points : 40 936
    Points
    40 936
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par nacer0806dz Voir le message
    Voici des détails qui peuvent régler le problème ...
    Voila des details, si vous avez besoin d'autres, vous me le demandez.
    Nous lister, de façon difficilement lisible, les composants utilisés, n'est pas nous fournir le code demandé !

    Au passage, je note que vous n'avez toujours pas indiqué un point important : la version de Delphi

    Citation Envoyé par nacer0806dz
    J'ai appris uniquement la ConnectionString decrite ci-dessus, je suis debutant !!!
    Ce qui explique certainement beaucoup de choses, comme la non mise en considération de l'utilisation d'un vrai SGBD, les composants non renommés, etc.

    Si vous pouvez détailler un peu plus.
    Après une réflexion comme celle-ci
    vos réponses sont sans détails et souvent hors sujet
    vous vous rendez compte qu'il faut tenir compte de ce qui a été écrit, il serait temps de vous excuser.

    on reprend :
    Pour lire un fichier Ini FAQ

    Tout d'abord créer un fichier ini et sa structure, avec un simple éditeur de texte, le minimum sera quelque chose comme ça

    Code Ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [base]
    chemin = chemin et nom de la bdd

    * La version de Delphi non indiqué, je montre ce qu'il en serait avec une version XE4 +
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    uses vcl.inifiles;  // unité nécessaire
     
    procedure Form1.Create(Sender : TObject);
    var F : TIniFile;
         dbpath : String;
    begin
    F:=TIniFile.Create('config.ini'); // ici dans le même endroit que l'exe
    dbpath:=F.ReadString('base','chemin','cemincompletdela bdd');
    ADOConnection1.ConnectionString := Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s', [DBPathFromIni]); 
    // pour la partie provider (entre ' '), récupérez celle qui est en dur 
    // et modifiez en fonction : remplacer le chemin de la BDD par %s  
    ADOConnection1.Connected:=True;
    ....
    end;
    Maintenant, quelques conseils de pro (je pense en être un)
    pensez à mettre le fichier ini dans un endroit sûr, logiquement sous windows, ce serait dans un chemin particulier de windows récupérable par GetHomePath (si pour un seul utilisateur) ou GetPublicPath (tous les utilisateurs du poste)https://docwiki.embarcadero.com/RADS...ises_en_charge

    il faudrait donc ajouter l'utilisation de l'unité System.IOUtils et "calculer" l'emplacement
    (pour une version <XE4 il faudra passer par une obtention de répertoires spéciaux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var ...
     inifilename : String;
    begin
    inifilename:=Tpath.Combine(Tpath.GetHomePath,'config.ini'); 
    if not FileExist(inifileName) then Tpath.Combine(Tpath.GetPublicPath,'nomdufichier.ini'); // par défaut je prends une version "pour tout les utilisateurs du poste " sauf cas explicite 
    F:=TIniFile.Create(inifilename);
    ...
    Utilisez plutôt un DataModule pour tout ce qui est données (couche métier), je ne vais pas en dire davantage vu votre niveau cela va vous perdre

    Bien sûr, comme ShaiLeTroll l'a signalé, protéger avec un mot de passe la BDD est fortement conseillé, j'ai omis de le coder intentionnellement pour ne pas indiquer en plus la partie cryptage de ce dernier.

    Passez à un bon SGBD, ce n'est pas parce que vous avez appris avec Access qu'il n'y a pas mieux, (loin de là) vous m'en remercierez quand on vous demandera d'utiliser plusieurs postes sur une même base de données (multi-utilisateur)

    Enfin, si vous avez la possibilité Firedac, utilisez ces composants
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Location de voitures
    Inscrit en
    Mai 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Location de voitures
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2020
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Bonjour, la version de Delphi utilisée (mentionnée deja tout au debut) est 10.3 Rio, ainsi je dois avoir raison de mes remarques.

  19. #19
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Citation Envoyé par nacer0806dz Voir le message
    ConnectionString à partir d'un fichier ini ??? J'ai appris uniquement la ConnectionString decrite ci-dessus, je suis debutant !!! Si vous pouvez detailler un peu plus.
    Quelle partie a besoin d'être détaillée ?
    Nous avons tous été débutant, et il faut donc se lancer, se tromper, faire des erreurs, oser mais comme on ignore ce que vous avez essayé, on ne peut donc vous dire ce qu'il faut que vous corrigiez.

    Considérez que tout ce que vous avez appris ne représente qu'un début, presque 25 ans de carrière, j'apprends encore tous les jours, dans un tas de domaine, c'est ça le métier de développeur, c'est savoir trouver l'information, et cela ne peut être fait que par soi-même, chercher, chercher et chercher encore.
    Si vous appris une méthode, chercher à en apprendre une autre, vous avez tout le code possible à ce sujet, avec vous lu Data.Win.ADODB.TADOConnection.ConnectionString et les pages associées ?

    Avez vous déjà réussi à supprimer les informations de la ConnectionString en DesignTime pour remplacer cela par du code dans le OnCreate de la Form par exemple pour constuire la ConnectionString en RunTime

    Il faut commencer simplement !
    Poser un TEdit sur votre fiche TForm1, il sera nommé Edit1 (ou un autre numéro si il y en a déjà qui n'ont pas été renommé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
        Edit1.Text := OpenDialog1.FileName;
    end;
    Renseigner un chemin dans Edit1 comme par exemple 'C:\myFolder\myAccessFile.mdb'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADOConnection1.ConnectionString := Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;', [Edit1.Text]);
    ADOConnection1.Connected := True;
    Comme vous le voyez pour une installation, il faut un fichier de paramétrage externe à votre programme, c'est cela qui seul permettra de configurer librement quel sera le fichier Access à utiliser.

    Peut-être voir avec votre formateur, celui qui vous enseigne le Delphi pour découvrir une autre façon de faire, vous savez que vous devez utiliser un TIniFile, vous pourriez donc échanger à ce sujet, cela montrera que vous avez trouvé une solution mais qu'il vous faut de l'aide pour la mettre en place.


    Cela peut aussi être en Base de Registre, soit un TRegistry au lieu d'un TIniFile c'est un autre moyen, cela reste un paramètre externe.


    Je ne vois pas comment être plus précis, il faut que vous étudiez les tutoriels, cela commence justement par ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    var
      cheminBD, chaineCnx : string;
    begin
      cheminBD := 'C:\Bases\Biblio.mdb' ;
      chaineCnx:=
        'Provider=Microsoft.Jet.OLEDB.4.0;'  +
        'User ID=Admin;'  +
        'Data Source='  + cheminBD + ';'  +
        'Mode=Share Deny None;Extended Properties="";'  +
        'Jet OLEDB:Engine Type=5;' ;
      ADOXCatalog1.Create1(chaineCnx);
    end;

    Citation Envoyé par nacer0806dz Voir le message
    ...je dois avoir raison de mes remarques.
    Vous le confirmez, ma devise en signature n'a jamais été aussi pertinente !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 034
    Points : 40 936
    Points
    40 936
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par nacer0806dz Voir le message
    Bonjour, la version de Delphi utilisée (mentionnée deja tout au debut) est 10.3 Rio, ainsi je dois avoir raison de mes remarques.
    Ok, mes excuses

    PS. n'oubliez pas que je suis modérateur, vos message supprimés je peux les lire, cela ne vous donc pas très sympa à mes yeux tout comme je semble ne pas l'être aux vôtres
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. comment connecter une BDD avec j2me ?
    Par zaki18mi dans le forum Java ME
    Réponses: 1
    Dernier message: 13/06/2010, 12h13
  2. [SAGE ODBC] Comment connecter une BDD ?
    Par aqwz dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 14/09/2006, 10h00
  3. [VB.NET] Comment connecter une BD avec ADO ?
    Par Friz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 13/02/2006, 17h42
  4. Réponses: 4
    Dernier message: 22/12/2005, 11h21
  5. Réponses: 6
    Dernier message: 24/03/2005, 14h29

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