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:
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.