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 confirm�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    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

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    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 ?

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    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.....

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