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

Composants FMX Delphi Discussion :

Un petit tour par FireDac


Sujet :

Composants FMX Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Un petit tour par FireDac
    Bonjour,

    j'étudiais de plus près le fonctionnement de FireDac
    1. avec mySQL : je peux désormais me connecter en Embedded aussi bien avec MyDac que FireDac. Curieusement j'ai un problème avec UniDac (Erreur de pointeur à la sortie de l'application). Je me suis fait un tuto (en pdf ) pour préparer la base et m'y connecter avec Delphi. Il est à dispo si cela intéresse quelqu'un.

      Mon problème est le suivant : quels composants utilise-t-on si on veut une connexion mySQL classique et une connexion mySQL Embedded. Bien sûr il y a les 2 connecteurs, 2 FDTransaction mais qu'en est-il des FDPhysMySQLDriverLink. Il en faut 2. On les lie comment à chaque connecteur ? Un seul FDGUIxWaitCursor ?
      Autre solution deux datamodules séparés ?
      .
    2. Avec SQLite je cherche à protéger mes bases. Or, il semble que FireDac propose un système propriétaire de protection : FDSQLiteSecurity. Mais comme d'habitude, (enfin presque car cette fois, je ne vais pas dire que je n'ai pas trouvé de documentation), toutes mes tentatives "initiales" sont vaines. Quelqu'un sait utiliser cette bestiole ?


    Merci d'avance. Gilles
    Dernière modification par Invité ; 10/06/2015 à 16h54.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pour le point 1, il semble qu'il faille donner un nom à la propriété DriverID de FDPhysMySQLDriverLink1 (par exemple MYSQLD) . Ensuite dans le connecteur associé, dans la propriété DriverName, le MYSQLD apparaît. L'autre connecteur utilisera le MYSQL proposé et inclus dans la liste par défaut.
    Dernière modification par Invité ; 10/06/2015 à 17h18.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    pour le point 1 : tu as tout à fait raison c'est la bonne méthode
    un seul FDGUIxWaitCursor
    un seul datamodule mais pourquoi pas deux

    pour le point 2, je l'ai fait et ai du en rendre compte à toi ou quelqu'un d'autre dans le forum (à moins que j'ai oublié )

    Serge
    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
    Invité
    Invité(e)
    Par défaut
    Génial : pour le point 2, Cipher est intégré !

    Nom : 24.png
