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 :

Récupérer le transaction ID avec le TFDTransaction


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    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
    Par défaut Récupérer le transaction ID avec le TFDTransaction
    Bonjour ou re-bonjour

    J'ai besoin de récupérer la valeur du champ MON$TRANSACTION_ID de ma transaction (ou une autre information me permettant d'identifier ma transaction ) dans la table MON$TRANSACTIONS de Firebird.
    Alors, dans ma grande naïveté, je me suis dis que j'allais gérer moi-même ma transaction en utilisant un TFDTransaction pour récupérer le ID de la transaction
    Bah non, pas de "id transaction" dans le composant.

    Quelqu'un pourrait-il m'expliquer comment récupérer cette info, svp ?
    Merci beaucoup d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Le moins que l'on puisse dire après nos différents échanges est que votre approche est pour le moins étrange (un coup questions sur le forum firebird, un coup delphi) et tout ça sans vraiment une description pertinente de ce qui est voulu si l'on excepte l'insertion de beaucoup de lignes au sein d'une même transaction.

    Je présume que la valeur MON$TRANSACTION_ID est voulue pour récupérer les statistiques Firebird tel que demandé ici

    Je m'interroge vraiment sur la manière d'aborder le problème mal défini. Au fil des lectures, j'ai cru comprendre que les diverses instructions d'un BLOCK au sens firebird du terme étaient générées via du code, mais beaucoup d'interrogations demeurent sur le comment.

    Sachant que firedac peut remonter beaucoup d'informations pour peu d'utiliser les bons composants.
    Par exemple :
    • Le TFDBatchMove (sans même parler du log) permet d'obtenir les readcount,updatecount,writecount et deletecount ce qui est je crois le but recherché.
    • Le TFDMoniCustomClientLink permet de monitorer l'activité d'une session
    • rien que le FDQuery a des propriétés comme RowsAffected


    Pour moi, une définition claire du problème et non des demandes partielles comme ( Exécuter un gros bloc d'ordres avec "Execute block" et Problème d'exécution d'un TFDQuery.) serait nécessaire

  3. #3
    Membre très actif
    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
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Le moins que l'on puisse dire après nos différents échanges est que votre approche est pour le moins étrange (un coup questions sur le forum firebird, un coup delphi)
    Ben, à moi, ça me paraît simple, une question concernant l'administration Firebird dans le forum Administration Firebird,
    puis cette question sur des composants Delphi dans le forum composants Delphi
    Citation Envoyé par SergioMaster Voir le message
    et tout ça sans vraiment une description pertinente de ce qui est voulu si l'on excepte l'insertion de beaucoup de lignes au sein d'une même transaction.
    Et aucun rapport avec les EXECUTE BLOCK.
    Citation Envoyé par SergioMaster Voir le message
    Je présume que la valeur MON$TRANSACTION_ID est voulue pour récupérer les statistiques Firebird tel que demandé ici
    carrément oui.

    Ce que j'essaie de faire est de récupérer le nombre d'enregistrements modifiés par une transaction dans une base Firebird.
    Au vu des informations stockées dans les tables systèmes, il m'a semblé comprendre qu'il me faut absolument la référence de la transaction exécutée pour pouvoir exploiter les stats...
    La transaction en question étant celle exécutée par l'application Delphi avec les composants Firedac.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Pour obtenir MON$TRANSACTION_ID à partir de l'application il faudrait faire une query pendant que la transaction est "ouverte" (mon$state=1)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T.MON$TRANSACTION_ID
    FROM MON$ATTACHMENTS r JOIN MON$TRANSACTIONS T on T.MON$ATTACHMENT_ID=R.MON$ATTACHMENT_ID
    WHERE r.MON$SYSTEM_FLAG=0 AR r.MON$STATE=1 AND r.MON$REMOTE_PROCESS=:application_name

    où :application_name est le nom (chemin inclus) de l'application qui a utilisé la transaction

  5. #5
    Membre très actif
    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
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Pour obtenir MON$TRANSACTION_ID à partir de l'application il faudrait faire une query pendant que la transaction est "ouverte" (mon$state=1)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T.MON$TRANSACTION_ID
    FROM MON$ATTACHMENTS r JOIN MON$TRANSACTIONS T on T.MON$ATTACHMENT_ID=R.MON$ATTACHMENT_ID
    WHERE r.MON$SYSTEM_FLAG=0 AR r.MON$STATE=1 AND r.MON$REMOTE_PROCESS=:application_name
    Magnifique ! Je vais plutôt essayer ça. Franchement, ça ne s'invente pas
    Encore merci Sergio.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par DOliv Voir le message
    Franchement, ça ne s'invente pas
    ça se travaille via les documents fournis.

    P.S. le FDMonitoring n'est pas la solution pour obtenir l'id de la transaction
    P.P.S. il existe bien un FDTransaction.TransactionIntf.SerialId mais ne correspond pas au mon$transaction_id

  7. #7
    Membre très actif
    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
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    [*]Le TFDMoniCustomClientLink permet de monitorer l'activité d'une session
    Ah ben merci, je vais me pencher la-dessus.
    Citation Envoyé par SergioMaster Voir le message
    [*]rien que le FDQuery a des propriétés comme RowsAffected
    Ce n'est pas l'information retournée par les composants que je voudrais, mais celles existant dans la base de données.

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

Discussions similaires

  1. [FTP] Récupérer un ficher distant avec ftp_get
    Par boteha dans le forum Langage
    Réponses: 6
    Dernier message: 25/03/2010, 09h41
  2. Réponses: 6
    Dernier message: 27/12/2005, 13h48
  3. Récupérer tous les champs avec un DISTINCT
    Par Le Mérovingien dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/11/2005, 23h58
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35

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