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 :

Recherche exemple BCB BLOB Firebird 2.1


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut Recherche exemple BCB BLOB Firebird 2.1
    Bonjour
    je recherche des exemple pour insérer extraire des champs de type blob
    ou un tutoriel.
    Je voudrais stocker insérer un image au format jpeg.

    J'ai lu que firebird 2.1 permettait de traiter le champ type blob
    comme du texte est que cela peut fonctionner pour tous ce qui est
    image ? qui aurait un exemple ?

    Autre question par la suite je dois mettre en cache ceci
    je me se sert du composant IbClientDataSet

    Quelle autres méthodes peut on utiliser que AppendRecord ?

    Je vous remercie

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    J'ai lu que firebird 2.1 permettait de traiter le champ type blob
    comme du texte est que cela peut fonctionner pour tous ce qui est
    image ?
    Suivant comment tu utilises ton champ blob, tu récupéreras les données sous forme de chaîne, mais c'est un cas foireux, inadapté aux images...

    As-tu regardé l'aide de TBlobField, TIBBlobStream, et surtout TIBCustomDataSet.CreateBlobStream (y'a un exemple de code - en pascal, mais ça donne l'idée)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Bonjour voila pour l'instant ce que j'ai fait

    Je commence dans un premier temps avec le format BMP
    par la suite le jpeg

    J'ai déclaré un champ de type blob dans firebird 2.1 comme ci :
    Table :ARTICLES I
    champ :MAGE
    Domaine NEW_DOMAIN
    Info sur le domaine BLOB SUB_TYPE 0 SEGMENT SIZE 100

    est ce bien déclaré pour recevoir de bmp ?

    "o_live_bass.bmp" est un image bmp de 1024*768

    Pour charger un image je 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
     
    try{
    IbSgbd->IBQuery1->Close();
    IbSgbd->IBQuery1->SQL->Clear();
     
    IbSgbd->IBQuery1->SQL->Add("INSERT INTO ARTICLES ( NOM,PRIX,STOCKACTUEL, "
                                                     " STOCKMINIMUN ,IMAGE ) "
                                "VALUES (:NOM,:PRIX,:STOCKACTUEL,:STOCKMINIMUN,:IMAGE)");
     
    IbSgbd->IBQuery1->ParamByName("NOM")->AsString="o_live";
    IbSgbd->IBQuery1->ParamByName("PRIX")->AsCurrency=1.45;
    IbSgbd->IBQuery1->ParamByName("STOCKACTUEL")->AsInteger=1;
    IbSgbd->IBQuery1->ParamByName("STOCKMINIMUN")->AsInteger=1;
    IbSgbd->IBQuery1->ParamByName("IMAGE")->LoadFromFile("o_live_bass.bmp",ftBlob);
    IbSgbd->IBQuery1->Prepare();
    IbSgbd->IBQuery1->ExecSQL();
    IbSgbd->IBTransaction1->Commit();
    }catch(...)
    {
    IbSgbd->IBTransaction1->Rollback();
    }
    Pour lire une image la est mon probleme je mis un composant DBImage
    j'ai fais ceci mais c'est brouillon
    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
     
    /*
      On liste les articles en apelant cote client
      via un TIbQuery
     
    */
    // on va pointer sur datasource3 qui le cache du TIbClientDataSEt
    //DBGrid1->DataSource=IbSgbd->DataSource3;   on lit dans le cache
    //
     
      //TFileStream *pFs= new TFileStream;
        TMemoryStream *p=new TMemoryStream;
      //p->LoadFromStream()
     
     
      IbSgbd->IBQuery1->DisableControls();
    IbSgbd->IBQuery1->Close();
     
    DBGrid1->Columns->Clear();
    IbSgbd->IBQuery1->SQL->Clear();
    IbSgbd->IBQuery1->SQL->Add("select * FROM ARTICLES");
    IbSgbd->IBQuery1->Open();
    DBGrid1->DataSource=IbSgbd->DataSource1;
    p->LoadFromStream((TStream*)IbSgbd->IBQuery1->FieldByName("IMAGE"));
    IbSgbd->IBQuery1->DataSource->DataSet->
    DBImage1->DataSource=IbSgbd->DataSource1;
    //DBImage1->Picture->Bitmap->Assign(p);
    //.SaveToFile("TEST.bmp");
     
    //IbSgbd->IBQuery1->EnableControls();
      //IbSgbd->IBQuery1->FieldByName("IMAGE")-;
    }
    comment récupérer la valeur du champ IMAGE est l'affecter au DBImage
    faut il passer passer par TMemoryStream ?


    Je vais voir l'aide que tu dis
    merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Puisque tu as un TDBImage sur ta fiche, tu peux donner dans l'inspecteur d'objets les bonnes valeurs aux propriétés DataField et DataSource du TDBImage. Ca devrait déjà te permettre de voir ton image.

    Au final, le code devrait se résumer à ceci (si tous les objets sont sur une fiche ou un datamodule, les propriétés bien comme il faut):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IbSgbd->IBQuery1->SQL->Text = "select * FROM ARTICLES";
    IbSgbd->IBQuery1->Open();

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Salut et merci
    je préférais utiliser avec les classe que tu as cite dans l'autre post
    car par la suite j'aurais pas de manip a faire dans mon code

    le question est :
    comment extraire la valeur du blob ?
    et comment l'affecter dans un contrôle Image ou DbImage

    Je crois qu'il faut passer de Stream ou MemoryStream
    mais j'ai des diificultés

    J'avoue que la je suis perdu.....


    Ps: J'arrive a convertir dans le cache encore merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Pour inserer des enregistrement je fais ceci
    je veux passer par des stream

    j'ai un violation un d'acces d'ou cela viens ?

    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
     
    try{
    IbSgbd->IBQuery1->Close();
    IbSgbd->IBQuery1->SQL->Clear();
     
     
    Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
    pBitmap->LoadFromFile("o_live_bass.bmp");
    DBImage1->Picture->Bitmap=pBitmap;   // afiiche l'image a la main
     
     
    TBlobStream *pBs; // pt sur BlobStrem
    TStream *pSt;  // pt sur Stream
     
     
     
    IbSgbd->IBQuery1->SQL->Add("INSERT INTO ARTICLES ( NOM,PRIX,STOCKACTUEL, "
                                                     " STOCKMINIMUN ,IMAGE ) "
                                "VALUES (:NOM,:PRIX,:STOCKACTUEL,:STOCKMINIMUN,:IMAGE)");
     
    IbSgbd->IBQuery1->ParamByName("NOM")->AsString="o_live";
    IbSgbd->IBQuery1->ParamByName("PRIX")->AsCurrency=1.45;
    IbSgbd->IBQuery1->ParamByName("STOCKACTUEL")->AsInteger=1;
    IbSgbd->IBQuery1->ParamByName("STOCKMINIMUN")->AsInteger=1;
     
     
    pBitmap->SaveToStream(pBs); // violation d'acces
     
     
    IbSgbd->IBQuery1->ParamByName("IMAGE")->LoadFromStream(pBs,ftBlob );
     
     
    IbSgbd->IBQuery1->Prepare();
    IbSgbd->IBQuery1->ExecSQL();
    IbSgbd->IBTransaction1->Commit();
    }catch(...)
    {
    IbSgbd->IBTransaction1->Rollback();
    }
    merci encore

    Ps pour lire et afficher dans unDBImage je fais sans pb;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TStream* pSt=IbSgbd->IBQuery1->CreateBlobStream(
           IbSgbd->IBQuery1->FieldByName("IMAGE"),bmReadWrite
    );
     
    DBImage1->Picture->Bitmap->LoadFromStream(pSt);

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pBitmap->SaveToStream(pBs); // violation d'acces
    Normal, le TBlobStream n'a pas été alloué

    Est-ce que tu as essayé ceci ? (pas vérifié...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TMemoryStream* pMS = new TMemoryStream; // TODO: Vérifier le constructeur ??
    pBitmap->SaveToStream(pMS);
    IbSgbd->IBQuery1->ParamByName("IMAGE")->LoadFromStream(pMS,ftBlob );
    delete pMS;

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Salut )
    tu est un as
    merci en encore un fois

    J'avais essaye ce code hier j'avais un warning puis un plantage

    reste a mettre tout cela en cache......

    je voudrais faire la même chose avec de jpeg et png
    comment faire ?


    J'ai de question concernant le DBImage
    je veux que l'utilisateur modifie l'image est ce que cela est possible?
    et comment faire?

    Pour ce qui est du cache est possible de mettre les images en cache dans un TListImages par exemple ?



    encore un fois merci

Discussions similaires

  1. [JMS] Recherche exemples JMS
    Par SuperPat dans le forum Java EE
    Réponses: 1
    Dernier message: 01/11/2006, 16h03
  2. [Timage et Blob, Firebird]
    Par Lucien dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/10/2005, 14h32
  3. recherche exemples de "méthodes de management"
    Par ouckileou dans le forum Emploi
    Réponses: 7
    Dernier message: 03/03/2005, 16h01
  4. [NetBeans RCP] Recherche Exemples
    Par mbonnetaud dans le forum NetBeans
    Réponses: 2
    Dernier message: 27/02/2005, 22h58
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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