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

C++Builder Discussion :

afficher les images de BD access sur la form de C++ builder


Sujet :

C++Builder

  1. #1
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut afficher les images de BD access sur la form de C++ builder
    Bonjour
    j'ai une question concernant le C++ builder, j'ai crée une Base d'image avec Access et j'ai reussi a faire la connéxion de cette base avec le SGBD Borland mais mon probléme c'est que je veux afficher les images une par une sur la form à l'aide de Timage mais ça marche pas
    quelqu'un peut m'aider SVP

    merci

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Voici un code a tester, mais qui si mes souvenirs sont bons devrait fonctionner pour charger une image (jpeg) depuis une base de donnée.
    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
      TJPEGImage *jpeg= new TJPEGImage() ;
      TMemoryStream *stream = new TMemoryStream() ;
      try
      {
    //RECUPERATION DANS UN STREAM
          ((TBlobField*) table->FieldByName( "NOM_CHAMP_IMG" ))->SaveToStream( stream );
    //CHARGEMENT
          stream->Seek( 0, soFromBeginning );
          jpeg->LoadFromStream( stream );
    //UTILISATION DU JPEG
    //[...]
      }
      __finally
      {
    //LIBERATION DES RESSOURCES
        delete stream ;
        delete jpeg ;
      }
    la variable table est un TTable.

    .

  3. #3
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    je te remercie sat83 pour ta reponce mais ton code ça marche pas malereusement

    voila ce que j'ai fais

    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
    29
    30
    31
    32
    33
    34
    35
    36
    // ouverture connexion, bdd et table
       Session1->Open();
       Database1->Open();
       Table1->Open();[
     
       // on se positionne au début
      Table1->First();
      while(!Table1->Eof)
       {
      TJPEGImage *jpeg= new TJPEGImage() ;
      TMemoryStream *stream = new TMemoryStream() ;
      try
      {
    //RECUPERATION DANS UN STREAM
          ((TBlobField*) Table1->FieldByName( "Nom" ))->SaveToStream( stream );
    //CHARGEMENT
          stream->Seek( 0, soFromBeginning );
          jpeg->LoadFromStream( stream );
          Memo1->Lines->LoadFromStream( stream );
    //UTILISATION DU JPEG
    //[...]
      }
      __finally
      {
    //LIBERATION DES RESSOURCES
        delete stream ;
        delete jpeg ;
      }
       // on parcourt la table
     
          // on passe à la ligne suivante
         Table1->Next();
       // on ferme connexion, bdd et table
       Table1->Close();
       Database1->Close();
       Session1->Close();
    mais aucun resultat

  4. #4
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Memo1->Lines->LoadFromStream( stream );
    Pourquoi tu charge dans un Memo????

    De quel type est le champ où sont stockées tes images dans la base de donnée?
    Est-ce que ce sont des images au format JPEG?

    Une autre solution est d'enregistrer tes images dans un répertoire (sur un disque dur ou un serveur) et d'enregistrer dans la base de donnée uniquement le chemin du fichier image.

    L'avantage c'est que c'est plus simple a mettre en place...

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    pourquoi ne pas utiliser un TDBimage ?? dans ce cas.

  6. #6
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    bonjour

    j'ai chargé l'image dans un memo car il m'affiche erreur quand j'ai voulé charger dans un TImage, le type de mes images sont jpeg et dans la base access j'ai enregistré que le chemin pour acceder aux données mais franchement je suis désesperée le faite que j'ai pas pu acceder à la base et afficher le contenue

    stp Sat83 s'il a une autre methode pour acceder à la base access à travers les requetes SQL ?

    merci

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    bon après quelques tests TDBimage ne fonctionne bien que sur des fichiers liés ou OLE et en format BMP

    par contre avec Timage cela fonctionne bien à partir d'un champ texte à partir d'un DBtext ou directement (sur tous les types d'image):

    Image1->Picture->LoadFromFile(DBText1->Field->AsAnsiString);
    ou
    Image1->Picture->LoadFromFile(DataSet1->fieldByname("IMAGE")->value);

    Bien sur le champ de base est un champ texte avec le chemin complet du fichier et nom.

  8. #8
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Si tu as enregistré dans le champ de la table le chemin d'accès à l'image (fichier physique) tu peux aisément utiliser la commande suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AnsiString Chemin ;
    Chemin = Table1 -> FieldByName("Nom") -> AsString ;
    if(FileExists(Chemin))
      Image1 -> Picture -> LoadFromFile(Chemin) ;

  9. #9
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    salut à tous et je vous remercie pour votre reponce, j'ai un remarque sur le code de kmanich j'ai pas trouvé des erreursmais il m'affiche rien voila ce que j'ai fais
    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     // ouverture connexion, bdd et table
       AnsiString Chemin ;
       Session1->Open();
       Database1->Open();
       Table1->Open();
     
     // on se positionne au début
      Table1->First();
      while(!Table1->Eof)
       {
        Chemin = Table1-> FieldByName("photo")-> AsString ;
        if(FileExists(Chemin))
      Image1->Picture->LoadFromFile(Chemin) ;
       // on parcourt la table
     
       // on passe à la ligne suivante
        Table1->Next();
    }
       // on ferme connexion, bdd et table
       Table1->Close();
       Database1->Close();
       Session1->Close();
    }
    je te confirme que la connexion de la base est bien faite mais je ne sais pas pourquoi ya pas d'ffichage
    merci

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    Verifis que dans le chemin il y a bien le non de fichier et met un sleep entre chaque chargement d'image.
    Sinon le code est bon.

  11. #11
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonsoir,

    Suite à ton code, je ne vois pas quelle est l'utilité d'assigner le chemin du fichier image et l'afficher dans une boucle while. Cependant, si tous les fichiers existes selon leur chemin spécifié dans la base, le composant TImage n'affichera que le dernier fichier de la table

    Et si tu nous disais que tu veux en faire au juste ?

  12. #12
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut afficher les images de BD access sur la form de C++ builder
    salut !

    toujours avec mon problème je n'arrive pas à trouver une solution

    en fait, je ne sais pas ou se réside le problème, moi je veux lire les images du SGBD Access et les afficher une par une avec l'utilisation de la bar de navigation, mais je ne sais pas comment faire si vous pouvez m'aider SVP, jusqu'à maintenant j'ai pas encore avancée !!!


    merci d'avance

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    Donnes nous ta base et quelques images je te fais un exemple

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    ci joint projet qui marche avec:
    - base de données (contenu modifié),
    - le projet,
    - les images rennommées en .jpg (pour reconnaissance automatique)
    - respecter les emplacements (pour ce test)

    c'est un exemple sans gestion des controles et effets de bord..

    le lien:

    http://www.pegase-consulting.com/pubs/test.zip

  15. #15
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    salut Fbartolo; je te remercie infiniment pour ton aide

  16. #16
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    salut Fabarko

    j'ai fais presque comme ton exemple que tu ma donné, mais ça maffiche une erreur qui dit: AsAnsiString n'est pas un membre de TField !!!je ne sais pas comment régler ce problème, s'il te plait aide moi


    merci

  17. #17
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    Remplace AsAnsiString par Value ou par String, cela devrait marcher.
    Tu es sur quelle version de Compilateur BCB??

  18. #18
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    salut Fabartolo

    je suis désolée pour le dérangement,le problème du type de donnée est réglé mais un autre problème est résidé dans l'instruction du code Image1->Picture->LoadFromFile(DirPhoto + ADODataSet1->FieldByName("Photo")->AsString);
    en fait quand j'execute le code
    voila mon TP et la version de Logiciel c'est C++ builder 6
    [ame="http://www.zshare.net/download/75741480e1614423/"]zSHARE - Imagerie.zip[/ame]
    stp si tu peux régler mon problème

    merci

  19. #19
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    Vérifie bien que le fichier Jpeg.hpp est en include pour le format jpg.

    retire de tes options RTL Dynamique du Linker et décoche construire package d'exécution

    ci dessous les fichiers de ton projet, fait un remplacer des tiens.
    si toujours PB lors du chargement de l'image, tu peux en test à la conception cherger manuellement une image et vérifier les types acceptés (BMP, JPG, JPEG, Ico,..)
    si certains ne fonctionnent pas je pense que tu devras utiliser en dernier recours la méthode:
    __fastcall RegisterFileFormat(const UnicodeString AExtension, const UnicodeString ADescription, TGraphicClass AGraphicClass);

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
     
    String CurDir = GetCurrentDir(); // Afin de retenir le répertoire courant de l'exe
    String DirPhoto = CurDir + "\\Photo\\"; // répertoire des photos
    String ConnexionBase = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source= " + CurDir + "\\ma_base.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
     
     
     
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ADODataSet1->First();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    ADODataSet1->Last();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    ADODataSet1->Prior();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    ADODataSet1->Next();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    ADOConnection1->ConnectionString = ConnexionBase;
    ADODataSet1->Active = true;        // active le dataset et la connexion par conséquence
    DBGrid1->DataSource = DataSource1;
    DBNavigator1->DataSource = DataSource1;
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ADODataSet1AfterScroll(TDataSet *DataSet)
    {
    AnsiString PhotoEncours;
     if(!ADODataSet1->FieldByName("Photo")->AsString.IsEmpty())
    	{
    	PhotoEncours = DirPhoto + ADODataSet1->FieldByName("Photo")->AsString;
    		if(FileExists(PhotoEncours))       // teste l'existance du fichier
    			{
    			Image1->Picture->LoadFromFile(PhotoEncours);
    			Image1->Visible = true;
    			}
    		else
    			{
    			Image1->Visible = false;   // n'affiche rien, évite de présenter l'ancienne image
    			}
    	}
    }
     
    //---------------------------------------------------------------------------

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    //---------------------------------------------------------------------------
     
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <DBCtrls.hpp>
    #include <DBGrids.hpp>
    #include <ExtCtrls.hpp>
    #include <Grids.hpp>
    #include <ADODB.hpp>
    #include <DB.hpp>
    #include <jpeg.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
            TButton *Button1;
            TButton *Button2;
            TButton *Button3;
            TButton *Button4;
            TDBNavigator *DBNavigator1;
            TDBGrid *DBGrid1;
            TADODataSet *ADODataSet1;
            TADOConnection *ADOConnection1;
            TDataSource *DataSource1;
    	TImage *Image1;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall Button3Click(TObject *Sender);
            void __fastcall Button4Click(TObject *Sender);
            void __fastcall FormShow(TObject *Sender);
            void __fastcall ADODataSet1AfterScroll(TDataSet *DataSet);
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

  20. #20
    Membre averti
    Femme Profil pro
    /////
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : /////

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Par défaut
    salut Fbartolo merci infiniment pour ton aide et sayé le problème est réglé

    merci beaucoup pour la 2eme fois

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Je veux savoir comment afficher les images sur CRISTAL REPORT
    Par kamalGLM dans le forum VB.NET
    Réponses: 4
    Dernier message: 12/03/2015, 17h02
  2. afficher les images qui sont sur un FTP sécurisé
    Par Cidouge dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 08/10/2014, 17h06
  3. Réponses: 3
    Dernier message: 28/05/2010, 09h58
  4. afficher les images background
    Par DELYMED2 dans le forum ASP
    Réponses: 2
    Dernier message: 17/10/2005, 09h09
  5. Afficher les images en C++ ou C
    Par sheryuledragon dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 17/03/2005, 11h22

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