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 :

pb de niveau


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Par défaut pb de niveau
    Bonjour TLM

    je veux afficher dans un DBGrid des données mais qu'après que je met des contraintes (je rempli les Edits texts), donc l'affichage sera conditionné, je peut utiliser une requête SQL mais mois je veux pas faire ça, je veux que la teste de la condition sera sur ma table ligne pas ligne. Puisque j'utilise la boucle While.

    Pourquoi : parce que j'ai plusieurs Edit text, et ils ne seront pas rempli forcement , donc j'evite le teste chauqe qu'un edit text sera rempli, et je fait une seul programme.

    En résumé : comment faire un test ligne par ligne est faire un affichage (après le teste de la table) puique je ne peut pas faire ma requête dans la boucle While !
    PS: si vous n'avez pas compris mon problème demander pour que j'explique mieux

  2. #2
    Membre confirmé Avatar de bidochon
    Inscrit en
    Juin 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 168
    Par défaut Re: pb de niveau
    Salut,
    Citation Envoyé par djouahra.karim1
    Si vous n'avez pas compris mon problème demander pour que j'explique mieux
    Si tu veux que l'on t'aide, je pense que ce serait mieux, parce que je n'ai rien compris. Sois synthétique et explicite et donne nous eventuellement un bout de code, merci.
    bon dev
    @plus

  3. #3
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Je pense avoir compris ton problème...

    Quelle BDD et quels composants utilises-tu ?
    Dans certains composant il y a des évènements OnFilterRecord permettant le filtre des lignes retournées par l'ensemble de données.

    Mais le mieux est la requète SQL. Je ne comprend pas pourquoi tu ne veux pas t'en servir...
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  4. #4
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Par défaut
    je vais mieux expliquer :

    j'ai plusieurs edit text, je rempli mes edit text, je clique sur mon bouton pour avoir l'afichage dans mon DBGrid (mais tout depand des condition que j'ai mis dans les edits text et a l'aide d'une requete sql)

    mais les edit text ne seront pas remplis forcement, on peut avoit des edits texte vide et les autres sont remplis (donc on prend pas on consideration ceux qui sont vide). mais le problème et pour sql qui est dans la boucle, on aurra l'affichage que sur la condition du dernier teste, essayé de voir le 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
     
    datd := datetostr(Edit1.DateTime);
    datf := datetostr(Edit2.DateTime);
     
    While (not datamodule2.TMAJponcetchargmt.Eof) Do
       Begin
       If (Edit3.Text = '') Then vorig := Datamodule2.TMAJponcetchargmtEXORIG.value Else vorig := Edit3.Text;
       If (Edit4.Text = '') Then vdest := Datamodule2.TMAJponcetchargmtEXDEST.value Else vdest := Edit4.Text;
       If (Edit5.Text = '') Then vrso := Datamodule2.TMAJponcetchargmtEXRSO.value Else vrso := Edit5.Text;
       If (Edit6.Text = '') Then vrsd := Datamodule2.TMAJponcetchargmtEXRSD.value Else vrsd := Edit6.Text;
                   query1.Close  ;
                   query1.sql.clear;
                   query1.Sql.add ('Select *');
                   query1.Sql.add ('from Expl');
                   query1.Sql.add ('Where EXDAT>=(:date_d) and EXDAT<=(:date_f) and EXORIG=:x and EXDEST=:y and EXRSO=:z and EXRSD=:t and EXNV Like "AH%" ');
                   query1.ParamByName('date_d').AsDateTime := strtodate(datd);
                   query1.ParamByName('date_f').AsDateTime := strtodate(datf);
                   query1.ParamByName('x').AsString := vorig;
                   query1.ParamByName('y').AsString := vdest;
                   query1.ParamByName('z').AsString := vrso;
                   query1.ParamByName('t').AsString := vrsd;
                   query1.Open;
     
        Datamodule2.TMAJponcetchargmt.Next;
        End;
    le problème est dans le sql qui est dans la boucle, y'a t' il une autre solution

  5. #5
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Par défaut
    vorid vdest vrso et vrsd ce sont des variables String

  6. #6
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Ta requète dans la boucle ne sert à rien...

    Que veux-tu faire au final, car j'ai l'impression que tu es sur une mauvaise route...

    Je pense que pour chaque ligne de TMAJponcetchargmt tu veux afficher les lignes correspondantes de la table Expl ?
    Précise bien ce que tu veux faire, car la méthode employée n'est pas bonne pour le moment.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Par défaut
    je veux afficher les données de la table EXPL sur les condition du contenu des 4 edit text (edit3, 4, 5, 6) mais ses 4 edit text soit il prend une valeur saisi par l'utilisateur, soit n'importe quel valeur de la table (si pour ça que j'ai mis les 4 instructions de IF pour contôler les 4 edit texts avant d'entrée dans le While.

    donc si vous remarquez le contenu des 4 edit text change si un des edit texts est vide (donc on garde les condition où les edits texts sont remplis et peut importe pour les edits texts vide, cela demande de faire une boucle est de parcourir la table EXPL enregistrement par enregistrement

    je sais que le sql est faux dans la boucle

  8. #8
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Est-ce que ceci correspond à ce que tu veux :
    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
    vorig := Edit3.Text; 
    vdest := Edit4.Text; 
    vrso := Edit5.Text; 
    vrsd := Edit6.Text; 
    query1.Close  ; 
    query1.sql.clear; 
    query1.Sql.add ('Select * from Expl'); 
    query1.Sql.add ('Where EXDAT>=(:date_d) and EXDAT<=(:date_f) and EXNV Like "AH%"');
    if vorig<>'' Then query1.sql.add(' and EXORIG=:x');
    if vdest<>'' Then query1.sql.add(' and EXDEST=:y');
    if vrso<>'' Then query1.sql.add(' and EXRSO=:z');
    if vrsd<>'' Then query1.sql.add(' and EXRSD=:t');'); 
    query1.ParamByName('date_d').AsDateTime := Edit1.DateTime; 
    query1.ParamByName('date_f').AsDateTime := Edit2.DateTime; 
    query1.ParamByName('x').AsString := vorig; 
    query1.ParamByName('y').AsString := vdest; 
    query1.ParamByName('z').AsString := vrso; 
    query1.ParamByName('t').AsString := vrsd; 
    query1.Open;
    Ceci va fonctionner si dans la table Expl il n'y a pas de lignes dont les valeurs ne sont pas dans la table TMAJponcetchargmt.

    Si ce n'est pas le cas il faut faire une jointure conditionnelle entre les deux tables pour afficher le résultat que tu veux. Mais dans ce cas on a besoin de connaitre le SGBD utilisé.

    [edit] Et bien sur tu vires ta boucle while... [/edit]
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  9. #9
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Par défaut
    je crois que ça marche (je vais essayé de testé)

    j'utilise BD Paradox, delphi 6

  10. #10
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Par défaut
    quand je laisse un des edit text vide, il me dit (après exécution) comme erreur (paramètre non trouvé (pour t ou z ou x ou y )

  11. #11
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Exact, petite erreur dans le code. Il ne faut mettre à jour les paramètres que s'ils existent :
    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
    vorig := Edit3.Text; 
    vdest := Edit4.Text; 
    vrso := Edit5.Text; 
    vrsd := Edit6.Text; 
    query1.Close  ; 
    query1.sql.clear; 
    query1.Sql.add ('Select * from Expl'); 
    query1.Sql.add ('Where EXDAT>=(:date_d) and EXDAT<=(:date_f) and EXNV Like "AH%"'); 
    if vorig<>'' Then query1.sql.add(' and EXORIG=:x'); 
    if vdest<>'' Then query1.sql.add(' and EXDEST=:y'); 
    if vrso<>'' Then query1.sql.add(' and EXRSO=:z'); 
    if vrsd<>'' Then query1.sql.add(' and EXRSD=:t');'); 
    query1.ParamByName('date_d').AsDateTime := Edit1.DateTime; 
    query1.ParamByName('date_f').AsDateTime := Edit2.DateTime; 
    if vorig<>'' Then query1.ParamByName('x').AsString := vorig; 
    if vdest<>'' Then query1.ParamByName('y').AsString := vdest; 
    if vrso<>'' Then query1.ParamByName('z').AsString := vrso; 
    if vrsd<>'' Then query1.ParamByName('t').AsString := vrsd; 
    query1.Open;
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  12. #12
    Membre chevronné Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Par défaut
    Tu peux utiliser OnFilterRecord de ta table
    Comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if Edit1.Text <> '' then
    Accept := TableNomChamp1.asstring = Edit1.Text;
    if Edit2.Text <> '' then
    Accept := accept and (TableNomChamp2.asstring = Edit2.Text);
    if Edit3.Text <> '' then
    Accept := accept and (TableNomChamp3.asstring = Edit3.Text);
    et ainsi de suite

Discussions similaires

  1. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04
  2. conversion bmp en niveau de gris
    Par hholivier dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2003, 13h34
  3. niveau de gris en niveau de couleur
    Par corey_jx dans le forum MFC
    Réponses: 2
    Dernier message: 11/06/2003, 22h36
  4. Creer un role au niveau server
    Par Mouse dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/05/2003, 15h56
  5. Elément de niveau supérieur dans un menu
    Par pascalT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/03/2003, 09h39

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