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

WinDev Discussion :

Calcul solde par une requête [WD14]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Calcul solde par une requête
    Bonjour.

    J'aimerai améliorer mon programme de gestion de compte bancaire.

    Dans une table fichier remplie par une requête, j'ai une colonne débit, une colonne crédit, une colonne solde. Cette dernière est remplie par une procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    POUR i=TableSelect(Table_Compte_Banque) _A_ TableOccurrence(Table_Compte_Banque)
     
    	TableSelectPlus(Table_Compte_Banque,i)
    	Table_Compte_Banque.Solde[i]=Table_Compte_Banque.Solde[i-1]+Table_Compte_Banque.Crédit[i]-Table_Compte_Banque.Débit[i]
    	TableEnregistre(Table_Compte_Banque)
     
    FIN
    Cette procédure me calcul le solde intermédiaire suivant les valeurs des débits ou crédits . Lais pour un fichier de 20000 lignes cela prend 30 minutes

    Y à t-il la possibilité de faire une requête pour avoir le même résultat mais
    plus rapide. Je maîtrise mal les commandes sql et en regardant sur internet je n'ai
    vu que très peu de renseignements

    J'arrive par une requete à calculer le solde final :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(Compte_Banque.Crédit-Compte_Banque.Débit) AS le_Solde_Compte
    FROM Compte_Banque

    Mais l'astuce pour calculer les soldes intermédiaire je cale.

    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    D'après ton code, tu veux enregistrer dans ta base les soldes intermédiaires. Est-ce bien le cas ?
    Si c'est bien ça à mon avis le mieux est de passer par un trigger sur ton fichier:
    A chaque création d'une ligne, tu lui affectes la sommes des lignes précédentes. Par contre tu auras un problème si tu "insères" un enregistrement.
    En fait la vrai question est: pourquoi veux tu enregistrer le solde intermédiaire ? Si tu le calcule à la volée (sans enregistrement), je parie que tu seras très loin de la demi-heure pour 20000 lignes (lance l'analyseur de performances, tu verras ce qui prend le plus de temps dans ton code).

    tatayo.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    @tatayo

    Bonjour

    Avant j’utilisais le logiciel « Money » pour gérer mes compte, il m’indiquait le solde intermédiaire c’était un indicateur de situation suivant la date. Ce logiciel n’est plus suivi par Microsoft pour les connexions en banque, alors avec windev j’ai réalisé un programme qui peut m’aider à suivre mes compte et retrouver des fonctions du Money
    Je pensais avec une requête imbriquée je pouvais faire quelque chose, mais peut être que faire à la volée sans enregistrer me simplifierai la tâche, je regarde de ce côté.

    Merci

  4. #4
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    Bonjour,
    tu peux aussi créer une procédure basée sur une requête paramétrée qui recupère le paramètre date à chaque sélection et t'aura le solde à cette date.Cette procédure pourra recupérer la date du premier enregistrement de ton fichier et avec la date selectionnée t'aura bien une requête avec deux paramètres.
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    je pense qu'en effet, cela n'a pas d'intérêt de le stocker dans la base. Quel est l'identifiant de ta table ? Y aurait-il un indicateur numérique qui te permettrait de faire une requête comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUM(Compte_Banque.Crédit-Compte_Banque.Débit) AS le_Solde_Compte
    FROM Compte_Banque
    where IDCompte_Banque < {NumeroLigneEnCours-1}
    Sachant que ce numérique serait l'ordre d'insertion et devrait être dans l'ordre temporel des opérations ....

    Cela peut aussi marcher avec des dates + heures

    à bientôt,

    Nicolas

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    @Nero Paul
    @Nicolas Jeanneau

    Bonjour,

    Merci de vos propositions, je modifie mon programme et je test


    a+

  7. #7
    Membre averti
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 256
    Points : 435
    Points
    435
    Par défaut
    Bonjour,

    Pourquoi tout recalculer en une seule fois?

    Dans le code d'affichage d'une ligne de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI Table=1
     Solde=credit-Debit
    SINON
     Solde=Solde[table-1]+Credit-Debit
    FIN
    Par contre, ce solde n'est valable que si on est trié en date de valeur,
    du moins si on veut être en phase avec la banque...

    Bon dev

    Patrick

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Je refais mon programme sans utiliser le RAD, c’est un peu plus long mais ça crée moins de problème lors de modification et j’utilise ma procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    POUR i=TABLE_Compte_Banque.IDCompte_Banque _A_ TableOccurrence(TABLE_Compte_Banque)
     
    	TableSelectPlus(TABLE_Compte_Banque,i)
     
    	TABLE_Compte_Banque.Solde[i]=TABLE_Compte_Banque.Solde[i-1]+TABLE_Compte_Banque.Crédit[i]-TABLE_Compte_Banque.Débit[i]
     
    	TableEnregistre(TABLE_Compte_Banque)
    FIN

    Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Requête/SQL]Calcul d'un solde dans une requête ou un état
    Par alalau dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/04/2007, 16h02
  2. [SQL] Valeur retournée par une requête...
    Par Empty_body dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/01/2006, 22h13
  3. colonne définie par une requête imbriquée
    Par lper dans le forum Langage SQL
    Réponses: 10
    Dernier message: 02/09/2005, 16h41
  4. Récuparation des années par une requête
    Par 973thom dans le forum Access
    Réponses: 3
    Dernier message: 14/06/2005, 18h33
  5. Calculs complexes dans une requête
    Par ARRG dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/06/2005, 19h11

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