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 :

demande requête sql sous delphi 7


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut demande requête sql sous delphi 7
    bonjours les amis, voici mon problème

    j'aimerais transformer cette boucle en une requette sql (sql 2000) sous delphi 7 pour mettre un tquery

    ----debut de boucle -------------------

    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
    mdd.TPriseCharge.First;
    while not mdd.TPriseCharge.Eof do
    begin
        if ((mdd.TPriseChargenum_miss.Text=Prise_chargeF.edit42.Text)
        and (mdd.TPriseChargedate_pc.Text=Prise_chargeF.label1.caption)) then
        begin
         mdd.TPriseCharge.Edit;
         mdd.TPriseChargemont_dej.Value:=strtofloat(edit1.Text);
         mdd.TPriseChargemont_din.Value:=strtofloat(edit2.Text);
         mdd.TPriseChargemont_heber.Value:=strtofloat(edit3.Text);
         mdd.TPriseChargejour.Text:=label15.Caption;
         mdd.TPriseChargetype_pc.Text:=label11.Caption;
         mdd.TPriseChargetotal_indem.Value:=strtofloat(edit4.Text);
         mdd.TPriseChargergion.Text:=edit43.Text;
     
        end;
        mdd.TPriseCharge.Next;
        end;
    ----- fin de boucle --------

    la première condition edit42 fixe.

    sauf la c'est que la 2ème condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mdd.TPriseChargedate_pc.Text=Prise_chargeF.label1.caption)) peut etre 
    label2.caption 
    label3.caption 
    .
    .
    .
    label10.caption
    puisque j'utilise 10 CheckBox, (on check : alors 10 boucle de while not ) , chaque checkbox pour chaque label.caption

    merci pour votre aide

  2. #2
    Rédacteur/Modérateur

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

    Tout d'abord , merci d'utiliser les balises de code (le bouton #) pour une lecture plus agréable. Et le mieux serait quand même d'indiquer la structure de la table plutôt que d'avoir à la deviner !
    indiquer aussi le type de composants utilisé BDE, DBExpress, ADO .....

    un Edit est l'équivalent SQL de UPDATE
    les if l'équivalent d'un WHERE

    donc le SQL donnerait quelque chose comme
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE NOMTABLE SET Chargemont_dej=:CDEJ,Chargemont_din=:CDIN,
    Chargemont_heber=:CHEBER,Chargejour=:JOUR,Chargetype_pc=:TPC,
    Chargetotal_indem=:CT,Chargergion=:CREGION
    WHERE Chargenum_miss=:MISSION
    AND Chargedate_pc=:DATE

    ce qui donnerait par la suite un code DELPHI

    Code avec Query BDE : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Query.ParamByName('CDEJ').asFloat:=strtofloat(edit1.Text);
    Query.ParamByName('CDIN').asFloat:=strtofloat(edit2.Text);
    Query.ParamByName('CHEBER').asFloat:=strtofloat(edit3.Text);
    Query.ParamByName('JOUR').asString:=label15.caption;
    Query.ParamByName('TPC').asString:=label11.caption;
    Query.ParamByName('CT').asFloat:=strtofloat(edit4.Text);
    Query.ParamByName('CREGION').asString:=Edit43.Text;
    Query.ParamByName('MISSION').asString:=label11.caption;
    Query.ParamByName('DATE').asString:=Prise_chargeF.label1.caption;
    Query.ExecSQL;

    cependant , j'aimerais faire plusieurs suggestions :
    sur les montants , il serait préférable d'utiliser un StrFloatDef
    sur le Total - un champ de type calculé éviterait d'avaoir al le mettre à jour
    - la somme des 3 montants serait peut être mieux
    sur la date - la date en texte dans une BDD est une très mauvaise idée
    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 du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    je vais essayer et merci pour votre réponse

  4. #4
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Tout d'abord , merci d'utiliser les balises de code (le bouton #) pour une lecture plus agréable. Et le mieux serait quand même d'indiquer la structure de la table plutôt que d'avoir à la deviner !
    indiquer aussi le type de composants utilisé BDE, DBExpress, ADO .....

    un Edit est l'équivalent SQL de UPDATE
    les if l'équivalent d'un WHERE

    donc le SQL donnerait quelque chose comme
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE NOMTABLE SET Chargemont_dej=:CDEJ,Chargemont_din=:CDIN,
    Chargemont_heber=:CHEBER,Chargejour=:JOUR,Chargetype_pc=:TPC,
    Chargetotal_indem=:CT,Chargergion=:CREGION
    WHERE Chargenum_miss=:MISSION
    AND Chargedate_pc=:DATE

    ce qui donnerait par la suite un code DELPHI

    Code avec Query BDE : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Query.ParamByName('CDEJ').asFloat:=strtofloat(edit1.Text);
    Query.ParamByName('CDIN').asFloat:=strtofloat(edit2.Text);
    Query.ParamByName('CHEBER').asFloat:=strtofloat(edit3.Text);
    Query.ParamByName('JOUR').asString:=label15.caption;
    Query.ParamByName('TPC').asString:=label11.caption;
    Query.ParamByName('CT').asFloat:=strtofloat(edit4.Text);
    Query.ParamByName('CREGION').asString:=Edit43.Text;
    Query.ParamByName('MISSION').asString:=label11.caption;
    Query.ParamByName('DATE').asString:=Prise_chargeF.label1.caption;
    Query.ExecSQL;

    cependant , j'aimerais faire plusieurs suggestions :
    sur les montants , il serait préférable d'utiliser un StrFloatDef
    sur le Total - un champ de type calculé éviterait d'avaoir al le mettre à jour
    - la somme des 3 montants serait peut être mieux
    sur la date - la date en texte dans une BDD est une très mauvaise idée


    comment je dois déclarer ('CDEJ'),('CDIN'),('CHEBER'),....
    comme des variables ???

    j'ai message erreur prisechargemont_dej:nom de colonne incorrect

    voulez vous bien me diriger comment faire
    merci

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    comment je dois déclarer ('CDEJ'),('CDIN'),('CHEBER'),....
    comme des variables ???
    non , ce sont des paramètres de la requête

    j'ai message erreur prisechargemont_dej:nom de colonne incorrect
    ça c'est de votre faute . j'ai repris le code que vous aviez fourni en supposant que le nom des colonnes étaient correct.
    vous m'auriez fourni ce que j'ai demandé , j'aurais peut être pu fournir le SQL correct
    Citation Envoyé par sergiomaster
    Et le mieux serait quand même d'indiquer la structure de la table plutôt que d'avoir à la deviner !
    indiquer aussi le type de composants utilisé BDE, DBExpress, ADO .....
    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

  6. #6
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    non , ce sont des paramètres de la requête


    ça c'est de votre faute . j'ai repris le code que vous aviez fourni en supposant que le nom des colonnes étaient correct.
    vous m'auriez fourni ce que j'ai demandé , j'aurais peut être pu fournir le SQL correct
    le code sql je le met sur le tquery sql:tstring.??????

    comment dois_je déclarer les parametres de la requette.

    en ce qui concerne les noms de colonnes elles sont correctes.
    pouviez vous svp me donner la requette sql complete
    merci infiniment
    Fichiers attachés Fichiers attachés

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je pense qu'un tour dans la section tutoriel serait un plus pour la compréhension de l'utilisation des query (Vu que sergio a donné la réponse pour la requête).
    Particulièrement cette section
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Rédacteur/Modérateur

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

    @wiski08000

    j'ai déjà aussi répondu pour la déclaration des paramètres .
    plutôt que nous fournir une image écran , la description de la table aurait été bien mieux
    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

  9. #9
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    merci Rayek

    @wiski08000

    j'ai déjà aussi répondu pour la déclaration des paramètres .
    plutôt que nous fournir une image écran , la description de la table aurait été bien mieux
    merci pour votre aide mais n'oublier pas que jz suis un débutant pas un pros, merci quand meme

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 854
    Points : 11 287
    Points
    11 287
    Billets dans le blog
    6
    Par défaut
    C'est justement parce que tu débutes qu'il vaut mieux suivre les conseils destinés à t'aider (ceci restant vrai même longtemps après les débuts), notamment les demandes de précisions !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    C'est justement parce que tu débutes qu'il vaut mieux suivre les conseils destinés à t'aider (ceci restant vrai même longtemps après les débuts), notamment les demandes de précisions !
    j'ai le message d’erreur suivant:
    les données chaines ou binaires seront tronquées
    allez les gas soyez sympa

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je sais pourquoi je n'aime pas cette écriture mdd.TPriseChargemont_dej
    Car en étudiant bien on remarque que c'est mdd.TPriseCharge le composant et mont_dej le champs ...
    C'est quand même largement plus lisible comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mdd.TPriseCharge.FieldByName('mont_dej').Value := ...
    Donc dans l'update il faut virer les Charge qu'il y a devant tous les champs de la table.
    Pour le reste ce n'est que de la manipulation de composants Query et de l'utilisation des paramètres qui ont été mainte fois expliqués sur le forum ou dans des tutoriels
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  13. #13
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Je sais pourquoi je n'aime pas cette écriture mdd.TPriseChargemont_dej
    Car en étudiant bien on remarque que c'est mdd.TPriseCharge le composant et mont_dej le champs ...
    C'est quand même largement plus lisible comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mdd.TPriseCharge.FieldByName('mont_dej').Value := ...
    Donc dans l'update il faut virer les Charge qu'il y a devant tous les champs de la table.
    Pour le reste ce n'est que de la manipulation de composants Query et de l'utilisation des paramètres qui ont été mainte fois expliqués sur le forum ou dans des tutoriels
    le mdd est le nom de mon module de donnée
    tprisecharge est le nom de la table

  14. #14
    Rédacteur/Modérateur

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

    Quant on utilise un UPDATE (donc une query) il faut indiquer dans le SQL les nom de colonnes de la table ainsi que le nom de la table bien sur . C'est pour cela que je demande depuis le début , la description de la table !

    pour ce qui est de l'erreur
    les données chaines ou binaires seront tronquées
    il est évident que le problème vient des chaines , donc d'une de ces lignes
    Query.ParamByName('JOUR').asString:=label15.caption;
    Query.ParamByName('TPC').asString:=label11.caption;
    Query.ParamByName('CREGION').asString:=Edit43.Text;
    Query.ParamByName('MISSION').asString:=label11.caption;
    ** MENTION SPECIALE POUR LA DERNIERE QUI POUR MOI EST LA PIRE **
    Query.ParamByName('DATE').asString:=Prise_chargeF.label1.caption;
    où la valeur est trop longue pour la taille du champ (colonne)
    un moyen de s'en sortir est de tronquer la valeur par la fonction COPY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Query.ParamByName('JOUR').asString:=Copy(label15.caption,1,<Taille du Champ>);
    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

  15. #15
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Quant on utilise un UPDATE (donc une query) il faut indiquer dans le SQL les nom de colonnes de la table ainsi que le nom de la table bien sur . C'est pour cela que je demande depuis le début , la description de la table !

    pour ce qui est de l'erreur

    il est évident que le problème vient des chaines , donc d'une de ces lignes

    où la valeur est trop longue pour la taille du champ (colonne)
    un moyen de s'en sortir est de tronquer la valeur par la fonction COPY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Query.ParamByName('JOUR').asString:=Copy(label15.caption,1,<Taille du Champ>);

    enfin j'ai réussi,et ca marche merci à tous pour votre aide
    pour ce qui est de l'erreur c'était ParamByName('TPC').asString:=label11.caption; nbr de caractère .

    voici la procédure:

    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
    procedure TPrise_chargeF.CheckBox1Click(Sender: TObject);
    var requette : string;
    begin
    Requette:=
    ('UPDATE prisecharge  SET prisecharge.mont_dej=:CDEJ,mont_din=:CDIN,prisecharge.mont_heber=:CHEBER,prisecharge.jour=:JOUR,prisecharge.total_indem=:CT,prisecharge.region=:CREGION,type_pc=:TPC WHERE prisecharge.num_miss=:MISSION AND prisecharge.date_pc=:DATE ');
     Prise_chargeF.query1.sql.add(requette);
    with Prise_chargeF.query1 do
    begin
    ParamByName('CDEJ').asFloat:=strtofloat(edit1.Text);
    ParamByName('CDIN').asFloat:=strtofloat(edit2.Text);
    ParamByName('CHEBER').asFloat:=strtofloat(edit3.Text);
    ParamByName('JOUR').asString:=label15.caption;
    ParamByName('TPC').asString:=label11.caption;
    ParamByName('CT').asFloat:=strtofloat(edit4.Text);
    ParamByName('CREGION').asString:=Edit43.Text;
    ParamByName('MISSION').asString:=Edit42.Text;//label11.caption;
    ParamByName('DATE').asString:=Prise_chargeF.label1.caption;
    ExecSQL;
    end;
        end;

  16. #16
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Merci de penser à utiliser le # pour mettre les balises de codes autour de code.

    Sinon quelques remarques :

    - Dans ton Update tu n'es pas obligé de remettre le nom de la table pour chaque champ.
    - Il serait bien de renommer correctement tes composants (Label, Text, etc ...) car si quelqu'un ou bien toi doit revenir dans le code dans plusieurs mois cela sera surement un calvaire pour savoir qui correspond à quoi.


    Sinon si le sujet est résolu merci de cliquer sur le bouton en bas du poste
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

Discussions similaires

  1. transformer requête sql sous langage delphi
    Par wiski08000 dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/11/2014, 14h28
  2. requête sql sous delphi
    Par jack2009 dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/09/2009, 19h23
  3. requête sql sous access
    Par jadey dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/08/2006, 21h20
  4. Requête paramétrées sous delphi 2006
    Par jullegeay dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/06/2006, 07h56
  5. affichage requête sql sous phppgadmin
    Par kerzut dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 25/02/2005, 12h39

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