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