ty i made something like this and work good:

Code:
procedure TForm1.SaveReport(const id_report: string);   
var
    sSql,s, sCampi: String;
    F1: Textfile;
begin




    try
// - STEP 010
        sSql :='SELECT ......something ';


        setQry(sSql,qry_dyn);
        qry_dyn.Active := True;
        qry_dyn.First;

        Savedialog1.DefaultExt:='*.csv';
        SaveDialog1.Filter := 'Comma separeted files (*.csv)|*.CSV|Text files (*.txt)|*.TXT';

        if SaveDialog1.Execute then
             AssignFile(F1, SaveDialog1.Filename)
        else Exit;

        Rewrite(F1);  

        
        while not qry_dyn.Eof do
            begin
              writeln(F1,
              qry_dyn.FieldByName('a').AsString + '|' +
              qry_dyn.FieldByName('b').AsString + '|' +
              //.....
              qry_dyn.FieldByName('z').AsString);

              qry_dyn.Next;
            end; //while 
        if (Debug_enable > 1)  then caricaLogProcedure('TForm1.SaveReport;','010','OK','');
    except
        try
                Closefile(F1);
        except
                //errore nella chiususa file
                ShowMessage('Errore duranta la scrittura del tipo1, impossibile chiudere il file');
        end;
        ShowMessage('Bugggone!');
        if (Debug_enable > 0)  then caricaLogProcedure('TForm1.SaveReport;','010','KO',sSql);
    end;

    Closefile(F1);


end;