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]

Responder a