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 :

TBlobFiled,TBlobStream ,extraire les valeur d'un champ image pour le mettre en cache


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 TBlobFiled,TBlobStream ,extraire les valeur d'un champ image pour le mettre en cache
    Bonjour suite a ce post
    http://www.developpez.net/forums/d76...irebird-2-1-a/

    Je suis sur la partie finale ou je me mets en cache la partie de champs blob
    J'essaie d'extraire la valeur du champ "IMAGE" et l'ajouter au IBClientDataSet
    J'ai regarde l'aide en ligne de TBlobFIeld, et TBlobStream


    J'ai fait ceci

    Première Solution

    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
     
     
    case ftBlob:{
     
    TBlobField *pBl=new TBlobField(pDs);
    pBl->FieldName=pDs->Fields->Fields[i]->DisplayLabel;
    //pBl->DataSet=pDs;
     
    TBlobStream*pBlobStream=new TBlobStream(pBl,bmRead);
     
                TStream*pStreamLu=pDs->CreateBlobStream(pDs->Fields->Fields[i],bmReadWrite);
     
                                 pStreamLu->CopyFrom(pBlobStream,pBlobStream->Size);
    break;
     
    }}
    Dans ce cas j'ai une viloation d'acces au niveau du constructeur de TBlobStream

    Si je decommante
    j'ai cette exception de levée

    Le projet TestConectionFirebird4.exe a provoqué une classe d'exception EDatabaseError avec le message 'IBQuery1: Impossible d'effectuer cette opération sur un ensemble de données ouvert'.
    le problème est que je si je ferme pDs je perd mes données
    pDs est aliment comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TDataSet *pDs=GetQueryResult(pQuery)

    Questions :
    comment affecter pEnreg[i] ?

    J'ai essaye aussi avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIBBlobStream*pIBlobStream=new TIBBlobStream(pBl,bmRead);
    j'ai une erreur de compilation

    [C++ Erreur] TIbSGBD.cpp(193): E2285 Impossible de trouver une correspondance pour 'TIBBlobStream::TIBBlobStream(TBlobField *,TBlobStreamMode)'

    Seconde solution que j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TStream *pStreamLu=pDs->CreateBlobStream(pDs->Fields->Fields[i],bmReadWrite);
    pCache->SaveToStream(pStreamLu);


    Le projet TestConectionFirebird4.exe a provoqué une classe d'exception EIBClientError avec le message 'Pas en mode édition'.


    Le première solution me plaisais car avec cette méthode TBlobField::AsVariant je contais convertir cecie en variant
    est l'affecter a pEnreg[i] qui est un TVarRec
    mais je ne vois pas comment dans mon code

    question est possible de convetir un Variant en Blob
    pour la lecture ?

    Je vous remercie de m'avoir lu
    et si vous pouvez m'aider.....


    Ps si c'est pas assez clair je peux fournir plus de code
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

  2. #2
    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
    J'ai fais ceci mais j'ai un vilotion d'access

    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
     
    // graphic ici pour debug
     Graphics::TBitmap *pBitmap = new Graphics::TBitmap();  // nouvel oject bitmap
          //TMemoryStream* pMS = new TMemoryStream; // allocation du flux en memoire
          TStream *pStlu=pDs->CreateBlobStream(pDs->Fields->Fields[i],bmReadWrite);    // on lit
     
          TBlobField *T=new TBlobField(pDs);
          T->FieldName=pDs->Fields->Fields[i]->DisplayLabel;
          //T->DataSet=pDs;
          T->SaveToStream(pStlu);  // violation d'acces
          T->LoadFromStream(pStlu);
          T->SaveToFile("TEST1.BMP");
     
          pValeur[i]=T->AsVariant;
          pEnreg[i]=pValeur[i];
     
          pBitmap->SaveToStream(pStlu);
          pBitmap->LoadFromStream(pStlu);
          pBitmap->SaveToFile("TEST.BMP");
          delete pBitmap;
    Qui a un idée ?

    question est possible de convetir un Variant en Blob
    pour la lecture ?
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

  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
    voila le nouveau code
    j'arrive a lire mon blob et l'enregistrer sur disque

    le problème est que je suis dans un boucle While
    while(!pDs->Eof) et je ne sort pas comme faut du fait que je suis oblige de faire des Open dans le (case ftBlob)


    Je n'arrive pas a convertir mon blob en variant
    ou est ce que il y a un manière de contourner ?

    Que passer dans l' AppendRecord comme valeurs

    est il possible de l'envoyer dans un composant ImageList

    Comment déclarer le tout mon ImageList si ma requête a plusieurs Images sur le meme enregistrement comme cela ?TImageList **p

    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
     
     pDs->First();
    while(!pDs->Eof){
     
       for(int i=0;i<FieldsCount;i++){  // par des champ des enregistrement
     
         switch(pDs->Fields->Fields[i]->DataType){
     
            case ftBlob:{
                                 // test 3
                                 // mise dans le cache
                                 TDataSet *pTempDs=pDs;
                                 AnsiString   NomChamp=pTempDs->Fields->Fields[i]->DisplayLabel;
                                  pTempDs->Close();
     
                                  TBlobField *pBlobField=new TBlobField(pTempDs);
                                  pBlobField->FieldName=NomChamp; //pDs->Fields->Fields[i]->DisplayLabel;
                                  pBlobField->SetFieldType(ftGraphic);
                                  pBlobField->DataSet=pTempDs; // oblige de derme sinon plantage
                                  pDs->Open();
     
                                  pDs->FieldDefs->Update();
     
     
                                  TMemoryStream *pMs =new TMemoryStream;
                                  pBlobField->SaveToStream(pMs);  // on lit l'enreng
     
                                  pBlobField->SaveToFile("TEST"+IntToStr(i++)+".bmp");
     
                                //  pValeur[i]=pBlobField->AsVariant;
                                 // pEnreg[i]=pValeur[i];
     
                      delete pMs;
        }              //delete pBlobField;
     }
    }
    merci par avance
    je galere grave.....
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/07/2012, 22h16
  2. extraire les valeur d'un champ multivalué
    Par vjamilloux dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/12/2006, 18h09
  3. Diviser les valeurs d'un champ
    Par celine86 dans le forum Access
    Réponses: 7
    Dernier message: 14/02/2006, 09h58
  4. récupérer les valeur d'un champ FILE
    Par dj-julio dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/12/2005, 11h54
  5. Réinitialiser les valeurs d'un champ de type identify
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2005, 13h39

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