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 expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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.
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    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 expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  4. #4
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    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 expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

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

  7. #7
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    Par défaut
    Oui Maitre...
    De cela, je suis sur.
    La table est filtrée en amont.
    ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

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

  9. #9
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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.
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

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