Fórum Preciso fazer uma Importação com Arquivo TXT #365068
15/10/2008
0
Tenho esse Codigo Fonte
if SaveTextFileDialog1.Execute then
ClientDataSetVisita.SaveToFile(SaveTextFileDialog1.FileName, dfbinary);
Preciso Fazer a Mesma Exportação, mas dessa vez com Arquivo de Texto. Eu só consigo colocar Arquivos Binários e XML. Se souber como trocar ou como eu faço para ver a Lista de Opções de Formatos que eu posso Usar.
Rodolfo Ramos
Curtir tópico
+ 0Posts
15/10/2008
Maikel
No caso do ClientDataSet, se quiser exportar o mesmo para arquivo texto creio que terá que construir uma rotina que irá percorrer todos os registros, de um a um, selecionando as informações e escrevendo-as no arquivo de texto.
Para fazer isso, cria uma rotina:
var List : TSringList; Linha : String; begin List := TStringList.Create; ClientDataSet1.First; While not ClientDataSet1.Eof do begin Linha := ´´; Linha := PreencheCaracteres(CDSColuna1.AsString,10); Linha := Linha + PreencheCaracteres(CDSColuna2.AsString,50); Linha := Linha + PreencheCaracteres(CDSColuna3.AsString,20); List.Add(Linha); end; List.SaveToFile(´C:\Lista.txt´); //PreencheCaracteres neste caso que aparece é uma função, que recebe um texto e um tamanho de caracteres. Se o Legth do texto for menor que a quantidade, completa o resto com espaço.
Bom, ve ai se isso resolve seu problema, não testei o código no Delphi, faz um teste ai e post o resultado.
Att
Gostei + 0
15/10/2008
Rodolfo Ramos
Gostei + 0
15/10/2008
Maikel
No topo da sua unit, declare dentro da seção Private ou Public da mesma a seguinte linha:
function PreencheCaracteres(Texto: String; Qtde: Integer):String;
Agora com o cursor posicionado sobre a mesma, utilize as teclas Shift+Ctrl+C para que o Delphi faça a implementaçao da sua funçao. Adicione o código abaixo ao corpo da sua function:
var I: Integer; begin Result := Texto; if Length(Texto) < Qtde then for I := 0 to (Qtde-Length(Texto)) - 1 do Result := Result + ´ ´; end;
Nessa função, o primeiro parametro recebe o texto e o segundo a quantidade de caracteres que deseja preencher para o mesmo.
O restante permanecerá a mesma coisa. Faça o teste e qualquer coisa, post o resultado.
att
Gostei + 0
15/10/2008
Rodolfo Ramos
unit Tela;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WideStrings, FMTBcd, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB,
DBClient, Provider, SqlExpr;
type
TForm1 = class(TForm)
SQLConnection1: TSQLConnection;
SQLQuery1: TSQLQuery;
SQLQuery1CDSCOLUNA1: TStringField;
SQLQuery1CDSCOLUNA2: TStringField;
SQLQuery1CDSCOLUNA3: TStringField;
DataSetProvider1: TDataSetProvider;
ClientDataSet1: TClientDataSet;
ClientDataSet1CDSCOLUNA1: TStringField;
ClientDataSet1CDSCOLUNA2: TStringField;
ClientDataSet1CDSCOLUNA3: TStringField;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
function PreencheCaracteres(Texto: String; Qtde: Integer):String;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(0);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
List: TStringList;
Linha : String;
begin
List := TStringList.Create;
ClientDataSet1.First;
While not ClientDataSet1.Eof do
begin
Linha := ´´;
Linha := PreencheCaracteres (CDSColuna1.asstring,10);
Linha := Linha + PreencheCaracteres(CDSColuna2.AsString,50);
Linha := Linha + PreencheCaracteres(CDSColuna3.AsString,20);
List.Add(Linha);
end;
List.SaveToFile(´C:\Lista.txt´);
//PreencheCaracteres neste caso que aparece é uma função, que recebe um texto e um tamanho de caracteres. Se o Legth do texto for menor que a quantidade, completa o resto com espaço.
function TForm1.PreencheCaracteres(Texto: String; Qtde: Integer): String;
var
I: Integer;
begin
Result := Texto;
if Length(Texto) < Qtde then
for I := 0 to (Qtde-Length(Texto)) - 1 do
Result := Result + ´ ´;
end;
end.
Gostei + 0
15/10/2008
Maikel
Faça o seguinte, no SQLDataSet, adicione a SQL ´Select * from SuaTabela´.
Adicione o dataSetProvider ligado ao SQLDataSet
Adicione o ClientDataSet ao DataSepProvider
Duplo clique sobre o ClientDataSet p/ abrir o Fields Editor e com o botao direito nele, Add All Fileds. São estas as colunas que me referi.... o nomes que ele colocar ali no FieldsEditor vc deverá usar na exportação dos registros para o arquivo de texto.
Ok?
Att
Gostei + 0
15/10/2008
Rodolfo Ramos
Eu Achei estranho, mas se o Modo de fazer for esse mesmo, eu vejo porque o Programa está Travando o Micro. Eu Acho que ele está dando Loop Infinito.
http://www.fileurls.com/download.ashx?id=vxmeax
Gostei + 0
15/10/2008
Maikel
Veja:
While not ClientDataSet1.Eof do begin Linha := ´´; Linha := PreencheCaracteres (CDSColuna1.asstring,10); Linha := Linha + PreencheCaracteres(CDSColuna2.AsString,50); Linha := Linha + PreencheCaracteres(CDSColuna3.AsString,20); List.Add(Linha); [b]ClientDataSet1.Next;[/b] end;
Att
Gostei + 0
15/10/2008
Rodolfo Ramos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)