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 :

'BLOB non ouvert ' le retour !! [� faire]


Sujet :

C++Builder

  1. #1
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut 'BLOB non ouvert ' le retour !!
    Bonsoir,
    Suite � la derni�re question de Almisuifre, j'ai retenu le petit mot de Jordy16 : "Une question correctement pos�e trouve toujours une r�ponse ... " et je retente ainsi ma chance quant a ma premi�re question 'BLOB non ouvert', en esp�rant m'exprimer un peu mieux moi aussi.
    Je voulais stocker les infos contenues par une StringList ds un champ de type 'ftBlob' (ou 'ftMemo' ?).
    En effet, je me visualise les �l�ments stock�s ds une StringList comme une sorte de 'pile' :
    Element 1
    Element 2
    Element 3
    etc...
    et pensais bon de tenter de stocker ceci ds un champ comme un Blob ou un Memo pour pouvoir les retrouver plus tard 'dans l'etat' et parcourir a nouveau la liste (au moyen d'une simple boucle de 0 a Count - 1).
    J'ai essay� d'utiliser des m�thodes comme 'CreateBlobStream' et autres
    mais je me heurte toujours a :
    'BLOB non ouvert'...

    Alors, grosse betise ou petite erreur de jeunesse ?
    Merci d'avance
    NB : Table de type Paradox 7, au travers d'un TTable.

  2. #2
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Bonjour,

    Voil� du code tr�s simple qui fonctionne chez moi, avec une base Paradox7 et un champ Memo. Peut-�tre cela pourra-t-il te donner un coup de pouce ?

    Ecriture des items d'une TListBox :
    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
     
      Table1->Open();
      Table1->Edit();
      Table1->FieldByName("ID")->AsInteger = 1;
      TStream * bsFlux = Table1->CreateBlobStream(Table1->FieldByName("BLOB"),bmReadWrite);
      try
      {
        char * items = ListBox1->Items->GetText();
        bsFlux->Write(items, StrLen(items));
        Table1->Post();
        StrDispose(items);
        Table1->Close();
      }
      __finally
      {
        delete bsFlux;
      }
    Lecture des m�mes donn�es :
    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
     
      Table1->Open();
      Table1->First();
      TStream * bsFlux = Table1->CreateBlobStream(Table1->FieldByName("BLOB"),bmRead);
      char * items = new char[bsFlux->Size];
      try
      {
        bsFlux->Read(items, bsFlux->Size);
        ListBox1->Items->SetText(items);
        Table1->Close();
      }
      __finally
      {
        delete bsFlux;
        delete[] items;
      }
    Peut-�tre peux-tu l'adapter pour le tester chez toi, ou comparer peut-�tre ?

    Cordialement,

    Arnaud

  3. #3
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Merci Greybird,
    Ca c'est sur, un beau code comme �a, je vais l'essayer !
    Je termine une p'tite chose et me remet sur ce souci que j'avais contourn� avec une de mes 'cocottes'.
    Je pr�f�re amplement rebosser sur une partie de mon code pour qu'il soit ce que je voulais qu'il soit au final. Sinon j'ai peur tourner en rond, et pas d'avancer.
    Au fait, se peut il que mon probleme vienne de la methode utilis�e pour �crire ds le champ :
    j'avais utilis� qqchose comme 'Fields->Value = StringList->Text', ce qui
    semble terriblement 'barbare' par rapport a ton code.

    Je te tiendrai au courant du resultat, encore merci

  4. #4
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Citation Envoy� par Cantrelle
    j'avais utilis� qqchose comme 'Fields->Value = StringList->Text', ce qui
    semble terriblement 'barbare' par rapport a ton code.
    Ben si tu n'�cris pas dans le flux, oui, �a doit poser probl�me...

    Cordialement,

    Arnaud

  5. #5
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut bloub, bloub le blob
    Bonsoir,

    Mince, il plante encore avec le meme message a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    bsFlux->Read(items, bsFlux->Size);

    Mais au fait, j'avais tent� d'utiliser deux TStream simultan�ment sur deux champ distinct de la meme table.
    En utilisant scrupuleusement ta methode, a l'�criture no problemo.
    A la lecture, encore se satan� message...

  6. #6
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Tu t'es bien positionn� sur un enregistrement de ta table avant ?

  7. #7
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Oui Maitre...
    De cela, je suis sur.
    La table est filtr�e en amont.
    ...

  8. #8
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Et bien l�, j'ai un peu de mal � voir ce qui peut se passer...

  9. #9
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bon, je vais tenter de mettre des extraits du code avec le test comportant 'CreateBlobStream' calqu� sur l'exemple donn�.
    Mais j'ai peur que certaines lignes soient 'tronqu�es, et que ce ne soit pas facilement lisible...
    Ecriture :
    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
     
    //nouveau test stringlist
      TStream * FluxValeurTest = frmGouter->TableFichePerso->CreateBlobStream(frmGouter->TableFichePerso->Fields->Fields[3],bmWrite);
      TStream * FluxNomChamp =  frmGouter->TableFichePerso->CreateBlobStream(frmGouter->TableFichePerso->Fields->Fields[2], bmWrite);
      try
      {
        char * ElementValeurTest = frmGouter->pList->GetText();
        char * ElementNomChamp = frmGouter->pListCategorie->GetText();
        FluxValeurTest->Write(ElementValeurTest, StrLen(ElementValeurTest));
        FluxNomChamp->Write(ElementNomChamp, StrLen(ElementNomChamp));
        StrDispose(ElementValeurTest);  StrDispose(ElementNomChamp);
      }
      __finally
      {
        delete FluxValeurTest;
        delete FluxNomChamp;
      }
    //
    Lecture :
    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
     
    frmGouter->pList = new TStringList; frmGouter->pListCategorie = new TStringList;
      TStream * FluxValeurTest = frmGouter->TableFichePerso->CreateBlobStream(frmGouter->TableFichePerso->FieldByName("ValeurTest"),bmRead);
      TStream * FluxNomChamp =  frmGouter->TableFichePerso->CreateBlobStream(frmGouter->TableFichePerso->FieldByName("NomChamp"), bmRead);
      char * ElementValeurTest = new char[FluxValeurTest->Size];
      char * ElementNomChamp = new char[FluxNomChamp->Size];
      try
      {
        FluxValeurTest->Read(ElementValeurTest, FluxValeurTest->Size);
        FluxNomChamp->Read(ElementNomChamp, FluxNomChamp->Size);
        frmGouter->pList->SetText(ElementValeurTest);
        frmGouter->pListCategorie->SetText(ElementNomChamp);
      }
      __finally
      {
        delete FluxValeurTest; delete FluxNomChamp;
        delete[] ElementValeurTest;  delete[] ElementNomChamp;
      }
    for (int i = 0; i < frmGouter->pListCategorie->Count; i ++)
    {
    frmGouter->TexteChamp = frmGouter->pListCategorie->Strings[i];
    frmGouter->ChoixFiltreDecompte = frmGouter->pList->Strings[i];
    frmGouter->CreationTableDecompte->Execute();
    }
    Voila. J'esp�re que �a passe a peu pr�s bien...
    Quoi qu'il en soit, merci Greybird de t'etre pench� sur mon souci
    Cordialement,
    Vinc.

Discussions similaires

  1. Utiliser in avec un tableau non ouvert
    Par WebPac dans le forum Delphi
    R�ponses: 8
    Dernier message: 22/01/2007, 12h13
  2. Champ Blob non reconnu avec ADO
    Par Ben_Le_Cool dans le forum Bases de donn�es
    R�ponses: 6
    Dernier message: 30/10/2006, 14h34
  3. R�ponses: 5
    Dernier message: 03/08/2006, 16h56
  4. copier une plage d'un fichier Excel non ouvert vers la feuille en cours
    Par mich2704 dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 23/06/2006, 12h30
  5. Ajouter une cl� pour une session non ouverte
    Par prgasp77 dans le forum Windows
    R�ponses: 4
    Dernier message: 29/10/2005, 00h26

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