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; |
Partager