Affichages : 812
Taille : 5,2 Ko

    La procédure est simple :

    • Pour protéger (i.e. rendre incompréhensible et quasiment indéchiffrable) le fichier (les données et la structure)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      with FDSQLiteSecurity1 do  begin
         Database := 'E:\DelphiProjects\TestSQLite\Test_SQLite.db';
         DriverLink := FDPhysSQLiteDriverLink1;
         Options := [soSetLargeCache];
         Password := 'MotDePasse';
     
         SetPassword;
      end;
     
    end;
    • Pour lire le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with FDSQLiteSecurity1 do  begin
          Database := 'E:\DelphiProjects\TestSQLite\Test_SQLite.db';
          DriverLink := FDPhysSQLiteDriverLink1;
          Options := [soSetLargeCache];
          Password := 'MotDePasse';
        end;
        FDConnection1.Params.Password := FDSQLiteSecurity1.Password;
     
    // Ouvrir la connexion...
    end;
    On ne peut pas plus simple, mais cela a un prix. Le fichier protégé n'est lisible malheureusement que par Delphi. J'ai essayé à partir d'une bibliothèque compilée avec l'option Cipher et Qt... et je n'arrive à la lire : le password ne suffit pas !

    • Mais il est possible de remettre la base en clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      with FDSQLiteSecurity1 do  begin
         Database := 'E:\DelphiProjects\TestSQLite\Test_SQLite.db';
         DriverLink := FDPhysSQLiteDriverLink1;
         Options := [soSetLargeCache];
         Password := 'MotDePasse';
     
         RemovePassword;
      end;
    end;
    Petit commentaire : Il est vraiment dommage que la diffusion des drivers soit obligatoire avec FireDac ! En Androïd, attaquer une base MySQL passe par un webservice ou un bricolage équivalent. Là encore, c'est la branche historique qui pense. Avec MyDAC ou UniDac, je programme à ce niveau comme en Windows... et je ne fournis pas les librairies clientes ! D'ailleurs le strictement même code se compile sous Androïd comme sous Win. Seule restriction avec les produits Devart, MySQL embedded (et peut-être les autres embedded) : il faut fournir les libmysqld.dll. Mais en terme de productivité, c'est sensationnel. Pourquoi cette opportunité n'est-elle par incorporée dans Firedac ?
    Dernière modification par Invité ; 10/06/2015 à 19h09.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour Gilles,

    Pourquoi cette opportunité n'est-elle par incorporée dans Firedac ?
    peut être des problèmes de droits ou de taille
    C'est un peu je pense, comme quand tu compiles un programme Delphi avec les paquets ou sans. Enfin ce n'est qu'un humble avis, pas une certitude
    En Androïd, attaquer une base MySQL passe par un webservice ou un bricolage équivalent.
    tu es sûr de toi, c'est inquiétant mais d'autre part comme je ne suis pas fan de MySQL loin s'en faut ......

    Serge
    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

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Serge,

    Citation Envoyé par SergioMaster Voir le message
    tu es sûr de toi, c'est inquiétant mais d'autre part comme je ne suis pas fan de MySQL loin s'en faut ......
    Pas fan ? Ce n'est pas être une question de fan. La quasi majorité des bases sont des MySQL sur des serveurs Nux à partir du moment où elles sont hébergées et accessibles au grand public (Internet, Mobile...).

    Sûr de moi ? oui en attendant que quelqu'un me montre comment il procède avec Delphi sans passer par le Web ou DataSnap. J'ai essayé la solution Devart sur mon Androïd de test. C'est même la première chose que j'ai faite. Un MyDac, un Query et une Grid... et cela roule !
    Cette approche n'a rien de surprenant : Cela fait de nombreuses versions que Windev Mobile fait cela avec les bases Hyperfile ! Le plus de Devart c'est qu'il le permet avec d'autres bases avec Delphi alors par exemple que Windev Mobile ne me le permet pas avec MySQL.

    En Delphi "de base", cela semble impossible et on t'explique que la quintessence de la programmation en Androïd pour se connecter à une base MySQL ou n'importe quoi d'autre distant est de passer par du... php ou DataSnap... qui jusqu'à présent ne tournait pas sur Linux ce qui imposait d'installer le datasnap serveur sur un serveur windows pour attaquer la base sur le serveur Linux... genre http://docwiki.embarcadero.com/RADSt...and_Android%29

    On en revient à "ailleurs" : il faut regarder "ailleurs". Cela nous ramène à certains propos d'une récente discussion très "active" sur ce forum. Je ne veux pas m'enquiquiner avec cette structure lourde alors qu'on peut régler simplement le problème :
    http://www.fmxexpress.com/connect-to...s-and-android/

    Ceci dit FireDac est très complet... à ce détail près.
    Mais quand j'utilise Androïd je n'ai besoin que d'une chaîne courte (donc simple) et surtout facile à mettre en oeuvre : je ne vais pas réaliser un dump ou un restore avec ma tablette ou mon téléphone.
    Dernière modification par Invité ; 11/06/2015 à 08h39.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Re,

    Autres besoins, autres moyens. Je ne m'étais pas penché en "profondeur" sur les liaisons BDD et multi-OS et effectivement, selon la cible, les possibilités changent.
    Oui, UniDac est sans conteste mieux outillé pour la configuration que tu décris et ce à l'heure actuelle.
    Je ne ferais aucun pari sur l'avenir (court/moyen terme) et dire que cela va changer. Il est difficile d'avoir des informations à ce sujet si Dmitry Arefiev (le monsieur Firedac dont j'écorche peut être le nom) est communicant dans beaucoup de domaines mais lorsqu'il s'agit de certaines choses (MariaDB par exemple ) il semble assez fermé (je ne dirais pas hostile).
    Je suis également certain qu'il y a une question de droits pour ce qui est des inclusions des bibliothèques. Je me souviens des tractations Firebird/Embarcadero alors que Firebird est un vrai free SGBD, alors j'imagine ce qu'il doit en être pour MySQL qui est un faux free !

    Donc Unidac Pro (300$ HT) ou Mydac pro (200$ HT) semble être le bon choix puisque la cible LINUX Serveur n'est pas encore fournie (et que l'on risque d'essuyer des plâtres ) avant s'envisager DataSnap (+-JSON).
    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

  8. #8
    Invité
    Invité(e)
    Par défaut
    Toujours pour le point 2 (SQLite),

    A peu près idem avec Unidac en mode direct (i.e. sans fournir SQLite3.dll)

    • Pour protéger
    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
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      {https://www.devart.com/litedac/docs/#database_encryption.htm}
     
      with UniConnection1 do try
        if Connected then Disconnect;
     
        Database:= 'E:\DelphiProjects\TestSQLite2\Test_SQLite_Unidac.db';
        SpecificOptions.Values['ForceCreateDatabase'] := 'False';
        SpecificOptions.Values['Direct'] := 'True';
        SpecificOptions.Values['EncryptionAlgorithm'] := 'leAES256';
        SpecificOptions.Values['EncryptionKey'] := '';
        Open;
     
        TLiteUtils.EncryptDatabase(UniConnection1, 'MotDePasse'); //encrypt database
     
        Showmessage('OK');
     
      except
        {$IFDEF DEBUG}
        on E: EDatabaseError  do
          showmessage(E.Message);
        {$ELSE}
         MessageDlg( 'Erreur critique', 'La liaison internet avec la base est impossible. ' +
                     'Le programme va s''arrêter.',
        {$ENDIF}
      end;
    end;
    • Pour lire le fichier
    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
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      with UniConnection1 do try
        if Connected then Disconnect;
     
        Database:= 'E:\DelphiProjects\TestSQLite2\Test_SQLite_Unidac.db';
        SpecificOptions.Values['ForceCreateDatabase'] := 'False';
        SpecificOptions.Values['Direct'] := 'True';
        SpecificOptions.Values['EncryptionAlgorithm'] := 'leAES256';
        SpecificOptions.Values['EncryptionKey'] := 'MotDePasse';
        Open;
     
        with UniQuery1 do active := true;
     
      except
        {$IFDEF DEBUG}
        on E: EDatabaseError  do
          showmessage(E.Message);
        {$ELSE}
         MessageDlg( 'Erreur critique', 'La liaison internet avec la base est impossible. ' +
                     'Le programme va s''arrêter.',
        {$ENDIF}
      end;
    end;
    • Pour remettre la base en clair
    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
     
    procedure TForm1.Button6Click(Sender: TObject);
    begin
      with UniConnection1 do try
        if Connected then Disconnect;
     
        Database:= 'E:\DelphiProjects\TestSQLite2\Test_SQLite_Unidac.db';
        SpecificOptions.Values['ForceCreateDatabase'] := 'False';
        SpecificOptions.Values['Direct'] := 'True';
        SpecificOptions.Values['EncryptionAlgorithm'] := 'leAES256';
        SpecificOptions.Values['EncryptionKey'] := 'MotDePasse';
        Open;
     
        TLiteUtils.EncryptDatabase(UniConnection1, ''); //Decrypt database
     
      except
        {$IFDEF DEBUG}
        on E: EDatabaseError  do
          showmessage(E.Message);
        {$ELSE}
         MessageDlg( 'Erreur critique', 'La liaison internet avec la base est impossible. ' +
                     'Le programme va s''arrêter.',
        {$ENDIF}
      end;
    end;

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

Discussions similaires

  1. [AJAX] ASOW : Jeu d'action/stratégie au tour par tour développé en AJAX
    Par Gray_Fox dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/04/2007, 10h54
  2. Poser sa tour par terre
    Par Lorenzox dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 13/04/2007, 16h35
  3. [8.5][General] Petit sondage par curiosité
    Par ickyknox dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 23/03/2007, 18h20
  4. [recherche] combat au tour par tour
    Par Satch dans le forum PC
    Réponses: 4
    Dernier message: 24/08/2006, 11h32
  5. IA d'un wargame tour par tour
    Par Nyx dans le forum Intelligence artificielle
    Réponses: 5
    Dernier message: 20/02/2005, 13h07

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