Retrouver un enregistrement en cas de rupture de séquence [Résolu]

Messages postés
89
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 octobre 2013
- - Dernière réponse : notrica
Messages postés
89
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 octobre 2013
- 29 avril 2010 à 06:24
Salut;

Je cherche comment retrouver un enregistrement précédent lorsque il y a eu une rupture de séquence d'un UPDATE dans le même fichier. Voici le code
 
  with DMPlanet1.QPlaSolde do begin
      Close;
      SQL.Clear;
      SQL.Add('Select * from TFPlanSolde Order By GLComptetID');
      open;
      First;
      while not eof do begin
         xclasse := LeftStr( FieldValues['GLComptetID'],1);
         xcleCpte := FieldValues['GLComptetID'];

         if (xClasse '1') or (xClasse '2') or (xClasse = '3') or (xClasse = '4') or (xClasse = '5') then
            begin
           xSoldeFc := FieldValues['SoldeFc'];
           xSoldeUs := FieldValues['SoldeUs'];
           end
         else begin
           xSoldeFc := 0;
           xSoldeUs := 0;
        end;
         Active := false;
         Sql.Clear;
         Sql.Add('UPDATE TFPlanSolde ');
         Sql.Add('SET ReportFc =:zReportFc, ReportUs =:ZReportUs, TotDFc =:ZmtotFC, TotDUs =:ZmtotUs, SoldeFc =:xZmtotFc, SoldeUs =:xZmtotUs');
         Sql.Add('WHERE GLComptetID =:GLCpte');
         Parameters.ParamByName('ZReportFc').value := xSoldeFc;
         Parameters.ParamByName('ZReportUs').value := xSoldeUs;
         Parameters.ParamByName('ZmtotFC').value := xSoldeFc;
         Parameters.ParamByName('ZmtotUs').value := xSoldeUs;
         Parameters.ParamByName('xZmtotFc').value := xSoldeFc;
         Parameters.ParamByName('xZmtotUs').value := xSoldeUs;
         Parameters.ParamByName('GlCpte').value := xclecpte;
         ExecSql;

       Next;
       end;
    end;



Donc, la séquence est interrompu, que doit-je faire ? De l'aide SVP, je suis bloqué.

d'avance Merci.
a+
Notrica
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
3
Merci
Bonjour,
oui, mais je ne comprends pas bien.
faire une requête SQL dans une boucle ne me semble pas très logique :
on fait une requête UPDATE sur une table justement pour éviter une boucle..

Si tu es obligé de faire ume boucle alors pourquoi ne pas traiter les enregistrements modifiés sous forme d'affectations en encapsulant par
un edit et un post ?

le mélange des deux genres conduit généralement à ce type de souci..

Voila, si je met OPEN pour ouvrir le fichier après UPDATE, au lieu de continuer avec les enregistrement suivant, il rendre encore au premier enregistrement déjà traiter et sauvegardé.

C'est normal sur une ouverture la table se cale sur le premier, donc tu ne t'en sortiras pas de cette manière..

essaie toutefois d'enlever le Active := false; bien que j'ai un doute car pour un update la table doit être fermée..

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
Bonjour,

rupture de séquence ?
je suppose qu'il s'agit d'un acte volontaire sinon il y a bug..

le seul moyen de gérer correctement les erreurs ou les annulations de validation d'enregistrement consiste à utiliser le mode TRANSACTIONNEL :

voir StartTransaction, Commit et RollBack

bon courage

cantador
Commenter la réponse de cs_cantador
Messages postés
89
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 octobre 2013
0
Merci
Salut Cantador,

Merci pour votre intervention, le problème se trouve au niveau de la mise à jour "UPDATE" , lorsque il est exécuté le fichier reste fermer et la séquence est interrompu. Je ne sais pas comment faire pour poursuivre dans le traitement pcq si je réouvre encore le fichier le traitement se fait toujours sur le 1er enregistrement ça n'évolue pas.

Je cherche comment faire pour continuer dans le traitement du fichier.

Merci d'avance
a+
Notrica
Commenter la réponse de notrica
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
Bonjour,

Mets des points d'arrêt et vérifie si
ta boucle tourne correctement (en testant les valeurs..)

je suis sans micro actuellement..

cantador
Commenter la réponse de cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
Voir aussi si tu peux traiter l'affectation de la même manière
que le passage de paramètre..

cantador
Commenter la réponse de cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
désolé, je viens de voir que tu passes tout en paramètres...
ma première remarque reste valable (la boucle)


cantador
Commenter la réponse de cs_cantador
Messages postés
89
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 octobre 2013
0
Merci
Salut Cantador,

J'ai placer les points d'arrets le programme s'arrete au niveau de "NEXT"; avec se message d'erreur "Cannot perform this operation on a closed dataset", j'ai compris que s'etait le problème de la base ou du fichier qui est fermer et la commande NEXT ne s'execute pas.
Voila, si je met OPEN pour ouvrir le fichier après UPDATE, au lieu de continuer avec les enregistrement suivant, il rendre encore au premier enregistrement déjà traiter et sauvegardé.

Mon soucie, je cherche comment passer à l'enregistrement suivant après UPDATE.

Merci d'avance
a+
Notrica
Commenter la réponse de notrica
Messages postés
89
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 octobre 2013
0
Merci
Salut Cantador,

[i]Si tu es obligé de faire ume boucle alors pourquoi ne pas traiter les enregistrements modifiés sous forme d'affectations en encapsulant par
un edit et un post ?/i

OK, j'ai enlevé le UPDATE dans la boucle et remplacé par un Edit et un Post. Cela marche.

Je vous remerci beaucoup.Bonne continuité.
a+
Notrica
Commenter la réponse de notrica