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

Lazarus Pascal Discussion :

Disparition d'enregistrement dans une table mémoire


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Homme Profil pro
    6EME 5EME 4EME
    Inscrit en
    Septembre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : 6EME 5EME 4EME
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2021
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Disparition d'enregistrement dans une table mémoire
    Bonjour et bonnes fêtes à vous.

    Bon promis je n'ai pas abusé de champagne ou autres joyeusetés !!!

    Mon problème est étrange (comme souvent les problèmes que l'on ne comprend pas)

    Sur une fiche 5 tables Zttables (ZEOS) et un Tmemdataset origine composants de Lazarus.

    Je l'utilise comme table temporaire avant qu'elle soit enregistrée dans une table MySQL
    Cette table temporaire nommée temp_article se remplit et se vide correctement
    Pour l'alimenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        // Ajout d'un article dans la table temporaire
        temp_article.Insert;
        temp_article.FieldByName('recid_article').AsInteger:=db_article.FieldByName('art_recid').AsInteger;
        temp_article.FieldByName('designation').AsString:=db_article.FieldByName('art_designation').AsString;
        temp_article.FieldByName('qte_total').AsInteger:=qte_article.AsInteger;
        temp_article.FieldByName('prix_total').AsFloat:=mt_prix_total.Value;
        temp_article.post;
    Pour supprimer un enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         temp_article.Delete;
         temp_article.Refresh;
    Ensuite voici le code dans lequel la table se vide (et je n'ai pas demandé çà !!! )

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    procedure Tf_distribution.bt_colis_alimClick(Sender: TObject);
    Var
      annee , mois , jour : Word ;
      text_query  : String ;
      tmp_colis_donne , tmp_nbre_colis ,tmp_colis_urgence : Integer ;
      tmp_tot_mt_articles : Double ;
    begin
      If MessageDlg('Confirmation colis',
        'Confirmez vous le paiement et la distribution du colis ?',
        mtConfirmation,[mbYes, mbNo],0) = mrYes
      Then begin
     
          // calcul du total articles
          tmp_tot_mt_articles:=0;
          temp_article.Refresh;
          temp_article.First;
          While not temp_article.EOF Do Begin
             tmp_tot_mt_articles:=tmp_tot_mt_articles +  temp_article.FieldByName('prix_total').AsFloat;
             temp_article.Next;
          end;
     
          // initialisation des champs de saisie
          if cb_colis_donne.Checked Then Begin
            tmp_colis_donne:=1 ;
            tmp_nbre_colis:=1 ;
          End
          Else Begin
             tmp_colis_donne:=0;
             tmp_colis_urgence:=0;
          End ;
          If cb_colis_urgence.Checked Then tmp_colis_urgence:=1 Else tmp_colis_urgence:=0;
     
          // Ouverture du fichier log
          AssignFile(fichier,ExtractFilePath(Application.ExeName)+'application.log');
     
          // Codage de la date de session     PAS UTILISé pour l'instant
          DecodeDate(db_session.FieldByName('ses_date').AsDateTime,annee,mois,jour);
          // Construction du query pour créer une ligne_session
          text_query:=
          'INSERT INTO `db_ligne_session`(' +
          '`ses_recid`, `lig_fam_num_carte`, `lig_type_session`, `lig_fam_recid`, `lig_fam_nom`, '+
          '`lig_nbre_pers`, `lig_colis_alim`, `lig_nbre_colis`, `lig_mt_colis`, `lig_colis_urgence`, `lig_nbre_urgence`, '+
          '`lig_mt_colis_urgence`, `lig_mt_tot_art` , `lig_mt_total`, `lig_mt_paye`, `lig_mt_du`) '+
          ' VALUES (''' +
          IntToStr(db_session.FieldByName('ses_recid').AsInteger) +
          ''',''' +
          IntToStr(sql_famille.FieldByName('fam_num_carte').AsInteger) +
          ''',''' +
          '0' +
          ''',''' +
          IntToStr(sql_famille.FieldByName('fam_recid').AsInteger) +
          ''',''' +
          sql_famille.FieldByName('fam_nom').AsString +
          ''',''' +
          IntToStr(sql_famille.FieldByName('fam_nbre_personnes').AsInteger) +
          ''',''' +
          IntToStr(tmp_colis_donne) +
          ''',''' +
          IntToStr(tmp_nbre_colis) +
          ''',''' +
          FloatToStr(prix_colis) +
          ''',''' +
          IntToStr(tmp_colis_urgence) +                // colis d'urgence
          ''',''' +
          IntToStr(tmp_colis_urgence) +                 // colis d'urgence
          ''',''' +
          '0'  +                 // colis d'urgence
          ''',''' +
          FloatToStr(tmp_tot_mt_articles) +
          ''',''' +
          FloatToStr(mt_du.Value) +
          ''',''' +
          FloatToStr(mt_paye.Value) +
          ''',''' +
          FloatToStr(mt_reste.Value) +
          ''')' ;
     
          { Exécuter la requête SQL }
          try
            sql_self_service.SQL.Clear;
            sql_self_service.SQL.Add(text_query);
            // Exécution de la requête
            sql_self_service.ExecSQL;
          except
            // Enregistre la syntaxe de la requête en cas d'échec
            Append(fichier);
            WriteLn(fichier,'Le ' + datetostr(Now) + ' à ' + TimeToStr(Now));
            WriteLn(fichier,'Erreur lors de l''enregistrement d''une ligne session');
            Writeln(fichier,sql_self_service.SQL.Text);
            WriteLn(fichier,' ');
            CloseFile(fichier);
            ShowMessage('Si ce message apparaît merci de consulter le fichier log');
          End;
     
          // rafraichissement de la table db_ligne_session liée à la table session
          db_lig_session.Refresh;
          db_lig_session.Last;
     
          // Se positionner au début de la table temporaire
          temp_article.First;
     
          // Crédr les lignes dans la base MySQL
          While not temp_article.EOF Do Begin
             db_distrib_articles.Insert ;
             db_distrib_articles.FieldByName('recid_session').AsInteger:=db_session.FieldByName('ses_recid').AsInteger;
             db_distrib_articles.FieldByName('recid_lig_session').AsInteger:=db_lig_session.FieldByName('lig_num_ligne').AsInteger;
             db_distrib_articles.FieldByName('recid_article').AsInteger:=temp_article.FieldByName('recid_article').AsInteger;
             db_distrib_articles.FieldByName('desig').AsString:=temp_article.FieldByName('designation').AsString;
             db_distrib_articles.FieldByName('qte').AsInteger:=temp_article.FieldByName('qte_total').AsInteger;
             db_distrib_articles.FieldByName('total').AsFloat:=temp_article.FieldByName('prix_total').AsFloat;
             db_distrib_articles.Post;
             temp_article.Next;
          end;
     
     
      end;
    end;

    Impossible de comprendre
    La table temporaire n'est pas liée à une autre

    Si vous avez une idée qui me permette de trouver cette énigme Merci

    Eric

  2. #2
    Futur Membre du Club
    Homme Profil pro
    6EME 5EME 4EME
    Inscrit en
    Septembre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : 6EME 5EME 4EME
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2021
    Messages : 19
    Points : 9
    Points
    9
    Par défaut trouvé l'origine de la suppresssion mais pourquoi le datachange se déclenche
    Bonjour

    Après avoir tourné le problème dans tous les sens j'ai enfin trouvé son origine

    Sans comprendre pourquoi la procédure famille_datachange est exécutée hors rien ne change dans cette table

    Peut on connaître le déclencheur qui entraine l'exécution de cette procédure famille_datachange ?

    J'ai beau chercher rien n'est sensé le déclencher !

    Alors si quelqu'un sait identifier le déclencheur de l'évènement datachange merci d'avance
    ceci ne fonctionne pas : ShowMessage(Field.AsString);.

    Bon dimanche

    Eric

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 731
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 731
    Points : 15 136
    Points
    15 136
    Par défaut
    Bonjour,

    Citation Envoyé par eric436243 Voir le message
    Peut-on connaître le déclencheur qui entraîne l'exécution de cette procédure famille_datachange ?
    As-tu essayé le pas-à-pas ? Tu ne nous en dis rien, donc point d'arrêt à l'entrée de la procédure et une fois le prog arrêté là, menu / Voir / Fenêtres de débogage / Pile d'appels

    Sinon, pour faciliter le lecture de code (et des fois une chose saute aux yeux), fais en sorte que les lignes similaires soient alignées, genre
    Citation Envoyé par eric436243 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        temp_article.FieldByName('recid_article').AsInteger:=db_article.FieldByName('art_recid').AsInteger;
        temp_article.FieldByName('designation').AsString:=db_article.FieldByName('art_designation').AsString;
        temp_article.FieldByName('qte_total').AsInteger:=qtearticle.AsInteger;
        temp_article.FieldByName('prix_total').AsFloat:=mt_prix_total.Value;
    -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        temp_article.FieldByName('recid_artc').AsInteger:=db_article.FieldByName('art_recid').AsInteger;
        temp_article.FieldByName('designatio').AsString :=db_article.FieldByName('art_designation').AsString;
        temp_article.FieldByName('qte_totale').AsInteger:=qtearticle.AsInteger;
        temp_article.FieldByName('prix_total').AsFloat  :=mt_prixtot.Value;

    Et enfin, rien à voir mais pour éviter que cette foutue faute ne se propage aussi vite que la covid, pense à mettre le trait d'union qui va bien :
    Citation Envoyé par eric436243 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        'Confirmez vous le paiement et la distribution du colis ?',
    -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        'Confirmez-vous le paiement et la distribution du colis ?',
    https://fr.wikipedia.org/wiki/Trait_...3%A9monstratif

    Voilà, je n'irai pas plus loin, ne connaissant strictement rien aux BdD's.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

Discussions similaires

  1. [WD15E] Dupliquer des enregistrements dans une table mémoire
    Par Totik dans le forum WinDev
    Réponses: 4
    Dernier message: 16/01/2012, 08h30
  2. Position d'un enregistrement dans une table
    Par polinevol dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/01/2006, 09h10
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  4. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07
  5. AJOUT d'un ENREGISTREMENT dans UNE TABLE
    Par ramo dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/08/2005, 16h24

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