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

Delphi Discussion :

Comment calculer le salaire à partir de DBEdit ?


Sujet :

Delphi

  1. #1
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut Comment calculer le salaire à partir de DBEdit ?
    Salut,

    J'ai deux tables séparées.

    Ce que je veux faire est à partir de deux champs DBEdit (table employée)

    Emp_cat et Emp_E
    calculer le salaire de la table Paye (à partir des deux DBEdit)

    Pierre

    Emp_cat=3
    Emp_E=1

    dans la table Paie

    la valeur 3 (Emp_cat) correspondante indice =250
    la valeur 1 (Emp_E) correspondante E01= 13

    resultat=250*45+13*45
    comment faire la requête?
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Pourrais tu nous fournir le SQL que tu as tenté d'écrire que l'on l'utilise comme base de travail !
    Ainsi que le type de SGBD et Provider nous indiquant les limitations syntaxiques du SQL

    Pour "Emp_cat" et "cat", c'est une jointure basique
    En Oracle, cela pourrait se faire via un PIVOT sur "Employer" pour faciliter la jointure sur "Paie" entre les champs "Emp_E" et "E0x" (x étant la valeur de "Emp_E")
    Si non, le faire en deux temps avec une génération dynamique de la requête sur "Paie" a partir des données lues depuis "Employer"

    Sinon c'est une mauvaise structure de table, pour ajouter un quatrième niveau, on doit ajouter une colonne dans "Paie", c'est pas bon du tout ça !
    Il aurait fallu une table avec comme clé primaire "Emp_Cat, Emp_E", cela aurait été tellement plus simple à utiliser, à maintenir et tout !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pourrais tu nous fournir le SQL que tu as tenté d'écrire que l'on l'utilise comme base de travail !
    Ainsi que le type de SGBD et Provider nous indiquant les limitations syntaxiques du SQL

    Pour "Emp_cat" et "cat", c'est une jointure basique
    En Oracle, cela pourrait se faire via un PIVOT sur "Employer" pour faciliter la jointure sur "Paie" entre les champs "Emp_E" et "E0x" (x étant la valeur de "Emp_E")
    Si non, le faire en deux temps avec une génération dynamique de la requête sur "Paie" a partir des données lues depuis "Employer"

    Sinon c'est une mauvaise structure de table, pour ajouter un quatrième niveau, on doit ajouter une colonne dans "Paie", c'est pas bon du tout ça !
    Il aurait fallu une table avec comme clé primaire "Emp_Cat, Emp_E", cela aurait été tellement plus simple à utiliser, à maintenir et tout !

    merci de votre réponse

    le tableau paie est un tableau statique

    je change la valeur des deux champs quelques fois( "Emp_Cat, Emp_E" ) pour extraire l'indice de la table paie .

    select Indice*45 from paie where DBEdit1= categ; !!!!!!

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par S.H Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select Indice*45 from paie where DBEdit1= categ;
    Tu n'as rien de plus abouti ?
    J'aurais apprécié le code d'appel en Delphi !
    On a toujours pas l'information sur le SGBD et le Provider !

    Que vient faire ce DBEdit1 en plein milieu ?
    Je te conseille de regarder attentivement la méthode ParamByName

    "categ" ? on a "cat", "Emp_cat" mais pas de "categ"
    je suppose que tu as simplifié les noms pour le forum, je considère donc que c'est "cat" !


    Comme tu peux voir avec le code suivant, cela n'a rien de difficile
    Ou alors c'est que je n'ai rien compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QuerySalarie.SQL.Text := 'SELECT Emp_cat, Emp_E FROM Employer WHERE name = :pNom';
    QuerySalarie.ParamByName('pNom').AsInteger := EdSearchSalarieByNom.Text; // EdSearchSalarieByNom est un simple TEdit (surtout pas un TDBEdit), il suffit d'y taper le mot 'Pierre'
    QuerySalarie.Open();
     
    QueryPaie.SQL.Text := Format('SELECT paie.Indice * 45 + E%.2d FROM paie WHERE paie.cat = :pcat', [QuerySalarie.FieldByName('Emp_E').AsInteger]);
    QueryPaie.ParamByName('pcat').AsInteger := QuerySalarie.FieldByName('Emp_cat').AsInteger;
    QueryPaie.Open();
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    merci beaucoup ShaiLeTroll

  6. #6
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    grace a toi ShaiLeTroll le code ça marche

    ADOQuery1.sql.text:='select indice from paie where cat =:valeur';
    ADOQuery1.parameters.paramByname('indice').value:=DBEdit1.Field.Value;
    ADOQuery1.open;

    Edit1.text:=inttostr(ADOQuery1.parameters.paramByname('indice').asinteger*45);

    mais comment je trouve la valeur de E00 E01 E02 ... à partir de DBEdit2.text // c'est Emp_E sur la form

    le Problème : comment je calcule
    edit1.test := indice * 45 + e% *45 // where cat= DBEdit1.text and E%= DBEdit2.text

    DBEdit1.text reçoit la valeur de Emp_cat //voir la form
    et DBEdit2.text reçoit la valeur de Emp_E

    j'ai essayé plusieurs fois et ça ne donne aucun résultat

  7. #7
    Rédacteur/Modérateur

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

    Citation Envoyé par S.H Voir le message
    le code ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ADOQuery1.sql.text:='select indice from paie where cat =:valeur';
    ADOQuery1.parameters.paramByname('indice').value:=DBEdit1.Field.Value;
    ADOQuery1.open;
    ça, j'en suis étonné car 'indice' n'est pas un paramètre, contrairement à 'valeur'
    une erreur de copie ? en tout cas dans le parambyname c'est 'Valeur' qu'il faut indiqué
    Edit1.text:=inttostr(ADOQuery1.parameters.paramByname('indice').asinteger*45);
    la colonne 'indice' n'est pas un paramètre donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1.text:=inttostr(ADOQuery1.FieldByname('indice').asinteger*45);
    de plus si il faut toujours multiplier par 45 autant le faire dans le SQL select indice*45 from paie where cat =:valeuret tant qu'à faire pourquoi ne pas utiliser un DBText plutôt qu'un Edit.text pour afficher le résultat ?

    le Problème : comment je calcule
    edit1.test := indice * 45 + e% *45 // where cat= DBEdit1.text and E%= DBEdit2.text
    Comme vous n'avez pas été capable de suivre le code de ShaiLeTroll correctement je ne m'étonne pas que vous ne puissiez pas obtenir le bon résultat ni même utiliser la formule !
    non seulement il vous faut revoir la méthode parambyname mais aussi la fonction Format
    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

  8. #8
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    c'est difficile le SQL pas de solution

Discussions similaires

  1. Comment calculer la taille d'une base de données ?
    Par say dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 01/04/2011, 16h48
  2. [Matrices] Comment calculer le Déterminant d'une matrice 4x4
    Par cyber_N dans le forum Algorithmes et structures de données
    Réponses: 70
    Dernier message: 19/08/2005, 15h47
  3. comment calculer le temps d'execution
    Par passion_info dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/06/2005, 09h13
  4. Réponses: 2
    Dernier message: 05/01/2005, 14h36

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