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

Bases de données Delphi Discussion :

Export de DBGrid [ou TQuery] à CSV


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut Export de DBGrid [ou TQuery] à CSV
    Bonjour,

    Je cherche une méthode pour passer le résultat d'un TQuery [que nous visualisons avec un DBGrid] à un fichier CSV qui peut être ouvert par Excel.

    J'ai regardé les FAQ et j'ai trouvé une Proc por TStringList => excel mais pas pour TQuery => excel.

    Je cherche une fonction simple, comme ExportSpreadSheet de Paradox.

    Merci d'avance,

    Cordialement,

    H

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Dans la JVCL tu as le TjvDbGridCSVExport qui fait ca.
    Sinon il va falloir que tu crées ta propre fonction de génération de CSV.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre émérite
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Par défaut
    un truc du genre devrai fonctionner

    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
     
    var
      fic : TextFile;
      i : Integer;
    begin
      AssignFile(fic, 'test.csv');
      Rewrite(fic);
      with Query1 do begin
        First;
        while not Eof do begin
          for i:=0 to Fields.Count - 1 do begin
            if i > 0 then Write(fic, ';');
            Write(fic, Fields[i].AsString);
          end;
          WriteLn(fic);
          Next;
        end;
      end;
      CloseFile(fic);
    end;

  4. #4
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Coup de bol...
    J'ai rédigé hier une FAQ pour le faire sur une StringGrid, voici le code que tu n'auras pas de mal à adapter à un DBGrid :

    Citation Envoyé par waskol
    Auteur : Waskol
    Rubrique : 3.6.5. Le composant TStringGrid

    [QR] Comment Charger/Sauver un StringGrid dans un fichier ?
    Nous vous proposons ici deux procédures/fonctions toutes faites qui le permettent :

    Première méthode (routines fichiers de bas niveau) :
    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
    // Sauver un TStringGrid dans un fichier
    procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
    var f:    TextFile;
        i, k: Integer;
    begin
      AssignFile(f, FileName);
      Rewrite(f);
      with StringGrid do
      begin
        // Ecrire le nombre de Colonnes/lignes
        Writeln(f, ColCount);
        Writeln(f, RowCount);
        // Boucler sur les cellules
        for i := 0 to ColCount - 1 do
          for k := 0 to RowCount - 1 do
            Writeln(F, Cells[i, k]);
      end;
      CloseFile(F);
    end;
     
    // Charger un TStringGrid depuis un fichier
    //Attention, il faut tester l'existence du fichier avant d'utiliser cette procédure
    procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
    var
      f:          TextFile;
      iTmp, i, k: Integer;
      strTemp:    String;
    begin
      AssignFile(f, FileName);
      Reset(f);
      with StringGrid do
      begin
        // Obtenir le nombre de colonnes
        Readln(f, iTmp);
        ColCount := iTmp;
        // et de lignes
        Readln(f, iTmp);
        RowCount := iTmp;
        // remplir les cellules
        for i := 0 to ColCount - 1 do
          for k := 0 to RowCount - 1 do
          begin
            Readln(f, strTemp);
            Cells[i, k] := strTemp;
          end;
      end;
      CloseFile(f);
    end;
    Deuxième méthode (avec la classe TFileStream) :
    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
    {écrire une chaîne de caractères depuis le flux}
    procedure WriteStreamString(Stream : TStream; UneChaine : string);
    var LongueurChaine : integer;
    begin
      {obtenir la longueur de la chaîne de caractères}
      LongueurChaine := Length(UneChaine);
      {écrire cette longueur dans le flux}
      Stream.Write(LongueurChaine,SizeOf(integer));
      {écrire les caractères}
      Stream.Write(UneChaine[1], LongueurChaine);
    end;
     
    {retourne une chaîne de caractères depuis le flux}
    function ReadStreamString(Stream : TStream) : string;
    var LongueurChaine : integer;
    begin
      {obtenir la longueur de la chaîne de caractères}
      Stream.Read(LongueurChaine,SizeOf(integer));
      {Redimensionner la chaine pour allouer la mémoire nécessaire}
      SetLength(Result, LongueurChaine);
      {Lire les caractères}
      Stream.Read(Result[1], LongueurChaine);
    end;
     
    // Sauver un TStringGrid dans un fichier
    procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
    var f:TFileStream;
        i, k ,cc, rr: Integer;
    begin
      if FileExists(FileName)
      then f:=TFileStream.Create(FileName,fmOpenWrite)
      else f:=TFileStream.Create(FileName,fmCreate);
      try
        with StringGrid do
        begin
          cc:=ColCount;
          rr:=RowCount;
          // Ecrire le nombre de Colonnes/lignes
          f.Write(cc,SizeOf(integer));
          f.Write(rr,SizeOf(integer));
          // Boucler sur les cellules
          for i := 0 to ColCount - 1 do
            for k := 0 to RowCount - 1 do
              WriteStreamString(F,Cells[i, k]);
        end;
      finally
         F.Free;
      end;
    end;
     
    // Charger un TStringGrid depuis un fichier
    function LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName):boolean;
    var f:TFileStream;
        iTmp, i, k, cc, rr: Integer;
    begin
      result:=FileExists(FileName);
      if not result then Exit;
      f:=TFileStream.Create(FileName,fmOpenRead);
      try
        with StringGrid do
        begin
          // Obtenir le nombre de colonnes
          f.Read(iTmp,SizeOf(integer));
          ColCount := iTmp;
          // et de lignes
          f.Read(iTmp,SizeOf(integer));
          RowCount := iTmp;
          // remplir les cellules
          for i := 0 to ColCount - 1 do
            for k := 0 to RowCount - 1 do
              Cells[i, k] := ReadStreamString(f);
        end;
      finally
         F.Free;
      end;
    end;
    Bon dev

  5. #5
    Membre émérite
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Par défaut
    Tu as mal cherché dans la faq :-)

    http://delphi.developpez.com/faq/?pa...etfichiertexte

    Bloon

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut Export Résolu
    Merci a tous pour vos réponses.

    J'ai employé ce code:

    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
    procedure TForm1.btnExportClick(Sender: TObject);
    var
      fic : TextFile;
      i : Integer;
    begin
      AssignFile(fic, 'C:\\MyDir\\Temp.csv');
      Rewrite(fic);
      with Query1 do begin
        First;
        Query1.DisableControls; // eviter de re-peindre l'écran
        while not Eof do begin
          for i:=0 to FieldCount - 1 do begin
            if i > 0 then Write(fic, ',');
            Write(fic, Fields[i].AsString);
          end;
          WriteLn(fic);
          Next;
        end;
      end;
      Query1.EnableControls;
      CloseFile(fic);
    end;
    C'est le même code offert par Denokan avec:

    FieldCount en lieu de Fields.Count [mon compilateur ne le voulait pas]
    et
    Disable + Enable controls pour éviter le click à l' écran

    Pour Bloon:

    Mci pour l'observation. J'avais vu et déchargé ce code, mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure datasetToTextFile(ds : TDataSet; nomFichier : string;
                                            separateur : string = ';'; delimiteur : char = #0);
    Dans cette ligne mon compilateur n'acceptait pas la définition du "separateur" et "delimiteur" dans la même définition. Je verrai pour quoi.

    Merci encore,

    Et Joyeuses Pâques à tout le monde.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CSV] Export de donnees vers excel (.csv)
    Par vivian dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/07/2006, 14h22
  2. Exporter contenu DBgrid vers fichier excel
    Par luluofmars dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/06/2006, 13h21
  3. exporter mon dbgrid vers excel
    Par nil dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/04/2006, 10h44
  4. exporter des table en fichier csv
    Par kornmuse90 dans le forum Administration
    Réponses: 1
    Dernier message: 17/03/2006, 09h17
  5. [phpMyAdmin] Exporter une requête au format CSV
    Par nicoaix dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 07/02/2006, 18h05

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