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 :

Firedac : Update de l'ensemble de données d'un TFDMemTable.


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut Firedac : Update de l'ensemble de données d'un TFDMemTable.
    Bonjour à tous.tes,
    Je travail en FireBird et je suis devant une appli qui me ramène un ensemble de données via un TFDMemTable. Cet ensemble de données contenant des jointures, est donc en lecture simple.
    J'aimerais pouvoir faire des update et des insert de cet ensemble de données.
    J'ai tout de suite pensé au fonctionnement d'un TUpdateSQL et donc, en l'occurrence, un TFDUpdateSQL.
    Mais j'ai un peu de mal à voir comment faire le lien entre les deux composants.
    J'ai trituré les UpdateOptions du TFDMemTable...
    Les données sont fetchées dans un composant TJvDBUltimGrid dont j'ai retiré le ReadOnly...
    Peut-être une petite piste pour m'éviter la dépression, svp ?

  2. #2
    Rédacteur/Modérateur

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

    "Ensemble de données", ce n'est pas très explicite, je m'y perds. Quel ensemble contient des jointures le FDMemTable ou une requête sur la BDD Firedac ?
    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
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Ben, j'ai continué de creuser un peu et je comprends que tu te poses la question.
    Alors, c'est un TFDQuery qui va chercher les données et qui fait un CopyDataSet dans le FDMemTable...
    Non mais, de toute façon, c'est la requête SQL qui contient des jointures. Ce qui fait que le résultat renvoyé est forcément en lecture seule. sauf à passer par un composant ..UpdateSQL.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Et pis d'ailleurs, c'est quoi l'intérêt de passer par un FDMemTable pour remplir le TJvDBUltimGrid au lieu de le faire directement avec le TFDQuery ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    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 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par DOliv Voir le message
    .
    De toute façon, c'est la requête SQL qui contient des jointures. Ce qui fait que le résultat renvoyé est forcément en lecture seule. sauf à passer par un composant ..UpdateSQL.
    Exactement.
    Donc oui, le FDUpdateSQL est à lier directement avec le FDSQLQuery. Par défaut avec le wizard seul la table de base sera proposée dans les diverses commandes proposées.
    N.B. Ne pas oublier de faire les jointures dans la commande FetchRow
    J'ai cru comprendre que l'on pouvait mettre plusieurs instructions au sein d'une commande (INSERT ou UPDATE) , séparés par des ";" , mais je n'ai jamais osé. Si je dois faire des mises à jour dans les tables jointes, je préfère passer par les évènements BeforePost ou BeforeInsert, AfterPost ou AfterInsert (selon le cas et les contraintes)
    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
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Merci beaucoup pour ton aide SergioMaster
    Je me mets dessus dans cette direction.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Non, ça ne va pas car, si j'ai bien compris, pour que le dispositif TFDQuery/TFDUpdateSQL fonctionne, il faut que la connexion à la base soit maintenue.
    Or, l'appli sur laquelle j'interviens, charge les données d'un TFDQuery dans une TFDMemTable qui alimente un TJvDBUltimGrid.
    Et la connexion à la base est coupée.
    Du coup, je suis un peu démuni pour mettre à jour ces données dans la base via ces composants.
    Avant de le faire à la mano, je me demandais si quelqu'un ne connaîtrait pas une solution miracle liée à l'utilisation des ces différents composants sus-cités.

    Merci d'avance

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    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 469
    Points : 24 905
    Points
    24 905
    Par défaut
    Il faut forcément ré-ouvrir un connexion

    Suffit de créer un journal local que tu appliqueras, le TClientDataSet et sa propriété Delta permette de le gérer
    tu DOIS même le parcourir toi même pour générer le SQL manuellement dans ton cas, pour consolider ton cache avec la base centralisé.

    En Delphi, cela s'appelle le mode BriefCase et ça existe depuis très longtemps, surtout à une époque où la disponibilité du réseau était plus rare ou plus faible.

    Au final, autant faire un REST type CRUD, un server qui gère des requêtes JSON, aussi bien pour la lecture GET que pour l'écriture POST si tu dois fournir un mode déconnecté.
    l'écriture pouvant être massifié avec un stockage local et effecteur un bulk de mise à jour quand tu as la connexion.

    Pour faciliter la conciliation entre stockage local et base centralisé, je te recommande d'utiliser des GUID comme identifiants.
    Surtout si tu as un bulk avec jointure concurrentiel, avec des ID auto-inc, tu vas devoir recalculer tout l'arbre de jointure, avec des GUID tu as 99.99% que cela se consolide facilement.
    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
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Merci ShaiLeTroll pour ces explications exhaustives
    Je pense que je vais laisser tomber

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    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 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    Tout est expliqué dans les chapitres 12 et 13 de Delphi in Depth Firedac si tu peux te procurer cette "bible"
    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

  11. #11
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Tout est expliqué dans les chapitres 12 et 13 de Delphi in Depth Firedac si tu peux te procurer cette "bible"
    Dispo uniquement en version papier, imprimé à la demande par Amazon, ou d'occasion. Pas de version numérique (légale) en circulation.

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    En tout cas, merci pour l'info. Je vais me le procurer de toute façon

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    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 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    Une autre adresse (dont possibilité epub)
    http://www.jensendatasystems.com/firedacbook/
    et les exemples téléchargeables
    http://www.jensendatasystems.com/fir...acbookcode.zip

    les exemples qui pourraient t'intéresser
    • FDMEmTable
      • FDCopyingDatasets
      • FDMasterDetailClone
      • FDCloningCachedCursors
      • FDDesignTimeNestedFields

    • Autres
      • FDBasicCache utilisation cacheupdate
      • FDarrayDML pour la vitesse



    Maintenant, il y a pas mal de choses, par exemple, je viens de redécouvrir les TFDTableAdapter et le TFDCommand, complètement oublié du fait de l'existence des TFDQuery et TFDUpdateSQL

    La seule chose qui me gêne dans ton exposé est le fait que ta requête pour copier vers ton fdmemtable contient des jointures et donc potentiellement des modifications qui changent (par exemple des libellés en fonction d'un code) qui ne peuvent se répercuter s'il n'y a pas connexion !?
    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. "copie" de l'ensemble de données entre 2 DataSet
    Par jakouz dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/08/2005, 11h34
  2. ensemble de données pas en mode edition
    Par XloX dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/06/2005, 12h17
  3. [DBGrid] Affichage d'un sous-ensemble de données
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2004, 16h31
  4. ensemble de données fermées...
    Par vasaldo dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/06/2004, 16h58
  5. Ensemble de données temporaires
    Par pascalT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/03/2003, 07h22

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