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

API, COM et SDKs Delphi Discussion :

procedure datasetToTextFile et savedialog


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Janvier 2005
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 532
    Par défaut procedure datasetToTextFile et savedialog
    bonjour,
    jutilise la procedure datasetToTextFile, cette dernière ma permit de créé le document texte dans le répertoire de l'application, mais ce que je souhaite c'est de donnée la main à l'utilisateur pour choisir le chemin via un RZshelltree.
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
     //crée un fichier texte
    procedure datasetToTextFile(ds : TDataSet; nomFichier : string;
                                            separateur : string = ';'; delimiteur : char = #0);
    var 
      i : integer;
      fichier : TextFile; 
      bm : TBookmark;
      sCursor : TCursor;
      valeur : string;
      openDS : boolean;
      begin
      try
        { Création du fichier de sortie }
     
        AssignFile(fichier,nomFichier);
        Rewrite(fichier);
        write(fichier,inttostr(ds.recordcount)+separateur)
      except
        on e: exception do
          raise Exception.Create('Erreur pendant la création du fichier [' + nomfichier + '] : ' +
                                 sLineBreak + e.message);
      end;
     
      sCursor := Screen.Cursor;
      Screen.Cursor := crHourGlass;
      try
        ds.DisableControls;
        openDS := not ds.Active;
        bm := nil;
        try
          with ds do
          begin
            if openDS then
              Open
            else
            begin
              { on sauvegarde la position de l'enregistrement courant dans }
              { le dataset afin de la restituer en fin de traitement }
              bm := ds.GetBookmark;
              First;
            end;
            { ligne d'en-tête : on met le nom des zones }
            for i:= 0 to FieldCount - 1 do
            begin
              if (i > 0) then
                write(fichier,separateur + ds.Fields[i].FieldName)
              else
                write(fichier,ds.Fields[i].FieldName);
            end;
            writeln(fichier);  { passe à la ligne suivante dans le fichier }
            while not Eof do
            begin
              { écriture de chaque colonne de l'enregistrement courant }
              for i := 0 to FieldCount - 1 do
              begin
                { ajout du délimiteur si le champ est de type texte }
                if (delimiteur <> #0) and
                  (Fields[i].DataType in [ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString]) then
                  valeur := AnsiQuotedStr(Fields[i].FieldName+Fields[i].Text,delimiteur)
                else
                  valeur := Fields[i].FieldName+Fields[i].Text;
                { à partir du second champ, on ajoute le séparateur }
                if (i > 0) then
                  write(fichier,separateur + valeur)
                else
                  write(fichier,valeur)
              end;
              writeln(fichier); { passe à la ligne suivante dans le fichier }
              Next;
            end; { while not eof }
          end; { with ds }
        finally
          { si on a ouvert le ds, on le ferme }
          if openDS then
            ds.Close
          else
          { sinon, on se repositionne sur l'enregistrement initial }
          begin
            ds.GotoBookmark(bm);
            ds.FreeBookmark(bm);
          end;
          ds.EnableControls;
     
          CloseFile(fichier);
     
           end;
      finally
        Screen.Cursor := sCursor;
      end;
    end;
    //procédure d'appel
    procedure TForm1.Button9Click(Sender: TObject);
    var y,m,j:word;
    var Present:TDateTime;
    begin
    Present:=Now;
    edit2.Text :='';
      DecodeDate(present,y,m,j);
      edit2.Text :=rzshelltree1.SelectedPathName;
      edit2.Text:= edit2.Text+'\'+'bdd'+label16.Caption +'T'+combobox3.Text+ inttostr(y-2000) +'.txt';
      datasetToTextFile(form1.ADOqag,'bdd'+label16.Caption +'T'+combobox3.Text+ inttostr(y-2000) +'.txt',';',' ');
      showmessage('Transférer à la DRC ' +edit2.Text);
    end;
    edit2.text contient le chemin choisi par l'utilisateur.
    je souhaite sauvegarder le document texte créer là où l'utilisateur a choisi.
    Merci.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Si nomFichier reçoit un chemin de la forme 'C:\Dossier\Sous-Dossier\Fichier.ext';

    Il te suffit de fournir le contenu de edit2.Text comme second paramètre de datasetToTextFile
    Quelle est la difficulté ?

    edit2, form1, label16, combobox3... comment peux-tu t'y retrouver avec des nommages aussi peu pertinentes !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      edit2.Text:= IncludeTrailingPathDelimiter(rzshelltree1.SelectedPathName)+'bdd'+label16.Caption +'T'+combobox3.Text+ inttostr(y-2000) +'.txt';
      datasetToTextFile(form1.ADOqag, edit2.Text, ';', ' ');
    le IncludeTrailingPathDelimiter n'est peut-être pas nécessaire, si SelectedPathName respecte les normes, cela inclu le \
    Petit rappel de la norme RTL Delphi
    Path c'est avec \
    Dir c'est sans \
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé

    Inscrit en
    Janvier 2005
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 532
    Par défaut
    salut, merci pour votre réponse,
    j'ai déjà essayé une solution qui ne m'a pas donnée satisfaction, c'est pour cela que je vous ai contacté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    edit2.Text:= rzshelltree1.SelectedPathName+'\'+'bdd'+label16.Caption +'T'+combobox3.Text+ inttostr(y-2000) +'.txt';
      datasetToTextFile(form1.ADOqag, edit2.Text, ';', ' ');
    à l'exécution sa bloque sur la procédure datasetToTextFile à la ligne 17 de mon premier message Rewrite(fichier);
    je vais revoir mon application, peut être que suite à une nuit longue j'avais perdue ma concentration.
    je vais réessayé.
    MERCI.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Vérifie que le fichier ne soit pas ouvert ailleurs
    Vérifie le Chemin construit (un ShowMessage de nomFichier en paramètre de datasetToTextFile)
    Joue avec {$I+} pour gère des Exception ou un IOResult
    Il est important de gérer les codes d'erreurs, cela aide souvent à déboguer

    Tente un mode binaire via un File et non un TextFile
    Pense que Rewrite par défaut considère des buffers de 128 octet
    Vu que tu manipules de Char, je te conseille SizeOf(Char) comme RecSize !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éclairé

    Inscrit en
    Janvier 2005
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 532
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    datasetToTextFile(form1.ADOqag,edit2.Text,';',' ');
    Marche très bien, je ne sais pas ce qui ce passe, où était l'erreur.
    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par hocine Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    datasetToTextFile(form1.ADOqag,edit2.Text,';',' ');
    Marche très bien, je ne sais pas ce qui ce passe, où était l'erreur.
    Merci
    cela semble évident :
    dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      edit2.Text :=rzshelltree1.SelectedPathName;
      edit2.Text:= edit2.Text+'\'+'bdd'+label16.Caption +'T'+combobox3.Text+ inttostr(y-2000) +'.txt';
    on voit bien que la valeur est différente du second paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      datasetToTextFile(form1.ADOqag,'bdd'+label16.Caption +'T'+combobox3.Text+ inttostr(y-2000) +'.txt',';',' ');
    il manque rzshelltree1.SelectedPathName+'\'

    ce qui t"apprendra je l'espère à utiliser des variables locale et surtout
    Citation Envoyé par shailetroll
    edit2, form1, label16, combobox3... comment peux-tu t'y retrouver avec des nommages aussi peu pertinentes !
    à faire un nommage plus précis .

    J'avouerais n'avoir pas eu le courage de lire le post principal en première lecture car :
    1- cela n'a rien a voir avec une API (ou alors il faut m'expliquer où)
    2- la lecture du code était "étonnante" je pense que l'on a affaire en partie a du copier-coller pour datasetToTextFile
    3- "edit2.text contient le chemin choisi par l'utilisateur." pas vraiment en fait !

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

Discussions similaires

  1. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  2. [VB6] Interrompre toutes procédures
    Par lutin_vert dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/09/2002, 11h39
  3. Declaration Type ds une procedure
    Par Qwazerty dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2002, 09h09
  4. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/08/2002, 20h43
  5. Reprendre une procedure dans une autre ?
    Par Poisson Rouge dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2002, 22h51

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