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