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

Composants VCL Delphi Discussion :

Accès contrôles TImage ou TDBImage suite requête SQL


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Par défaut Accès contrôles TImage ou TDBImage suite requête SQL
    Bonjour,

    Je développe une petite appli de jardinage qui répertorie des noms de fleurs, diamètre, couleur, photo, etc...
    J'ai donc créé une BDD ainsi qu'une interface graphique.
    Cette interface contient un panel dans lequel j'ai mis des composants TDBImage (DBImage1, DBImage 2, etc...) afin de voir les photos correspondant aux fleurs sélectionnées (par exemple selon la couleur).
    Un des champs de ma BDD contient les liens à associer aux TDBImage.
    Au moment du résultat sur ma requête SQL, comment, en fonction du nb d'enregistrements retournés, accéder à DBImage1, DBImage2, DBImage3, etc... et leur propriété 'Picture' (en vue de faire ensuite LoadFromFile...) ?
    J'ai essayé avec une boucle For i:= 0 to Panel1.controls.count-1...., ce qui me retourne bien mes contrôles DBImage1, DBImage2, etc..., mais je ne peux pas y accéder par la suite.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour et bienvenue,

    Un des champs de ma BDD contient les liens à associer aux TDBImage.
    s'il s'agit d'un lien (chemin+nom de l'image) il ne faut pas utiliser un TDBImage mais un TImage c'est au moment du chargement de l'enregistrement que l'on utilisera image1.loadfromfile(<champ lien image>);
    reste à savoir quand c'est le bon moment (le bon évènement)

    sur ce que je lis vous faites une requête pour récupérer ces liens
    Au moment du résultat sur ma requête SQL, comment, en fonction du nb d'enregistrements retournés
    donc c'est dans la boucle
    For i:= 0 to Panel1.controls.count-1.
    que devrait se situer ce loadfromfile (de Timage pas de TDBImage)

    une tentative en live (donc non testée) avec cette approche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Query.First;
    for i:=0 to Panel1.controlcount - 1 do
     begin
       if (Panel.Controls[i] is TImage)  then
         begin
             TImage(Panel.Controls[i]).Clear;
             if not Query.EOF 
                   then   TImage(Panel.Controls[i]).loadFromFile(Query.FieldByName('champimage').asString)
                   else   TImage((Panel.Controls[i]).visible:=false; 
         end;
     end;
    cette tentative manque de garde fou (quelques try except ou test d'existence pour encadrer le chargement de l'image ne serait pas du luxe)

    à moins que vous ne tentiez une approche différente une boucle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while not query.EOF do
     begin
      // ici création dynamique du Timage et loadfromfile  
      Query.Next;
     end;
    bon là il me faudrait plus d'informations

    ou encore utiliser un composant tout fait qui ferait le boulot (ou presque tout le boulot) pour vous : je pense par exemple à JVThumbview de la JVCL

    et enfin cela dépend de la version de Delphi que vous utilisez ! je ne ferait pas la même chose avec un delphi 7 (le plus courant) et la dernière version DX10

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Par défaut
    Bonsoir,

    Il semblerait que j'aie oublié le 'TImage' devant '(Panel.Controls[i])'.
    Cela ne risquait pas de marcher.
    Ceci dit, j'ai testé les 2 solutions, avec TDBImage et TImage. Les 2 fonctionnent.
    Je ne comprend pas trop pourquoi il faut préférer le TImage au TDBImage puisque il n'y a pas de différence à l'exécution.
    Concernant les boucles, j'ai une préférence pour le 'while not...'. Après, c'est peut-être une affaire de goût.
    La bonne syntaxe est la suivante :
    'TImage(Panel.Controls[i]).picture.loadFromFile(Query.FieldByName('champimage').asString)'. Ne pas oublier le 'picture' avant 'loadFromFile'.

    Je suis sur Delphi7, je vais regarder ce 'JVThumbview' pour voir de quoi il retourne.
    Dans tous les cas, merci pour le 'TImage' oublié, cela m'a débloqué.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par florcand Voir le message
    Ceci dit, j'ai testé les 2 solutions, avec TDBImage et TImage. Les 2 fonctionnent.
    Je ne comprend pas trop pourquoi il faut préférer le TImage au TDBImage puisque il n'y a pas de différence à l'exécution.
    dans ton contexte, le DBImage n'est utile que s'il y a liaison avec un champ binaire contenant une image (ce qui n'est pas le cas)
    Concernant les boucles, j'ai une préférence pour le 'while not...'. Après, c'est peut-être une affaire de goût.
    j'ai repris ton for i de départ après les goûts et couleurs .....
    La bonne syntaxe est la suivante :
    'TImage(Panel.Controls[i]).picture.loadFromFile(Query.FieldByName('champimage').asString)'. Ne pas oublier le 'picture' avant 'loadFromFile'.
    je me doutais bien qu'une tentative en live aurait des faiblesse que le correcteur syntaxique de delphi aurait souligné de suite

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Par défaut
    Bonjour,

    Je te remercie pour tes précieux conseils que je vais m'empresser de suivre.
    Mon pb est maintenant résolu.
    Cordialement.
    Florcand.

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

Discussions similaires

  1. [MySQL] pb affichage miniatures suite requête sql
    Par Evelyne31 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/11/2012, 19h34
  2. [Batch] Recherche de fichiers suite à requête SQL
    Par yellowsub122 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 29/07/2009, 11h45
  3. [Requête SQL] Accès base de données à copier
    Par Zartak dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/05/2007, 11h52
  4. [MySQL] Condition suite à une requête SQL
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/01/2007, 14h25
  5. limitation de caractére dans une requête SQL sous Acces
    Par amka dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2006, 15h15

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