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 :

XE7 : Datamodule et connexion


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut XE7 : Datamodule et connexion
    Bonjour,

    j'ai un très mauvais souvenir des DataModules avec Lazarus et de leurs limites voire de leur dysfonctionnement inexpliqué.

    Mes accès aux bases sont souvent peu orthodoxes : un SQLQuery de lecture pour remplir mes Grids et un SQLquery d'Update, Insert et Delete. J'ouvre souvent plusieurs Forms en même temps. Il m'arrive donc de faire des accès simultanés (parfois même en thread). La question n'est pas de savoir si c'est bien ou non.

    La question est de savoir s'il est envisageable d'utiliser un DataModule avec un seul connecteur pour faire cela ? En Lazarus, c'est non. Mais je ne connais pas les connecteurs FireDac et pas plus les limites des DataModules en XE7. Habituellement je place une chaîne complète Conn->SQLqueries (2) sur chaque Form.

    J'oubliais, mes bases étant hébergées (et distantes), je n'utilise jamais de chaînes Conn -> dbGrid (trop périlleux, trop lent et trop peu ergonomique pour l'utilisateur).

    Merci.
    Dernière modification par Invité ; 28/10/2014 à 15h42.

  2. #2
    Rédacteur/Modérateur

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

    sont peu orthodoxes :un SQLQuery de lecture et un SQLquery d'Update, Insert et Delete.
    pas tant que ça , mais bon je préfére 1 SQLQuery et un UpdateSQL [en tout cas avec les zeosdbo(<=ce qui répond a une de tes questions je crois zeos+XE7 ça fonctionne) , comme avec Firedac c'est ainsi que je procéde], souvent avec deux transactions différentes par contre
    et oui
    utiliser un DataModule avec un seul connecteur
    c'est tout le temps ce que je fais , je n'ai pas eu de soucis jusqu’à présent


    de mon point de vue ,plusieurs connexions sur la même base de données (une par forme) est à bannir (ancienne habitude d'interbase et des ses licences)
    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

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

    Oui, je sais... Il y a tout ce qu'il faut dans Delphi... et dans Zeos... Mais avec l'adoption d'une manière classique , je n'ai jamais pu régler certains problèmes inhérents à l'hébergement que j'ai choisi :
    • si quelqu'un me propose des chargements sans latence avec des bases hébergées distantes et
    • si quelqu'un m'explique comment empêcher qu'une dbGrid ne s'effondre lors d'une rupture intempestive de connexion internet de quelques secondes et
    • si quelqu'un arrive de la même façon à gérer les fetchrow de manière efficace pendant les remplissages de dbGrid...
    ... je suis preneur et je retourne à la méthode classique...

    Bref, ce n'est pas parce que j'utilise des bases hébergées que "mes" utilisateurs doivent contempler le sablier SQL à tout instant... en tout cas suffisamment fréquemment pour donner envie de ne pas utiliser le logiciel ! A force d'essais et de tests, j'ai dû optimiser mes accès à mes bases compte tenu de mes choix d'hébergement. En Lazarus, c'est correct en mySQL et en pgSQL mais en connecteur natif parce qu'à l'époque le zQuery ne pouvait pas être threadé proprement. Je parle du Desktop évidemment parce qu'en mobile, on "réduit" les requêtes pour diminuer le trafic

    Mais récemment pour un projet un peu différent, j'ai chargé ma base distante dans une SQLite:memory... au lancement du programme. Je l'ai fait en Windev, en Qt. J'ai regardé la faisabilité en Lazarus (OK). Et là l'approche classique peut m'être utile... Tu conseilles donc ZeosDbo à la place de FireDac ? Tu as l'air accro. Pas de problème de version ? La 7.0 (je crois) en Lazarus a coincé épisodiquement autant que je me souvienne. D'ailleurs ce sont les souvenirs qui vont me manquer. Les updateSQL, c'est loin. Va falloir ressortir les codes en 6.6 ... en attendant ton tuto.

    A ce propos j'ai enfin réussi à télécharger le Kit Libre office... et parallèlement, j'ai amélioré la présentation de mes programmes sous Delphi... Y a plus qu'à utiliser le Kit... enfin essayer. Tomber sur le bon tuto faciliterait la chose. Je vais fouiller un peu demain dans le forum.

    Bonne soirée.
    Dernière modification par Invité ; 29/10/2014 à 08h24. Motif: Un peu brève la réponse... Puis orthographe : oups

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    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 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Bonjour Gilles,
    Citation Envoyé par selzig Voir le message
    Tu conseilles donc ZeosDbo à la place de FireDac ? Tu as l'air accro. Pas de problème de version ? La 7.0 (je crois) en Lazarus a coincé épisodiquement autant que je me souvienne. D'ailleurs ce sont les souvenirs qui vont me manquer. Les updateSQL, c'est loin.
    non je ne conseille pas Zeosdbo à la place de Firedac .Firedac est bien plus complet , le fait qu'il soit partie intégrante de Delphi est un plus , mais il faut au moins la version Entreprise ! J'ai découvert les ZeosDbo parce je me suis planté à l'achat ma version D2010 , pro au lieu d'entreprise
    Je ne t'en parlais que pour des raisons LAZARUS <> Delphi

    Donc accro , pas totalement mais il est vrai que ,pour l'instant , en "productivité" je suis encore d3/d7/d2010 et donc j'utilise à fond ZEOSdbo
    XE sera pour la réécriture de mon 'ERP' (marrant moi j'appelais ça GPAO mais le terme semble devenu obsolète) avec FMX et Firedac (<-ça c'est sur)
    pour répondre à la question problème(s) de version des Zeos , j'utilise plutôt les versions SVN , la réactivité actuelle des (du) développeur est telle que le problème lorsqu'il y a est résolu dans la semaine (pour preuve de sa réactivité , je lui ai proposé les traductions des messages , 1 jour plus tard elles-était dans la version SVN 7.2 ! trop vite même , il y avais des fôtes d'ortografe et de gramère << "menfin!" pas autant

    en attendant ton tuto.
    qu avance doucement
    A ce propos j'ai enfin réussi à télécharger le Kit Libre office... et parallèlement, j'ai améliorer la présentation de mes programmes sous Delphi... Y a plus qu'à utiliser le Kit... enfin essayer. Tomber sur le bon tuto faciliterait la chose.
    pour l'écriture , ce n'est que du openoffice avec le kit une nouvelle barre d'outil s'ajoute, il faut apprendre à la maitriser et le tour est joué . Après il faut pas mal d'installation et bien regarder les vidéos de djibril

    bon , je ne dis pas que tout est facile, que je maitrise toutes les étapes de mise à disposition de l'article , relectures et corrections , pour cela il est encore trop tôt ! j'ai maintenant un domaine , mais je n'y ai pas encore (réussi à) accédé

    si quelqu'un me propose des chargements sans latence avec des bases hébergées distantes et
    si quelqu'un m'explique comment empêcher qu'une dbGrid ne s'effondre lors d'une rupture intempestive de connexion internet de quelques secondes et
    si quelqu'un arrive de la même façon à gérer les fetchrow de manière efficace pendant les remplissages de dbGrid...
    bon , moi aussi enfin surtout le dernier point !
    en tout cas , avec la méthode 'classique' (et peu orthodoxe << cela devrait te plaire) ,avec mon D2010 et ses contraintes donc pas de datasnap , hormis le temps de première connexion (et en fait de la première query) j'ai une application qui 'tourne' avec 'presque' tes 2 premiers critères (la base n'est pas hébergée mais sur notre serveur) . Elle est utilisée en Tunisie et en Inde et , passé la première étape, les utilisateurs ne se plaignent pas (de toute façon il sont loin ) .

    Toutefois, la base est de faible volume, (en fait une base secondaire faite exprès dans ce but), une autre application attaquant elle la 'vraie base' est beaucoup plus lente (au démarrage toujours) à partir de l'Inde , mais fort raisonnable en zone rapprochée (Limoges<->Nantes) aucun test n'a été encore fait entre France<->Tunisie

    si tu veux , je te passe en mp un nom d'user et mdp (enfin pour la première appli) afin que tu puisses t'en rendre compte
    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

  5. #5
    Invité
    Invité(e)
    Par défaut
    OK. De toute façon, dans ce cas précis, je n'ai guère le choix. Je vais charger ma base mySQL dans une base SQLite3:memory:
    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
    function TSQLiteModule.SQLiteConnect() : Boolean;
    begin
      Result := True;
      with SQLiteConn do begin
        if connected then connected := False;
        with Params do begin
          Values['Server']    := '127.0.0.1';
          Values['Database']  := ':memory:';
          Values['Charset']   := 'UTF-8';
        end;
        try
          LoginPrompt := False;
          Connected := True;
        except
          Result := False;
        end;
      end;
    end;
    Pour l'atteindre de n'importe quelle Form, je ne vois que le DataModule... ou une unit spécialement "affectée" à la base. J'ai testé ce matin. Pour l'instant, je ne rencontre pas de problème. Mais avant de marquer résolu, on va pousser le développement un peu plus loin.

  6. #6
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Bonjour,

    Citation Envoyé par selzig Voir le message
    [*]si quelqu'un m'explique comment empêcher qu'une dbGrid ne s'effondre lors d'une rupture intempestive de connexion internet de quelques secondes
    Juste une info, dans les composants FireDac Table, Query...etc ont a la propriété CachedUpdate qui leur permet de fonctionner avec un système de cache qui est peut être intéressant dans votre cas. l'avantage c'est qu'avec FireDac on a les 2 modes de fonctionnement, avec cache ou pas. A voir si ça peut vous aider ou pas.

Discussions similaires

  1. [XE7] Connexion à une base de données SQL Server via ODBC pour plate-forme cible OS X
    Par Ptite Développeuse dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/01/2015, 15h23
  2. DataModule : Connexion à une base selon la TForm
    Par Invité dans le forum Delphi
    Réponses: 3
    Dernier message: 15/12/2014, 17h13
  3. XE7 Utilisation des DataModules
    Par Invité dans le forum Delphi
    Réponses: 4
    Dernier message: 15/11/2014, 11h04
  4. XE7-Utilisation des Datamodules
    Par Invité dans le forum Delphi
    Réponses: 3
    Dernier message: 14/11/2014, 15h34
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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