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 :

approvisionner une table apres une boucle


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut approvisionner une table apres une boucle
    salut tous le monde
    j'ai deux tables
    Tsorties
    dettes
    j'ai fait une boucle sur la table sorties approvisionner par une table Temporary et je voulais au meme temps enregistrer une date la somme de la facture dans la table dettes.
    le probleme est que la derniere (tdettes) prends la valeur (sommeF) a chaque fois que la table sorties prend la valeur[i] .
    pour etre bien clair je veux quand la table Tsorties finisse la boule alors la table tdettes ne prent qu'un seul enregistrement [sommeF]
    merci

  2. #2
    Rédacteur/Modérateur

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

    Très brouillon tout ça !
    Commencez par indiquer votre SGBD, peut-être que celle-ci propose une utilisation de trigger
    Ensuite ce n'est pas clair une table sorties, une table Temporary la table dettes ? Une description de table vaut mieux qu'un discours surtout que vous amenez une notion de facture.

    Je soupçonne que plusieurs lignes de la table temporaire concernent une même facture et que vous ne savez pas comment faire pour cumuler les diverses lignes.
    Tout dépend de si la table temporaire est triée selon le numéro de facture (auquel cas un vieux programmeur comme moi écrira qu'il s'agit d'un classique programme de rupture de contrôle truc déjà bien connu des années 70 si ce n'est avant)
    Si ce n'est pas le cas, encore une fois, le SGBD propose peut-être des instructions SQL comme INSERT OR UPDATE (Firebird) ou INSERT ON DUPLCATE KEY UPDATE (mySQL) etc...
    enfin, il est aussi possible d'interroger (dépendant de ce que vous indiquez comme temporary table) la table temporaire par SQL ?
    un SELECT NUM_FACTURE,SUM(MONTANT) SOmmeF FROM temporary GROUP BY NUM_FACTURE vous donnerai alors les tuples (je crois que c'est le terme) par facture
    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

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    bonjour sergio

    je travail avec les base *.MDB
    ta table tempv = temporaire pour la visualiser les ventes avant l'enregistrement dans la table TSorties = t_sort;

    voici mon code dans button1click

    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
           T_tempv.First;
         begin
           while not T_Tempv.EOF do
           begin
               T_Sort.Insert;
               T_SortDate_S.Value:=(Date);
               T_SortFact_S.Value:=strtoint(LBNumGen.Caption);
               T_SortCod_CatS.Value:=T_tempvCD_CatVT.value;
               T_SortCat_S.Value:=T_TempVCat_VT.Value;//
               T_SortCD_PS.Value:=T_tempvCD_PVT.value;
               T_SortProd_S.Value:=T_tempvProd_VT.value;
               T_SortQte_S.Value:=T_tempvQte_VT.value;
               T_SortPrix_S.Value:=T_tempvPrix_VT.value;
               T_SortUnits_S.Value:=T_tempvUnits_VT.value;
               T_SortCdCL_S.Value:=Q_CLCode_CL.Value;
               T_SortType_S.Value:=LB_Type.Caption;
               T_SortRet_S.Value:=LB_RS.Caption;
               TRY
               T_Sort.Post;
               Except
               T_Sort.Cancel;
               END;
               T_tempv.Next;
            end;
         end;
     
    // ici la table T_tempV s’arrête
     
    {comment faire pour que la table T_dettes évite la redondance avec la table T_sort  } 
    .................
    T_Detes. Open;
    T_Detes.Edit;
    T_Detes.insert;
    T_DetesFact_SV.Value:=strtoint(LBNumGen.Caption);
    T_DetesDate_V.Value:=(Date);
    T_DetesDate_D.Value:=(Date);
    T_DetesCd_CLV.Value:=Q_CLCode_CL.Value;
    T_DetesPers.Value:=Q_CLNom_CL.Value;
    T_DetesDateF.Value:=(Date);
    T_DetesSommF.Value:=strtofloat(LBChifr.Caption);
    T_Detes.Post;

  4. #4
    Rédacteur/Modérateur

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

    *.MDB donc Access.

    Si je comprend bien votre code, en fait votre table temporaire (et donc votre boucle) ne concerne toujours qu'une seule facture ?
    déduit de ceci : T_SortFact_S.Value:=strtoint(LBNumGen.Caption); ou T_DetesFact_SV.Value:=strtoint(LBNumGen.Caption);Outre le fait que votre code ne me donne pas une très grande confiance quant au programme, je suis quand même étonné que vous n'ayez pas pensé à untiliser de variable locale (pour récupérer la somme totale)

    voici la méthode code
    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
    var sommetotale : Single;
    begin
         sommetotale:=0; 
          T_tempv.First;
         begin
           while not T_Tempv.EOF do
           begin
               T_Sort.Insert;
               T_SortDate_S.Value:=(Date);
               T_SortFact_S.Value:=strtoint(LBNumGen.Caption);
               T_SortCod_CatS.Value:=T_tempvCD_CatVT.value;
               T_SortCat_S.Value:=T_TempVCat_VT.Value;//
               T_SortCD_PS.Value:=T_tempvCD_PVT.value;
               T_SortProd_S.Value:=T_tempvProd_VT.value;
               T_SortQte_S.Value:=T_tempvQte_VT.value;
               T_SortPrix_S.Value:=T_tempvPrix_VT.value;
               T_SortUnits_S.Value:=T_tempvUnits_VT.value;
               T_SortCdCL_S.Value:=Q_CLCode_CL.Value;
               T_SortType_S.Value:=LB_Type.Caption;
               T_SortRet_S.Value:=LB_RS.Caption;          
               TRY
               T_Sort.Post;
               sommetotale:=sommetotale+(T_tempvQte_VT.value*T_tempvPrix_VT.value); 
               Except
               T_Sort.Cancel;
               END;
               T_tempv.Next;
            end;
         end;
    
    .................
    T_Detes. Open;
    T_Detes.Edit;
    T_Detes.insert;
    T_DetesFact_SV.Value:=strtoint(LBNumGen.Caption);
    T_DetesDate_V.Value:=(Date);
    T_DetesDate_D.Value:=(Date);
    T_DetesCd_CLV.Value:=Q_CLCode_CL.Value;
    T_DetesPers.Value:=Q_CLNom_CL.Value;
    T_DetesDateF.Value:=(Date);
    T_DetesSommF.Value:=sommetotale;
    T_Detes.Post;
    Mais la méthode requête serait quand même beaucoup plus propre (je remarque qu'il y a une autre table en jeu, certainement client)
    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

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Maestro(SergioMaster)

    1- pour la discutions vide c'est que j'ai un problème de net : j'ai posté deux fois la même question et je ne savais comment retirer la deuxième alors j'ai effacé toutes sauf les trois points
    2- merci de votre très chère aide , c'est bien ce que je voulais

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 958
    Points
    40 958
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    1- pour la discutions vide c'est que j'ai un problème de net : j'ai posté deux fois la même question et je ne savais comment retirer la deuxième alors j'ai effacé toutes sauf les trois points
    en ce cas modifiez le message en y ajoutant une demande de suppression par exemple "Merci de supprimer ce post en doublon"
    ou envoyez un MP à un modérateur (actif) du forum supprimer le post, car c'est vraiment vécu comme un UP

    2- merci de votre très chère aide , c'est bien ce que je voulais
    Mon aide est gratuite
    J'espére que vous vous rendez compte que c'est du B.A.B.A. niveau programmation, digne des années 1970
    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

Discussions similaires

  1. [MySQL] Comment débuter une boucle WHILE à partir du 2e enregistrement de la table ?
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 06/03/2007, 17h51
  2. manipuler une table dans une boucle.
    Par DonQuiShoote dans le forum Access
    Réponses: 13
    Dernier message: 28/02/2007, 08h05
  3. Trier une table après une requête d’ajout
    Par Meduse dans le forum Access
    Réponses: 6
    Dernier message: 30/05/2006, 15h54
  4. Réponses: 13
    Dernier message: 20/03/2006, 16h26
  5. Réponses: 4
    Dernier message: 26/08/2004, 08h01

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