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 :

Souci de Commit


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut Souci de Commit
    Bonjour à tous,

    Voici maintenant plusieurs heures que je m'arrache les cheveux sur un problème rencontré lors de l'exécution de mon programme en Delphi (avec Delphi 2009).

    J'ai une base Interbase connectée et à laquelle je me connecte via le process classique IBDatabase / IBTransaction / mes IBTables.
    Lorsque j'exécute mon programme, il me demande les éléments suivants en sachant que rien n'est commité tant que je ne suis pas arrivé à la fin du processus au cas où j'annulerai en cours de route :
    - créer une facture puis post
    - créer les lignes de factures puis post
    --- > implique un recalcul automatique du total de la facture

    Je choisis de valider. Avant d'arriver à l'instruction IBTransaction.Commit, tous mes champs sont renseignés, y compris mon champ TOTAL.
    Dès que l'instruction IBTransaction.Commit est passée, tout a été enregistré sauf la valeur de TOTAL qui vaut NULL.

    Je ne pense pas que cela vienne vraiment de l'instruction Commit car une partie des données est bien commitée. Je ne pense pas que cela provienne du recalcul de la facture puisque la valeur apparait bien dans le champ TOTAL après chaque ajout.

    Est-ce que quelqu'un aurait une idée par hasard ?

    Je voudrais bien copier ici mon code mais il s'avère que mon Unit fait dans les 1000 lignes et je doute que ce soit simple de s'y retrouver.

    J'espère, chers Delphistes, que vous pourrez m'apporter un peu d'aide.

    Merci beaucoup.

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Salut

    Si le total est enregistré dans la table facture et que tu affectes la valeur du total après le post, c'est normal que le total ne soit pas affecté. Dans cette hypothèse, tu aurais dû cependant avoir un message d'erreur. Toujours dans la même hypothèse, je te propose de passer ta facture en mode Edit avant d'affecter le résultat du calcul, et de poster à nouveau (attention cependant à tes gestionnaires dévénements OnBeforePost et OnAfterPost).

    Remarque : Le commit ne fait pas de Post.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Salut

    Si le total est enregistré dans la table facture et que tu affectes la valeur du total après le post, c'est normal que le total ne soit pas affecté. Dans cette hypothèse, tu aurais dû cependant avoir un message d'erreur. Toujours dans la même hypothèse, je te propose de passer ta facture en mode Edit avant d'affecter le résultat du calcul, et de poster à nouveau (attention cependant à tes gestionnaires dévénements OnBeforePost et OnAfterPost).

    Remarque : Le commit ne fait pas de Post.

    @+
    J'ai bien regardé, et en fait, quand je post la ligne de facture, derrière je fais bien un Facture.edit, je mets à jour ses champs puis je fais un Facture.post.
    Quand je fais le commit, toutes mes tables sont en dsBrowse et postées... c'est bizarre.

    Par contre, petite question, si je fais une première fois un Facture.post, puis Facture.edit, puis Facture.post et que je fais un IBTransaction.commit, quelles sont les données prises en compte dans ma facture ?

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Quand je fais le commit, toutes mes tables sont en dsBrowse et postées... c'est bizarre.
    Après le Facture.Post, il est normal que les ensembles de données soient en dsBrowse.

    Par contre, petite question, si je fais une première fois un Facture.post, puis Facture.edit, puis Facture.post et que je fais un IBTransaction.commit, quelles sont les données prises en compte dans ma facture ?
    Les données qui sont marquées modifiées ou insérées, la fonction virtuelle TDatraSet.UpdateStatus : TUpdateStatus; te permet de connaître l'état des données quand tu travailles avec un cache si je me souviens bien (à vérifier avec les composants que tu utilises).

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Après le Facture.Post, il est normal que les ensembles de données soient en dsBrowse.


    Les données qui sont marquées modifiées ou insérées, la fonction virtuelle TDatraSet.UpdateStatus : TUpdateStatus; te permet de connaître l'état des données quand tu travailles avec un cache si je me souviens bien (à vérifier avec les composants que tu utilises).
    Je viens de regarder et lors du OnUpdateData, j'ai bien la valeur dans mon champ. J'ai vraiment l'impression que c'est lors du commit or j'ai rien, aucun évènement BeforeCommit ou AfterCommit. Et dans les Before et AfterPost, rien qui ne mette à jour ce champ... c'est à devenir fou...

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Cela fait longtemps que je n'ai pas mis les mains dans ce type de développement.
    As-tu vérifié si, dans ta table Facture, il n'y a pas un trigger qui foutrait la grouille ?
    Vérifie le schéma de ta base.

    Dans le gestionnaire OnUpdateData du DataSetProvider , j'avais l'habitude de forcer les règles de mises à jour :
    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
    procedure TLivreSrvDm.dspLIVRESUpdateData(Sender: TObject;DataSet: TCustomClientDataSet);
    begin
      inherited;
      with DataSet do
      begin
        FieldByName('ID').ProviderFlags := [pfInKey,pfInWhere,pfInUpdate];
        FieldByName('TITRE').ProviderFlags := [pfInUpdate];
        FieldByName('AUT_ID').ProviderFlags := [pfInUpdate];
        FieldByName('CLS_ID').ProviderFlags := [pfInUpdate];
        FieldByName('CLS_INITIALE').ProviderFlags := [pfInUpdate];
        FieldByName('COTE').ProviderFlags := [pfInUpdate];
        FieldByName('AUTEUR3L').ProviderFlags := [pfInUpdate];
        FieldByName('NOTES').ProviderFlags := [pfInUpdate];
        FieldByName('TITRE_SNDX').ProviderFlags := [pfInUpdate];
        FieldByName('EXP_ID').ProviderFlags := [pfInKey,pfInWhere,pfInUpdate];
        FieldByName('LIV_ID').ProviderFlags := [pfInUpdate];
        FieldByName('NUMERO_EX').ProviderFlags := [pfInUpdate];
        FieldByName('ACQUISITION_DT').ProviderFlags := [pfInUpdate];
        FieldByName('PRIX').ProviderFlags := [pfInUpdate];
        FieldByName('DON').ProviderFlags := [pfInUpdate];
        FieldByName('NOM').ProviderFlags := []; // pas de mise à jour, astuce de saisie
      end;
    End;
    Est-ce que :
    - tu utilises un DataSetProvider ?
    - dans ce cas, es-tu certain de la valeur de la propriété ProviderFlags de ton champ Total ?

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Cela fait longtemps que je n'ai pas mis les mains dans ce type de développement.
    As-tu vérifié si, dans ta table Facture, il n'y a pas un trigger qui foutrait la grouille ?
    Vérifie le schéma de ta base.

    Dans le gestionnaire OnUpdateData du DataSetProvider , j'avais l'habitude de forcer les règles de mises à jour :
    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
    procedure TLivreSrvDm.dspLIVRESUpdateData(Sender: TObject;DataSet: TCustomClientDataSet);
    begin
      inherited;
      with DataSet do
      begin
        FieldByName('ID').ProviderFlags := [pfInKey,pfInWhere,pfInUpdate];
        FieldByName('TITRE').ProviderFlags := [pfInUpdate];
        FieldByName('AUT_ID').ProviderFlags := [pfInUpdate];
        FieldByName('CLS_ID').ProviderFlags := [pfInUpdate];
        FieldByName('CLS_INITIALE').ProviderFlags := [pfInUpdate];
        FieldByName('COTE').ProviderFlags := [pfInUpdate];
        FieldByName('AUTEUR3L').ProviderFlags := [pfInUpdate];
        FieldByName('NOTES').ProviderFlags := [pfInUpdate];
        FieldByName('TITRE_SNDX').ProviderFlags := [pfInUpdate];
        FieldByName('EXP_ID').ProviderFlags := [pfInKey,pfInWhere,pfInUpdate];
        FieldByName('LIV_ID').ProviderFlags := [pfInUpdate];
        FieldByName('NUMERO_EX').ProviderFlags := [pfInUpdate];
        FieldByName('ACQUISITION_DT').ProviderFlags := [pfInUpdate];
        FieldByName('PRIX').ProviderFlags := [pfInUpdate];
        FieldByName('DON').ProviderFlags := [pfInUpdate];
        FieldByName('NOM').ProviderFlags := []; // pas de mise à jour, astuce de saisie
      end;
    End;
    Est-ce que :
    - tu utilises un DataSetProvider ?
    - dans ce cas, es-tu certain de la valeur de la propriété ProviderFlags de ton champ Total ?
    Non je n'utilise pas de DataSetProvider. J'ai simplement IBDataBase/IBTable/DataSource

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Pas de trigger non plus ??

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Pas de trigger non plus ??
    Sur facture, j'ai juste un beforePost dans lequel je mets à jour le TOTAL à condition qu'il soit NULL

  10. #10
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Si dans le BeforePost, tu mets à jour le total, tu n'as plus besoin de passer en suite par

    Est-ce qu'il y a beaucoup de code dans ton BeforePost ?

    En outre, quand je parle de trigger, je parle de déclencheur au sens des SGBD, du genre Before Insert, Before Update embarqué dans la base de données, pas dans le code de ton programme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR ALTER TRIGGER CTC$ID$TBI FOR CONTACT BEFORE INSERT POSITION 0 AS
    BEGIN
      IF (NEW.ID IS NULL) THEN
      BEGIN
        NEW.ID = NEXT VALUE FOR GLOBAL$SQ;
      END
    END ^

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Si dans le BeforePost, tu mets à jour le total, tu n'as plus besoin de passer en suite par

    Est-ce qu'il y a beaucoup de code dans ton BeforePost ?

    En outre, quand je parle de trigger, je parle de déclencheur au sens des SGBD, du genre Before Insert, Before Update embarqué dans la base de données, pas dans le code de ton programme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR ALTER TRIGGER CTC$ID$TBI FOR CONTACT BEFORE INSERT POSITION 0 AS
    BEGIN
      IF (NEW.ID IS NULL) THEN
      BEGIN
        NEW.ID = NEXT VALUE FOR GLOBAL$SQ;
      END
    END ^

    @+
    Bonjour e-ric,

    Non aucun trigger en base. Cela fait deux jours que je fais du pas-à-pas sans savoir pourquoi au dernier moment, le commit ne me prend pas les modifs...
    Ce qui est bizarre, c'est que ma table facture est bien en mode Browse juste avant le commit, j'ai bien voulu retenter un post dessus au cas où mais cela me renvoie l'erreur comme quoi elle n'est pas en mode dsInsert,dsEdit donc pour moi, le post a bien pris les modifs et le commit est censé les valider mais quand je consulte les données ensuite, j'ai toujours 0 dedans, valeur mise à l'initialisation (création de la facture)

  12. #12
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    salut

    As-tu essayé d'affecter les propriété ProviderFlag des champs de ton ensemble de données comme je le suggérais dans mon exemple ? Il me semble que j'avais des soucis similaires (cela fait bien 10 ans donc je n'ai plus de certitudes à ce sujet) et que j'avais trouvé cela comme remède.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par e-ric Voir le message
    salut

    As-tu essayé d'affecter les propriété ProviderFlag des champs de ton ensemble de données comme je le suggérais dans mon exemple ? Il me semble que j'avais des soucis similaires (cela fait bien 10 ans donc je n'ai plus de certitudes à ce sujet) et que j'avais trouvé cela comme remède.

    @+
    Je viens de tester avec ta méthode, malheureusement, cela ne s'avère pas payant ...

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Après je me pose une question, voici comment se déroule grosso merdo le programme :
    • j'ouvre ma form
      j'ouvre une transaction (dans le cas d'un rollback si besoin d'annuler la création de la facture complète)
      je crée une facture et mets le total de la facture à 0 puis Facture.post
      je crée les différentes lignes de facture
      dans le facture.beforePost, je recalcule le total des lignes de factures et fais un facture.edit, mets à jour le cout total puis facture.post
      je commit


    Ma question est la suivante, si je mets à jour deux fois d'affilé le champ COUT de facture et que je post, puis je commit le tout, les deux posts ne vont-ils pas interférer ?

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Heremion Voir le message
    dans le facture.beforePost, je recalcule le total des lignes de factures et fais un facture.edit, mets à jour le cout total puis facture.post
    je crois que ça pêche , je suis pas sur que le beforepost soit le bon endroit .

    je verrais plutôt comme ceci
    • je fait un Edit de la facture (bidon)
    • je fait un post // qui va declencher le before post
    • Dans le beforepost j'ai un calcul du total des lignes de factures
    • et met à jour le champ total
    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

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    je crois que ça pêche , je suis pas sur que le beforepost soit le bon endroit .

    je verrais plutôt comme ceci
    • je fait un Edit de la facture (bidon)
    • je fait un post // qui va declencher le before post
    • Dans le beforepost j'ai un calcul du total des lignes de factures
    • et met à jour le champ total
    Bonjour SergioMaster,

    Je vais tester cette approche et t'informerai du résultat. Merci en tout cas de t'intéresser à mon problème

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    salut SergioMaster,

    j'ai testé ta suggestion, malheureusement, le problème persiste...

    As-tu une idée par rapport à la question que je me posais par rapport à deux posts successifs et un commit pour la prise en compte des data ?

  18. #18
    Rédacteur/Modérateur

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

    Citation Envoyé par Heremion
    As-tu une idée par rapport à la question que je me posais par rapport à deux posts successifs et un commit pour la prise en compte des data ?
    en fait non , j'avais juste été choqué par la liste d'actions telle que tu l'avais indiquée .
    Je ne suis pas très IBTables et transactions ouvertes trop longtemps (le temps de la saisie des lignes peut être très/trop long) , en général mon commit se fait dès mon UPDATE/INSERT/DELETE (bref presque un autocommit). Ceci expliquant cela , je n'ai jamais fait deux posts sur un record pour un seul commit .
    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

  19. #19
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut est-ce que
    Le champ total se met à jour, si après ton travail et commit, tu le revalorises ? Ça fonctionne ?

    Parce que ce serai pas inintéressant de voir si le update de total fonctionne hors contexte.

    cordialement

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par alheuredudejeuner Voir le message
    Le champ total se met à jour, si après ton travail et commit, tu le revalorises ? Ça fonctionne ?

    Parce que ce serai pas inintéressant de voir si le update de total fonctionne hors contexte.

    cordialement
    Bonjour aleurdudejeuner, ()

    Je viens de tester et en fait, juste après le commit, si je fais un edit il me renvoie l'erreur "...ne peut effectuer de modifications sur un ensemble de données fermé...", bizarre. En outrepassant cette erreur, si je fais un edit, modif, post puis commit, j'ai effectivement bien la donnée dans mon champ...

    Je n'ai aucun close ou refresh après le commit, qu'est-ce qui pourrait bien la close (puisque c'est ce que me dit le message d'erreur quand je tente un edit?)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Query Begin et Commit son sur un bateau....
    Par faoz75 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/08/2003, 11h48
  2. commit et rollback....?
    Par The_Nail dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/06/2003, 14h36
  3. [File et Directory ListBox] Soucis de filtre
    Par Mercilius dans le forum Composants VCL
    Réponses: 8
    Dernier message: 04/04/2003, 16h17
  4. Réponses: 4
    Dernier message: 16/02/2003, 12h16
  5. Réponses: 2
    Dernier message: 03/10/2002, 17h24

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