Veja se isso ajuda. São duas funções. DatasetToXLS (para Excel) e DatasetToTXT (para texto)
procedure DataSetToXLS(DataSet: TDataSet; FileName: string); var Excel: Variant; i: Integer; bkmark: TBookmark; begin Dataset.DisableControls; bkmark := DataSet.GetBookmark; DataSet.First; Excel := CreateOleObject('Excel.Application'); Excel.Visible := false; Excel.Workbooks.Add; for i := 0 to Dataset.Fields.Count - 1 do begin Excel.WorkBooks[1].Sheets[1].Cells[1, i + 1] := DataSet.Fields.Fields[I].DisplayLabel; end; while not DataSet.Eof do begin for i := 0 to Dataset.Fields.Count - 1 do begin case Dataset.Fields.Fields[i].DataType of ftString: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsString; ftSmallint: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsInteger; ftInteger: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsInteger; ftWord: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsFloat; ftBoolean: if DataSet.Fields[i].AsBoolean then Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := 'Sim' else Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := 'Não'; ftAutoInc: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsInteger; ftFloat: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsFloat; ftCurrency: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsCurrency; ftBCD: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsFloat; ftDate: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsDateTime; ftTime: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsDateTime; ftDateTime: Excel.WorkBooks[1].Sheets[1].Cells[DataSet.RecNo + 1, i + 1] := DataSet.Fields[i].AsDateTime; end; end; DataSet.Next; end; DataSet.GotoBookmark(bkmark); DataSet.EnableControls; DataSet.FreeBookmark(bkmark); Excel.WorkBooks[1].SaveAs(FileName); Excel.WorkBooks[1].Close; end; procedure DataSetToTXT(Dataset: TDataSet; FileName: string); var bkmark: TBookmark; i: Integer; RecordBuffer, separator: string; Arquivo: TStringList; begin Arquivo := TStringList.Create; Dataset.DisableControls; bkmark := DataSet.GetBookmark; DataSet.First; Separator := ';'; while not DataSet.EOF do begin RecordBuffer := ''; for i := 0 to DataSet.FieldCount - 1 do case Dataset.Fields.Fields[i].DataType of ftString: RecordBuffer := RecordBuffer + DataSet.Fields[i].AsString + Separator; ftSmallint: RecordBuffer := RecordBuffer + IntToStr(DataSet.Fields[i].AsInteger) + Separator; ftInteger: RecordBuffer := RecordBuffer + IntToStr(DataSet.Fields[i].AsInteger) + Separator; ftWord: RecordBuffer := RecordBuffer + FloatToStr(DataSet.Fields[i].AsInteger) + Separator; ftBoolean: if DataSet.Fields[i].AsBoolean then RecordBuffer := RecordBuffer + 'Y' + Separator else RecordBuffer := RecordBuffer + 'N' + Separator; ftAutoInc: RecordBuffer := RecordBuffer + IntToStr(DataSet.Fields[i].AsInteger) + Separator; ftFloat: RecordBuffer := RecordBuffer + FloatToStr(DataSet.Fields[i].AsInteger) + Separator; ftCurrency: RecordBuffer := RecordBuffer + FloatToStr(DataSet.Fields[i].AsInteger) + Separator; ftBCD: RecordBuffer := RecordBuffer + FloatToStr(DataSet.Fields[i].AsInteger) + Separator; ftDate: RecordBuffer := RecordBuffer + FormatDateTime('YYYY-MM-DD', DataSet.Fields[i].AsDateTime) + Separator; ftTime: RecordBuffer := RecordBuffer + FormatDateTime('HH:MM:SS', DataSet.Fields[i].AsDateTime) + Separator; ftDateTime: RecordBuffer := RecordBuffer + FormatDateTime('YYYY-MM-DD HH:MM:SS', DataSet.Fields[i].AsDateTime) + Separator; else end; RecordBuffer := RecordBuffer + #13; Arquivo.Add(RecordBuffer); DataSet.Next; end; //while DataSet.GotoBookmark(bkmark); DataSet.EnableControls; DataSet.FreeBookmark(bkmark); Arquivo.SaveToFile(FileName); Arquivo.Free; end; De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de José Mário Silva Guedes Enviada em: terça-feira, 14 de julho de 2009 11:25 Para: Delphi BR - Grupo de Discussão Assunto: [delphi-br] DataSet para texto Olá amigos, estou para desenvolver uma rotina com o objetivo de mostrar em texto o conteúdo de um DataSet, para efeitos de LOG. Queria saber se alguém conhece alguma rotina pronta no universo para me ajudar... ;( -- José Mário Silva Guedes Analista Programador Delphi [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]