Preciso fazer uma Importação com Arquivo TXT
Vi em um Video do Luciano Pimenta https://www.devmedia.com.br/articles/viewcomp.asp?comp=3571&hl=*exportação* como fazer Facilmente um Importação com Arquivo .xml
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.
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
Curtidas 0
Respostas
Maikel
15/10/2008
Olá
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:
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
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
Rodolfo Ramos
15/10/2008
Estou com um Problema, que o Programa está dando erro na Função PreencheCaracteres, Pelo que eu entendi ele aparece que não foi declarada essa Função. Bom eu não declarei ela mesmo, se precisar realmente declarar ela pode me explicar como porque eu nunca Fiz isso. Se for o caso eu posso até Colocar o Codigo Fonte em Um Link, mas se vc preferir. Estou Usando o Firebird 2.1 e o Delphi 2007.
GOSTEI 0
Maikel
15/10/2008
Essa função PreencheCaracteres realmente deverá ser declarada... faça o seguinte:
No topo da sua unit, declare dentro da seção Private ou Public da mesma a seguinte linha:
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:
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
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
Rodolfo Ramos
15/10/2008
Agora ele esta avisando que a Coluna não está declarada, eu criei um Banco que eu achei que Ficaria Parecido. COm os Campos CDScoluna1, CDSCOLUNA2 e CDSSOLUNA3. Mas agora aparece que a Coluna não foi declarada.
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.
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
Maikel
15/10/2008
Bom, quando falei em COLUNA1, COLUNA2, ... me referi aos fileds do seu banco de dados que vc tem adicionado ao clientdataset.
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
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
Rodolfo Ramos
15/10/2008
Estava tentando Fazer Uma Exportação, eu fiz ela Rodar. Mas Alem de não Gerar o Arquivo TXT, ele Trava o Micro. Pra fazer Importação não sei, mas pra Travar o Computador consegui Rapidinho.
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
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
Maikel
15/10/2008
O ´travar o micro´ é pq faltou o next cada vez que passa no laço, e dai ele nem chega até a parte que salva o txt.
Veja:
Att
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
Rodolfo Ramos
15/10/2008
Deu Tudo Certo, só faltava Isso mesmo. Agora eu vou precisar da Importação Também. Mas acho que nem vai mudar Muito.
GOSTEI 0