Yo utilizo este:
Código Delphi
[-]
procedure TOdExportaDatos.DataSetToCsv(pDataSet : TDataSet; psRutaFichero : String);
var
i : Integer;
voFichero : TStringList;
vsLinea : String;
vsBookMark : TBookmarkStr;
begin
vsBookMark := pDataSet.Bookmark;
voFichero := nil;
try
voFichero := TStringList.Create;
vsLinea := '';
for i := 0 to pDataSet.FieldCount - 1 do
if pDataSet.Fields[i].Visible then
vsLinea := vsLinea + '"' + pDataSet.Fields[i].DisplayName + '",';
voFichero.Add(vsLinea);
pDataSet.DisableControls;
pDataSet.First;
while not pDataSet.Eof do
begin
vsLinea := '';
for i := 0 to pDataSet.FieldCount - 1 do
if pDataSet.Fields[i].Visible then
vsLinea := vsLinea + '"' + pDataSet.Fields[i].AsString + '",';
voFichero.Add(vsLinea);
pDataSet.Next;
end;
voFichero.SaveToFile(psRutaFichero);
finally
FreeAndNil(voFichero);
pDataSet.Bookmark := vsBookMark;
pDataSet.EnableControls;
end;
end;
Se llama de la siguiente manera:
DataSetToCsv(dsXXXX.DataSet, 'c:\Fichero.csv');
... o bien utilizando un SaveDialog.