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 :

Dbgrid to Table + Save Table + Question


Sujet :

C++Builder

  1. #1
    Membre expérimenté Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Par défaut Dbgrid to Table + Save Table + Question
    Une question !

    Excel permet d'ouvrir les fichier .dbf !
    Pourquoi lorsque je crée une table, Excel ne sais pas l'ouvrir ?
    Pourtant la table s'ouvre bien avec builder et autres ?

    Dois je faire un module qui ecrit une table en format txt avec entre chaque champ la balise "/t" pour les tabulation ?

    Merci d'avance
    @+

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    void __fastcall TForm1::SaveClick(TObject *Sender)
    {
      SaveDialog1->FileName="Resultat.dbf";
     
      if(SaveDialog1->Execute())
      {
       CreateBD(ExtractFileName(SaveDialog1->FileName),
                ExtractFilePath(SaveDialog1->FileName));
      }
    }
    //-------------------------------------------------------------------------
     
    void TForm1::CreateBD(AnsiString Name,AnsiString Path)
    {
      // En premier, description de la table qui doit être nommée
      Table->Active=false;
      Table->DatabaseName = Path;
      Table->TableType = ttDBase; // ou ttdefault;
      Table->TableName = Name;
     //----------------------------------------
     
     if(!Table->Exists)
     {
      Table->Active = false; // Le composant Table ne doit pas être actif
      Table->FieldDefs->Clear(); // reset la table si qqch...
      TFieldDef *pNewDef; // pointeur sur la table
     
     // Ensuite description des champs
     // resultat est une dbgrid contenant des données via une requete sql
     
             // nombre de champ (titre)
      for(int x=0; x< resultat->FieldCount; x++) 
      {     // ajout d'une colone
        pNewDef = Table->FieldDefs->AddFieldDef();               
            // lecture des noms des colonnes de la dbgrid   
        pNewDef->Name = resultat->Fields[x]->DisplayName;
            // lecture de type de la colonne de la dbgrid   
        pNewDef->DataType = resultat->Fields[x]->DataType;
            // lecture de la taille de la colonnes de la dbgrid   
        pNewDef->Size = resultat->Fields[x]->Size;
      }
      Table->CreateTable();
     }
     
    //------------------------------------
     
     // remplissage de la bd
     Table->Active = false;
     Table->DatabaseName = Path;
     Table->TableName = Name;
     Table->Active=true;
     
                         // nombre d'enregistrement dans la dbgrid
     for (int y=0 ; y< resultat->Fields[0]->DataSet->RecordCount; y++)
     { 
       // mode ajout , insertion et edition ;
        Consult->Append(); Consult->Insert(); Consult->Edit();
     
      for (int x=0 ; x< resultat->FieldCount; x++)
      {
        // recherche le champ où il faut se positionner
        Table->FieldByName(resultat->Fields[x]->DisplayName)->Value
                                 = resultat->Fields[x]->AsString;
         OU
     
        // simplement
       Table->Fields[x]->Value = resultat->Fields[x]->AsString;
     
      }
     }
       //fermeture de la table
       Consult->Post(); 
       Consult->Refresh();
    }
    //----------------------------------------


    @+ à Toutes et Tous

  2. #2
    Membre expérimenté Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Par défaut
    petite erreur

    Consult->Append(); Consult->Insert(); Consult->Edit();

    a remplacer par

    Table->Append(); Table->Insert(); Table->Edit();

    @+

  3. #3
    Membre expérimenté Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Par défaut correction complete + copie dans txt pour excel
    il me reste plus qu'a ouvrir excel directement avec un shell !

    ma question precedente reste tjr non résolue !

    pq la creation d'une bd ne sais pas s'ouvrire via excel alors que si on la crée via l'outil de builder ca marche ?

    @+

    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
    37
    38
    39
    40
     
      out = fopen(xls.c_str(),"w");
     
      for(int x=0; x< resultat->FieldCount; x++)
      {  // Ensuite description des champs
        pNewDef = Table->FieldDefs->AddFieldDef();
        pNewDef->Name = resultat->Fields[x]->DisplayName;
        pNewDef->DataType = resultat->Fields[x]->DataType;
        pNewDef->Size = resultat->Fields[x]->Size;
        fprintf(out,"%s\t",resultat->Fields[x]->DisplayName);
      }
      Table->CreateTable();
     }
     
     // remplissage de la bd
     Table->Active = false;
     Table->DatabaseName = Path;
     Table->TableName = Name;
     Table->Active=true;
     for (int y=0 ; y< resultat->Fields[0]->DataSet->RecordCount; y++)
     {
      Table->Append(); Table->Insert(); Table->Edit();
      fprintf(out,"\n");
     
       for (int x=0 ; x< resultat->FieldCount; x++)
      {
       Table->FieldByName(resultat->Fields[x]->DisplayName)->Value 
                               = resultat- >Fields[x]->AsString;
     
       fprintf(out,"%s\t",resultat->Fields[x]->AsString);
      }
     
      resultat->Fields[0]->DataSet->Next();
     
     }
     
      Table->Post();
      Table->Refresh();
      Table->Active=false;
      fclose(out);

Discussions similaires

  1. [WD17] Table dans table dans table je pense ?!
    Par franck34matlab dans le forum WinDev
    Réponses: 8
    Dernier message: 08/07/2014, 14h06
  2. Remplir une DBGrid à partir d'une table
    Par steven2009 dans le forum Bases de données
    Réponses: 10
    Dernier message: 07/10/2010, 20h34
  3. Comparaison Table Excel table Mssql
    Par k-lendos dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 01/06/2005, 14h56
  4. [Création de table] 1 table ou plusieurs
    Par Pascal dans le forum Bases de données
    Réponses: 6
    Dernier message: 17/06/2004, 15h12
  5. Table de tables
    Par zenobe dans le forum Oracle
    Réponses: 12
    Dernier message: 24/03/2004, 12h31

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