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++ Discussion :

[Base de données] Ecriture / lecture d'un tableau dans un champs de type Binaire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Par défaut [Base de données] Ecriture / lecture d'un tableau dans un champs de type Binaire
    Bonjour, j'essai de réduire le nombre d'enregistrements dans ma base de données.

    C'est pour cela que je cherche à écrire des tableaux de std::pair<float,float> dans un champs de type BINAIRE d'une base de données.

    En pratique cela donne
    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
     
    list< std::pair<float,float> > lst;
    /* remplissage de ma liste */
     
    std::pair<float,float> *tabDePoints;
    tabDePoints = new std::pair<float,float>[lst.size()];
    /* remplissage du tableau */
     
    list< std::pair<float,float> >::const_iterator it;
    int indiceTab = 0;
    for (it = lst.begin(); it!=lst.end(); ++it)
    {
    	tabDePoints[indiceTab] = (*it);
    	indiceTab++;
    }
     
    sCmd.Format(_T("INSERT INTO maTable(id,leTabDeVal) VALUES(%d, Ox%x)"),
                     m_iId, *tabDePoints);
    pAdo->ExecuteCommand(sCmd); //methode perso pour executer la commande
    Là première question :
    en écrivant *tabDePoints est ce que j'écris le contenu total de mon tableau ou seulement du première élément ?

    Deuxième question :
    Peut on écrire le contenu total d'un liste d'un seul coup dans un champs de type Binaire d'une base de données ?

    merci d'avance
    à bientôt

    Dernière question comment connaitre la taille de mon tableau de std::pair<float,float> ??

  2. #2
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Dis moi si j'ai bien compris ton problème :
    - tu as une liste de paires de flottants
    - tu la copie dans un tableau de paire de flottants
    - tu confie le tout à la méthode sCmd.Format
    - tu veux savoir ce qu'il se passe

    Et bien la réponse est : je n'en sais rien. Tout dépend de comment la fonction Format a été implémentée.

    Comme je suppose que ce n'est pas toi qui a fait cette méthode, mais que tu utilises une librairie, tu devrais te renseigner dans l'aide de cette librairie.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Par défaut
    Alors j'ai oublié de préciser un certains nombre de chose :

    sCmd est de type CString, donc Format() est la méthode de cette classe MFC.

    Ensuite cette requête s'effectue correctement, et m'écrit dans la base quelque chose comme : 0x3971ac00 sur 4 octets donc (alors que mon tableau contient plus d'une paire de flottants donc forcement plus d'une fois 8 octets).

    L'une des questions que je me pose c'est, est-ce que quand j'écris *tabDePoints cela correspond à l'ensemble de mon tableau de paire flottants ou alors au première élément flottant de l'indice 0 (tabDePoints[0].first()) ?

    Est ce plus clair comme question

  4. #4
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par toto4650
    L'une des questions que je me pose c'est, est-ce que quand j'écris *tabDePoints cela correspond à l'ensemble de mon tableau de paire flottants ou alors au première élément flottant de l'indice 0
    C'est les deux.
    Tu as une explication assez convaincante de ce qu'est un tableau :ici

    Apparement la fonction Format des CString utilise des paramètres à la mode printf, ce qui n'est pas très sur, tu pourrais envisager de passer par des std::string pour construire tes CString (dont tu as apparement besoin pour accéder à ta bdd).

    Le problème de cette façon de faire est que l'interprétation du type des paramètres que tu leur donne (ici ton tableau) se fait en fonction du code que tu leur fourni (ici %x). Il existe peut-être un code qui signifie "tableau de paire d'entier", mais j'en doute.

    Je n'ai pas de meilleure proposition à te faire que de passer par des flux std pour créer une chaine de caractère que tu convertira en CString ensuite.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Par défaut
    En effet je viens de faire un test et c'est vérifier...

    Bref du coup si je veux copier d'un coup mon tableau dans ma base il faut que j'utilise autre chose. Mais quoi ?
    là je suis paumé dans le floue total. Please Help !

    De plus comment puis je connaître la taille de mon tableau, en effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sizeof(monTab) = 4
    sizeof(*monTab) = 8
    alors que mon tableau contient plus d'un élément...
    je loose complet
    merci en tout cas pour ton lien et tes réponses rapides

  6. #6
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Désolé, j'ai mis à jour ma précédente réponse pendant que tu écrivais.

    Si tu utilises des flux, tu ne devrais plus avoir besoin de ton tableau.
    Ce qui est bien, cela dit en passant, car copier deux fois tes données une fois dans une liste et une fois dans un tableau, c'est quelque chose que tu souhaites éviter.

    Cela dit, il n'y a pas moyen de connaitre la taille d'un tableau.
    Ce n'est pas une information qui est accessible.
    Soit tu l'as gardé quelque part (en l'occurence c'est le cas, il s'agit de lst.size()), soit tu ne peux pas la connaitre.
    C'est une des raisons qui fait qu'en général, tu ne veux utiliser des tableaux que dans des cas particuliers (tableaux de constantes par exemple), et que tu préfères des conteneurs plus évolués.

Discussions similaires

  1. Ecriture/Lecture d'un tableau de float
    Par Socolin dans le forum C#
    Réponses: 2
    Dernier message: 04/05/2010, 10h32
  2. Code VBA-Base de données en lecture seule
    Par @lex7020 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/11/2007, 16h12
  3. [Ouverture Base] Base de données en lecture seule
    Par Zartak dans le forum VBA Access
    Réponses: 7
    Dernier message: 10/05/2007, 15h22
  4. base de donnée en lecture seule
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/02/2007, 16h14
  5. Impossible de fermer une base de données en lecture
    Par requiemforadream dans le forum ASP
    Réponses: 7
    Dernier message: 21/04/2005, 16h58

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