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 :

extraire formule calcule base données


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club Avatar de Morfus
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 58
    Points
    58
    Par défaut extraire formule calcule base données
    Bonjour
    j'utilise Delphi 7 et base de donnée interbase/firebird
    mon probleme et le suivant
    quelqun parmi vous peut me donner la façon d'extraire une formule du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1champx.value+table2champx.value
    sachant que ce code est sauvegarder dans la base donnée
    ce que je veux dire extraire un champ de la base donnée et l'executer comme etant une formule de calcule
    merci a vous

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je ne comprends pas ce que tu veux exactement, peux-tu ré-expliquer ta demande ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Je pense qu'il faut que tu fasse un analyseur syntaxique et pour cela il te faut normaliser ta formule.

    Tout d'abord fais une étude de besoin pour savoir jusqu'où tu dois aller.

    Tu peux imaginer le faire simplement en construction de SQL sans faire une réel analyse syntaxique.

    En remplaçant par exemple le From d'une requête par ta formule + From

    Maintenant ai-je bien compris ce que tu veux ?
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  4. #4
    Membre du Club Avatar de Morfus
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 58
    Points
    58
    Par défaut
    merci pour votre réponse
    je m'explique
    je veux sauvegarder la formule (si par la suite jai envi de changer cette formule) dans la base de donnée
    puis dans l'execution la valeur du champ formule sera executer tel qu'une fonction
    merci

  5. #5
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Ok

    Alors une idée :

    StringReplace
    ou
    Format

    Exemple :
    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
     
    procedure construireSql(QueryParam : tquery; QueryAOuvrir : tquery);
    const
      SQL_Text = select field1, field2, %s as Field3 from maTable
    var
      s : string;
    begin
       //--- initialisation query 
       QueryParam.Sql.Text := 'select Formule '+
                                '  from tableformule ' +
                                ' where Field_param = :Field_param';
        QueryParam.Prepare;
      QueryParam.params[0].value := 'Field3';
      QueryParam.Open;
      s := format( SQL_Text , [QueryParam.Fields[0].AsString]);
      QueryAOuvrir.Sql.Text := s;
      QueryAOuvrir.open; 
    end;
    évidemment
    tu peux faire plus compliqué si le besoin existe
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  6. #6
    Membre du Club Avatar de Morfus
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Yurck Voir le message
    Ok


    Exemple :
    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
     
    procedure construireSql(QueryParam : tquery; QueryAOuvrir : tquery);
    const
      SQL_Text = select field1, field2, %s as Field3 from maTable
    var
      s : string;
    begin
       //--- initialisation query 
       QueryParam.Sql.Text := 'select Formule '+
                                '  from tableformule ' +
                                ' where Field_param = :Field_param';
        QueryParam.Prepare;
      QueryParam.params[0].value := 'Field3';
      QueryParam.Open;
      s := format( SQL_Text , [QueryParam.Fields[0].AsString]);
      QueryAOuvrir.Sql.Text := s;
      QueryAOuvrir.open; 
    end;:arf:
    merci
    oui mais la formule récupérer du champ de la base de données comment l'exécuter

    Aidée moi SVP chui perdu

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Si tu veux réellement faire ça tu dois (uniquement en SQL) récupérer et stocker ta formule dans une variable texte, construire la requête finale sous forme de chaîne de caractères en concaténant ta formule avec le reste de la requête, exécuter la commande sql via une fonction du SGBD qui soit capable d'exécuter une commande SQL à partir d'une chaine de caractères.

    Je ne connais pas FireBird/Interbase donc je ne connais pas la syntaxe ni même si les fonctionnalités dont tu as besoin existent.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  8. #8
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    bon je vais détaillé un peu et rapidement l'idée.

    1 °) tu crée une table qui contiendra tes formules au format SQL

    prenons le cas de la présentation d'un client
    code client, nom client, volume facturé

    Il se trouve que le volume facturé peut être considéré comme une notion fonctionnelle. En effet en fonction du besoin tu affichera ou non les avoirs ou les remises etc...

    Donc voici mes tables

    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
     
    CREATE TABLE FORMULE (
        REQUETE_CODE CHAR(20) ,
        FIELD_NOM  CHAR(20),
        FORMULE VARCHAR(255) )
     
    CREATE TABLE CLIENT (
        CLIENT_CODE CHAR(20) ,
        CLIENT_NOM  CHAR(20) )
     
    CREATE TABLE FACTURE (
        FACTURE_NUM  SMALLINT,
        FACTURE_DATE DATE,
        CLIENT_CODE CHAR(20) ,
        FACTURE_MONTANT NUMERIC(15,2)  )
     
    CREATE TABLE AVOIR (
        AVOIR_NUM  SMALLINT,
        AVOIR_DATE DATE,
        CLIENT_CODE CHAR(20) ,
        AVOIR_MONTANT NUMERIC(15,2)  )
     
     
    CREATE TABLE REMISE (
        REMISE_NUM  SMALLINT,
        REMISE_DATE DATE,
        CLIENT_CODE CHAR(20) ,
        REMISE_MONTANT NUMERIC(15,2)  )
    Voici la requête de base pour l'affichage des factures d'un client donné sur une période définie par un début de période et déclaré dans une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      SQL_Text =  '  SELECT CLIENT.CLIENT_CODE, CLIENT.CLIENT_NOM, %s VOLUME_FACTURE'
                + '  FROM CLIENT                                                 '
                + 'left join facture on facture.client_code = client.client_code'
                + 'left join avoir on avoir.client_code = client.client_code   '
                + 'left join remise on remise.client_code = client.client_code'
                + 'where facture.facture_date >= :DebutPeriode        '
                + '   and avoir.avoir_date    >= :DebutPeriode   '
                + '   and remise.remise_date  >= :DebutPeriode    '
                + '   and client.client_code  >= :ClientAffiche'
                + 'group by client.client_code ';
    voici le Contenu imaginable de la table FORMULE

    REQUETE_CODE FIELD_NOM FORMULE
    FACTURE VOLUME_FACTUTRE SUM(FACTURE_MONTANT)
    AVOIR VOLUME_FACTUTRE SUM(AVOIR_MONTANT)
    REMISE VOLUME_FACTUTRE SUM(REMISE_MONTANT)
    CHIFFRE AFFAIRE VOLUME_FACTUTRE SUM(FACTURE_MONTANT) - SUM(AVOIR_MONTANT) - SUM(REMISE_MONTANT)


    Tu pourrais donc faire une procédure du type précédemment cité

    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
     
    procedure AfficherPourunClient(QuelAffichage, QuelClient : String; DateDebut : TDateTime; QueryAOuvrir : tquery);
    var
      s : string;
      QueryParam : Tquery;
    begin
       //--- initialisation query (tquery.create etc ...)
       QueryParam.Sql.Text := 'select Formule '+
                              '  from formule ' +
                              ' where FIELD_NOM = :Field_param'
                              '    and REQUETE_CODE= :Rqd_param';
        QueryParam.Prepare;
        QueryParam.parambyname('Field_param').value := 'VOLUME_FACTUTRE';
        QueryParam.parambyname('Rqd_param').value := QuelAffichage;
     
        QueryParam.Open;
        // Cette fonction va remplace le %s par la formule correspondante
        s := format( SQL_Text , [QueryParam.Fields[0].AsString]);
        QueryAOuvrir.Sql.Text := s;
        QueryAOuvrir.prepare;
     
        QueryParam.parambyname('DebutPeriode').asDateTime := DateDebut;
        QueryParam.parambyname('ClientAffiche').asString  := QuelClient;
     
        QueryAOuvrir.open;
    end;
    et l'appeler ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AfficherPourunClient('FACTURE','MonClient',DateDebut, monqueryaAfficher);
     
    ou
     
    AfficherPourunClient('AVOIR','MonClient',DateDebut, monqueryaAfficher);
    voilà j'ai imagé au mieux.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  9. #9
    Membre du Club Avatar de Morfus
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 58
    Points
    58
    Par défaut
    voila la façon dont je sauvegarde mes formules

    Table1.Prix HT * Table2.Taux_Tva / 100
    Au faite je stock mes formule au format de QRExpr1 de quickreport de delphi

    Merci a vous tous

Discussions similaires

  1. extraire donnée àaprtir de Base donnée ADONIX
    Par hassanihichem dans le forum SAGE
    Réponses: 2
    Dernier message: 27/02/2012, 11h43
  2. [Spip] extraire d'une base de données
    Par cfacile0 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 02/01/2011, 14h56
  3. formules sur base de données
    Par Nicosxb dans le forum Excel
    Réponses: 1
    Dernier message: 07/08/2008, 16h08
  4. Delphi - Base donnée Paradox, problème de nom des champs
    Par mjp dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/01/2005, 21h10
  5. base données avec java mono et multi utilisateurs
    Par Garion dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 03/12/2004, 09h20

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