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 :

Base de données imprécises


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Par défaut Base de données imprécises
    Salut à tous,
    Je m’excuse à l’avance de la longueur de ce message, et j’espere que vous ne me zapperez pas d’aussi tot.
    Voila, j’ai un petit (pour ne pas dire « grand ») problème.
    Je vais essayer de vous expliquer, ca risque de vous paraître tres ambiguë, meme incompréhensible, mais je vous assure, je vais essayer de vous expliquer.

    Je suis entrain de travailler sur un petit projet dans le cadre des etudes (projet de fin d’années), c’est un projet qui traite l’une des techniques du Datamining qui est « l’extraction de connaissances a partir de bases de données », Bref, je ne peux pas trop rentrer ds les details sinon, vous risquez de vous endormir.

    Mon probleme et que je coince « au tt debut »

    Je dois traiter une base de donnes avec des valeurs « imprecises », donc on parle de « théories des possibilités », comme je doute que vous sachiez ce que c’est ; je vais essayer de vous expliquer a peu près,

    En faite dans ma base de données, il y aura des donnees précises (valeurs entieres), et des données « imprecises », un exemple va peut etre mieu vous faire comprendre
    Monsieur X , a acheté 1 LAIT, 2 PAIN (données précises) et
    « (0.2/1+0.6/3+1/4) T-SHIRT »(qui est une données imprecise) cette derniere donnée veut dire, que : (c’est possible qu’il est acheté 1 t-shirt avc la probabilité=0.2, la possibilté qu’il est acheté 3 t-shirt avec la proba=0.6, et la possibilité qu’il est acheté 4 t-shirt avc la proba=1).

    Voila j’espere que vous avez compris un peu le sens de tout ca, je vais enfin rentrer dans le vif du sujet, qui est « vous expliquer mon probleme » ;

    (Tt d’abord il faut savoir que je dois faire subir des traitements a cette base de donnees (cela etant mon vrai travail), le traitement des données imprecises est different de celui des donnees precises)

    Comment est ce ke je vais editer une base de données qui va s’afficher ds un « DBGrid », (je dois avoir l’affichage de chak champs comme ds l’exemple precedant, c.a.d, quand l’attribut i,dans la transaction j est precis alors c’est un entier, et quand c’est imprecis c’est de style « réel / entier + réel / entier + … ». tout en sachant que je ne peux pas declarer c champs comme etant de type « alphanumerique » (cela va me poser un probleme lors du choix des attributs a traiter, car je ne traite que les valeur numeriques pour les autres ,de type char "comme le nom, prenom..", j'affiche un msg d'erreur:"cet attribut n'est pas quantitatif" )

    Est-ce kil ya possibilte de créer deux bases de données, mais lors de l’affichage , en afficher k’une seule, (par exemple une base de donnee precise avec la présence de cases remplies par (-1), pour dire k’elles sont imprecises, et une autre base de donness pour limprecision qui correspond aux -1 de la premiere BD), si oui comment faire pour fusionner ces deux BDs , sachant que j’utilise un « OpenDialogue » pour ouvrir ces BD et elle s’affichera de suite ds le DBGrid…

    J’ai utilisé l’outil module de base de donnees de cpp builder, j’ai essayé de créer des petits exemples de BD avc paradox 7 et dbase pour windows.

    Que me conseillez vous de faire ?!!!

    Bref je ne sais quoi faire, alors SVP aidez moi, si vous le pouvez, et si vous n’avez pas compris, posez moi des question pour que je puisse plus vous eclairer.

    Encore desolée pour Ce JOURNAL…

  2. #2
    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
    Bonsoir,

    De mon côté, je dirais (et j'en suis désolé) que je ne cerne pas , ou mal, le problème:
    -> est ce un problème travail sur la base de données ?
    -> est ce un problème d'affichage des ces données dans le DBGrid ? (on dirait que oui, mais dans ce cas, qu'est ce qui coince ? le DBGrid va afficher "bêtement" les données de ta table, tu peut customiser l'apparence de chaque champs ou colonne en gérant certains évènements de "dessin" des Items du DBGrid; ou - pour essayer de coller a ce que tu disais - tu peut utiliser 2 objets TQuery pointant sur ta table et qui renvoient respectivement les données précises et imprécises, et tu changes la propriété 'Dataset' du TDatasource censé alimenter ton DBGrid en fonction de ce que tu veux afficher)

    Le mieux serait, comme assez souvent, un exemple "concret" -> un bout de code illustrant la situation.

    @+

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    utilise des variables array pour regrouper tes deux bases

    apres tu travailleras sur cette variable

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Par défaut
    Bonsoir a tous;
    je vous remercie vraiment de m'avoir repondu, je comprend ke ma requete soit ambigue, je me perd moi meme dedans,

    En faite je vous assure je ne sais plus quoi faire,

    je vais vous donner des bout de code pour que vous voyez ce que je fais a peu pres,

    1erement le bouton qui va me servir a ouvrir Ma base de donnée
    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
     
    void __fastcall TA::Button1Click(TObject *Sender)
    {
    //ouverture de la base de donnee ;
     
    if (OpenDialog1->Execute())
    {
    A->ComboBox1->Clear();
    Table1->Active=false ;
    Table1->TableName = OpenDialog1->FileName;
    Table1->Active = true;
    B->ListBox1->Clear();
    //affichage des champs de la BD ds le ListBox1 dans le but de choisir les attributs a traiter
    // Cela se fait dans une deuxieme forme
    for (int q=0; q<Table1->FieldCount; q++)
      {
       B->ListBox1->Items->Add(Table1->FieldDefs->Items[q]->DisplayName);
      }
     A->TabSheet2->Enabled = true;
     nb_enrg=Table1->RecordCount;
     don =new int [nb_enrg]; 
    }
    }

    Le bouton qui se trouve dans la 'forme B', qui me sert a selectionner les attributs que je veux selectionner
    (ils se trouvent ds un listbox1, je les selectionne vers un listbox2)
    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
     
    void __fastcall TB::Button1Click(TObject *Sender)
    {
    int i,j;
    bool existe; //--- Pour éviter la répétition de l'attribut
    for(i=0;i<ListBox1->Count;i++) //on parcour la ListBox1
        if(ListBox1->Selected[i])
        {//-------------------------------------- Debut if
     
          if( A->Table1->FieldDefs->Items[i]->DataType != ftFloat &&
           A->Table1->FieldDefs->Items[i]->DataType != ftTime  &&
           A->Table1->FieldDefs->Items[i]->DataType != ftInteger)
        {
            MessageDlg("l'attribut selectionné n'est pas quantitatif  ", mtInformation , TMsgDlgButtons() << mbOK, 0);
         }
            for(j=0;j<ListBox2->Count;j++)
              {
                if((ListBox1->Items->Strings[i])==( ListBox2->Items->Strings[j]))
                  existe=true;
              }
            if(existe)   //--- Si l'attribut sélectionné existe déja ds ListBox2
              {
                MessageDlg("Le champ: "+(ListBox1->Items->Strings[i])+"\n  existe déja !!!", mtInformation, TMsgDlgButtons() << mbOK, 0);
                existe = false;
              }
            else ListBox2->Items->Add(ListBox1->Items->Strings[i]);
        }//--------------------------------------- Fin if
    ListBox1->ClearSelection();       
    }
    Donc vous voyez ds les messages d'erreur que je ne peux pas selectionner des attributs de type caractères, car mes traitement ne se font que sur des attributs quantitatifs,
    Car notre promoteur nous a dis que la solution pour notre base de donneés imprécise été d'editer notre base de donner en donnant comme type 'char' a chak attribut, puis d'ecrire une fonction qui va transformer les char en num ... tout un charabya,
    Donc je ne c quoi faire,

    Et mon probleme c'est un probleme de "soution adequate" , ca fait un bon moment que je boss pour rien, et je n'avance plus, je vous assure que je sui perdue!!!!

    Je me suis dis que mon dernier recour été de solliciter votre aide, qui sait, un miracle se produira...

    Je vous remercie!!!!!

  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
    Bonsoir,

    J'avoue être surement un peu "lent" pour comprendre les problématiques, donc désolé. Pas de miracles avec moi, j'en ai peur.
    Je me demande pourquoi on ne pourrais pas tester le DataType des champs dès la boucle qui rempli la ListBox1, afin de n'avoir dès ce point des champs "valides" pour la suite.
    Ensuite, pour ta comparaison entre Listbox2 et ListBox1 afin de ne pas avoir de doublon, de "mémoire" je dirais que tu devrais regarder vers "IndexOf" (a utiliser via la propriété Strings de ListBox2 je crois).

    Et, je dois être très certainement bouché (mille excuses) mais je ne comprends pas quel est le problème avec l'affichage dans un DBGrid (cité au debut de ton post).

    @+

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Bonsoir,

    J'avoue être surement un peu "lent" pour comprendre les problématiques, donc désolé. Pas de miracles avec moi, j'en ai peur.
    Je me demande pourquoi on ne pourrais pas tester le DataType des champs dès la boucle qui rempli la ListBox1, afin de n'avoir dès ce point des champs "valides" pour la suite.
    Ensuite, pour ta comparaison entre Listbox2 et ListBox1 afin de ne pas avoir de doublon, de "mémoire" je dirais que tu devrais regarder vers "IndexOf" (a utiliser via la propriété Strings de ListBox2 je crois).

    Et, je dois être très certainement bouché (mille excuses) mais je ne comprends pas quel est le problème avec l'affichage dans un DBGrid (cité au debut de ton post).

    @+
    Ne t'exuse pas du tt, mon probeme est super ambigue, moi en tout cas je desespere total, et j'attend une lumiere qui apparaitera poorquoi pendant un reve , ou "ze solution" va venir a moi!!!

    sinon pour le test c vrai je n'ai pas pensé a le faire avant, c ske je vais faire, je ne selectionneré que les attribut valides!! merci

    pour le indexOf je ne l'ai jamais utilisé, je vais jeter un coup d'oeuil

    en tout cas merci beaucoup !!!!!

  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
    Donc, pour en revenir au DBGrid, si on est dans la situation ou:
    . l'utilisateur sélectionne une liste de champs (via le listbox1) dans des tables différentes
    . on dois afficher ces champs dans un seul et même DBGrid
    -> je ne vois pas d'autres solutions, mais je peut me tromper, que de passer par un objet TQuery et une requête reprennant dans le Select statement les champs sélectionnés par l'utilisateur.
    Après, l'affichage pourra se faire dans le DBGrid.

    Sinon, regardes (juste un conseil) le coup du IndexOf, ca tévitera au moins un boucle for dans ton code.

    ++

Discussions similaires

  1. Imprécision dans la base de donnée à cause de float.parse
    Par LhIaScZkTer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/07/2008, 11h47
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

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