importar arquivo txt para base firebird
19/03/2011
0
ICJ1851;BMO797;C;AR168740431
DJF845;CMF889;C;AR685024888 mas ele esta gravando na tabela desta forma MO797;C;16874043JF845;CMF889;
AR6850248EJL41L405;C;AR6850 Gostaria de uma ajuda eu acho que não estou conseguinto formatar os dados na hora de enviar para a tabela grato se alguem poder me dar esta força
Luciano Farias
Posts
20/03/2011
Marco Salles
delimiter , delimitedText , StrictDelimiter da classe TStrings;
veja um exemplo
procedure TForm1.Button2Click(Sender: TObject); var ListaGrava,ListaLer:Tstrings; i:Integer; begin ListaGrava:=TStringList.Create; ListaLer:=TStringList.Create; try listaLer.LoadFromFile('temp.txt'); //Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar ListaGrava.Delimiter:=';'; listaGrava.StrictDelimiter:=True; for i := 0 to pred(ListaLer.Count) do begin ListaGrava.DelimitedText:=ListaLer.Strings[i]; showmessage(ListaGrava.Strings[0]+sLineBreak+ ListaGrava.Strings[1]+sLineBreak+ ListaGrava.Strings[2]+sLineBreak+ ListaGrava.Strings[3]); {********************************************** Aqui na verdade vc vai colocar a sua rotina de Exportação SeuDataSet.append; SeuDataSet.fieldByName('campo0').asstring:=ListaGrava.Strings[0]; SeuDataSet.fieldByName('campo1').asstring:=ListaGrava.Strings[1]; SeuDataSet.fieldByName('campo2').asstring:=ListaGrava.Strings[2]; SeuDataSet.fieldByName('campo3').asstring:=ListaGrava.Strings[3]; SeuDataSet.post; ****************************************************** } end; finally ListaGrava.Free; ListaLer.Free; end;
Algumas versões do anteriores do Delphi não tem a propriedade StrictDelimiter , ai tem que fazer algebrismo
para saber mais sobre as propriedades citada acima
http://marcosalles.wordpress.com/2011/02/01/delimitedtext-commandtext-delimiter-quotechar-que-coisa-complicada/
22/03/2011
Luciano Farias
IBQuery1.ParamByName('DATA_PASSAGEM').?????????????????????? ficaria como IBQuery1.ParamByName('CAVALO').AsString:=ListaGrava.Strings[1];
IBQuery1.ParamByName('REBOQUE').asstring:=ListaGrava.Strings[2];
IBQuery1.ParamByName('STATUS').asstring:=ListaGrava.Strings[3];
IBQuery1.ParamByName('MIC_ID').asstring:=ListaGrava.Strings[4];
23/03/2011
Marco Salles
do proprio sistema ??? ou de algum lugar especifico ???
23/03/2011
Luciano Farias
2011-03-22 07:49:12;BRD382;XXX111;v;AR000105970
2011-03-22 07:49:32;HZL3709;;v;AR000105855
2011-03-22 07:49:50;CZZ7313;DJC2132;v;AR000104161 nele eu tenho o Campo DataHora;placacavalo;placacarreta;status;documento, conforme sua rotina só não estou conseguindo importar o campo DATA_HORA; me da um erro gostaria de saber como posso formatar esta importação de data hora ja importando com a data correta segue rotina abaixo: IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into tab_teste');
IBQuery1.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
IBQuery1.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
if not IBTransaction1.InTransaction then
IBTransaction1.StartTransaction;
IBQuery1.Close;
// IBQuery1.ParamByName('DATA')??? (aqui não estou conseguinto formatar para gravar na base de dados) IBQuery1.ParamByName('CAVALO').AsString :=ListaGrava.Strings[1];
IBQuery1.ParamByName('REBOQUE').AsString:=ListaGrava.Strings[2];
IBQuery1.ParamByName('STATUS').AsString :=ListaGrava.Strings[3];
IBQuery1.ParamByName('MIC_ID').AsString :=ListaGrava.Strings[4];
IBQuery1.Open;
23/03/2011
Marco Salles
Vc mudou o arquivo , logico tem que mudar o codigo
var ListaGrava,ListaLer:Tstrings; data,linha:String; i,posini:Integer; begin ListaGrava:=TStringList.Create; ListaLer:=TStringList.Create; try listaLer.LoadFromFile('temp.txt'); //Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar ListaGrava.Delimiter:=';'; listaGrava.StrictDelimiter:=True; for i := 0 to pred(ListaLer.Count) do begin posini:=pos(';',ListaLer.Strings[i]); linha:=ListaLer.Strings[i]; data:=COPY(Linha,1,posini-1); copy(Linha,1,posIni-1); Linha:=copy(Linha,posini+1,length(Linha)); ListaGrava.DelimitedText:=Linha; showmessage(data++sLineBreak+ ListaGrava.Strings[0]+sLineBreak+ ListaGrava.Strings[1]+sLineBreak+ ListaGrava.Strings[2]+sLineBreak+ ListaGrava.Strings[3]); {********************************************** Aqui na verdade vc vai colocar a sua rotina de Exportação SeuDataSet.append; SeuDataSet.fieldByName('SeuCampoData').asstring:=ListaGrava.Strings[0]; SeuDataSet.fieldByName('campo0').asstring:=ListaGrava.Strings[0]; SeuDataSet.fieldByName('campo1').asstring:=ListaGrava.Strings[1]; SeuDataSet.fieldByName('campo2').asstring:=ListaGrava.Strings[2]; SeuDataSet.fieldByName('campo3').asstring:=ListaGrava.Strings[3]; SeuDataSet.post; ****************************************************** } end; finally ListaGrava.Free; ListaLer.Free; end;
ps) Aqui o data vai aparecer como 2011-03-22 07:48:17 , não sei se seu banco utiliza este
padrão para campos data ..Aqui esta Ano , mes , dia e alem disso o separador é um
Traço ... Caso o seu banco utilize outro tipo de formatação , basta formatar a
variavel data para que esta fique coerente com o seu banco . caso contrário terá um
erro na hora do post
02/05/2011
Luciano Farias
2011-04-12 07:29:00;IEZ9395;MAF0687;C;AR000135131 O arquivo que recebo tem este formato de data e a minha base de dados não aceita este formato então teria que converter para 12/04/2011 07:29:00, mas estou encontrando bastante dificuldade, gostaria que vc Analisasse meu codigo completo logo abaixo e fique a vontade para alterar o mesmo, tentei converter desta maneira conforme outro colega havia me dado esta dicas,mas tambem não houve sucesso; dm.qrImpE.ParamByName('DATA').AsDateTime:=StrToDateTime(ListaGrava.Strings[0],'yyyy-mm-dd hh:nn:ss' );
mais uma vez agradeço ; ------------------------------------------------------------------------------------- procedure TfrmImportar.sbImpEadiClick(Sender: TObject);
var
ListaGrava,ListaLer:Tstrings;
data,linha: String;
i,posini:Integer;
begin
if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
listaLer.LoadFromFile('C:\enLastre\eadisul.txt');//Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
ListaGrava.Delimiter:=';';
ListaGrava.StrictDelimiter:=True;
for i := 0 to pred(ListaLer.Count) do
begin
posini:= pos(';',ListaLer.Strings[i]);
linha:=listaler.Strings[i];
data:=copy(linha,1,posini-1);
copy(linha,1,posini-1);
linha :=copy(linha,posini+1,length(linha));
ListaGrava.DelimitedText:=Linha;
ListaGrava.DelimitedText:=ListaLer.Strings[i];
//rotina para importar dados tab_eadisul
dm.qrImpE.Close;
dm.qrImpE.SQL.Clear;
dm.qrImpE.SQL.Add('insert into tab_eadisul');
dm.qrImpE.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpE.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpE.Close;
dm.qrImpE.ParamByName('DATA').AsString := ListaGrava.Strings[0];
dm.qrImpE.ParamByName('CAVALO').AsString := ListaGrava.Strings[1];
dm.qrImpE.ParamByName('REBOQUE').AsString:= ListaGrava.Strings[2];
dm.qrImpE.ParamByName('STATUS').AsString := ListaGrava.Strings[3];
dm.qrImpE.ParamByName('MIC_ID').AsString := ListaGrava.Strings[4];
dm.qrImpE.Open;
dm.Transacao.Commit;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edImporta.Clear;
end;
end;
end;
03/05/2011
Emerson Nascimento
var
ListaGrava,ListaLer:Tstrings;
i:Integer;
sdatef: string;
cdates: char;
begin
sdatef := ShortDateFormat; // grava o formato de data original
cdates := DateSeparator; // grava o separador de data original
if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
ListaLer.LoadFromFile('C:\enLastre\eadisul.txt');//Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
ListaGrava.Delimiter:=';';
ListaGrava.StrictDelimiter:=True;
// gera a intrucao SQL para a insercao dos registros
dm.qrImpE.Close;
dm.qrImpE.SQL.Clear;
dm.qrImpE.SQL.Add('insert into tab_eadisul');
dm.qrImpE.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpE.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
// aqui está o 'segredo'
ShortDateFormat := 'yyyy-mm-dd'; // altera para o formato de data do arquivo
DateSeparator := '-'; // altera para o separador de data do arquivo
for i := 0 to pred(ListaLer.Count) do
begin
ListaGrava.DelimitedText := ListaLer.Strings[i];
//rotina para importar dados tab_eadisul
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpE.Close;
dm.qrImpE.ParamByName('DATA').AsSQLTimeStamp := StrToSQLTimeStamp(ListaGrava.Strings[0]);
dm.qrImpE.ParamByName('CAVALO').AsString := ListaGrava.Strings[1];
dm.qrImpE.ParamByName('REBOQUE').AsString:= ListaGrava.Strings[2];
dm.qrImpE.ParamByName('STATUS').AsString := ListaGrava.Strings[3];
dm.qrImpE.ParamByName('MIC_ID').AsString := ListaGrava.Strings[4];
dm.qrImpE.Open;
dm.Transacao.Commit;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edImporta.Clear;
ShortDateFormat := sdatef; // retorna ao formato de data original
DateSeparator := cdates; // retorna ao separador de data original
end;
end;
end;
03/05/2011
Luciano Farias
03/05/2011
Emerson Nascimento
eu testei aquele código, com a data no formato '2001-04-21 07:29:00', utilizando banco de dados Firebird 2.1 com campo do tipo timestamp.
03/05/2011
Luciano Farias
ListaGrava,ListaLer:Tstrings;
data,linha: String;
i,posini:Integer;
begin
if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
listaLer.LoadFromFile('C:\enLastre\Argentina.txt'); //Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
ListaGrava.Delimiter:= ';';
for i := 0 to pred(ListaLer.Count) do
begin
posini:= pos(';',ListaLer.Strings[i]);
linha:= listaler.Strings[i];
data:=copy(linha,1,posini-1);
copy(linha,1,posini-1);
linha :=copy(linha,posini+1,length(linha));
ListaGrava.DelimitedText:=Linha;
ListaGrava.DelimitedText:=ListaLer.Strings[i];
//rotina para importar dados tab_argentina
dm.qrImpA.Close;
dm.qrImpA.SQL.Clear;
dm.qrImpA.SQL.Add('insert into tab_Argentina');
dm.qrImpA.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpA.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpA.Close;
dm.qrImpA.ParamByName('DATA').AsString :=ListaGrava.Strings[0];
dm.qrImpA.ParamByName('CAVALO').AsString :=ListaGrava.Strings[1];
dm.qrImpA.ParamByName('REBOQUE').AsString:=ListaGrava.Strings[2];
dm.qrImpA.ParamByName('STATUS').AsString :=ListaGrava.Strings[3];
dm.qrImpA.ParamByName('MIC_ID').AsString :=ListaGrava.Strings[4];
dm.qrImpA.Open;
dm.Transacao.Commit;
dm.qrImpA.Close;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edimporta.Clear;
end;
end;
end; ------------------------------------------------------------------------------------------ Aqui é seu codigo que havia enviado pelo forum para mim adaptei na minha rotina e apresentou o erro que postei anteriormente ------------------------------------------------------------------------------------------ var
ListaGrava,ListaLer:Tstrings;
i:Integer;
data,linha: String;
sdatef: string;
cdates: char;
begin
sdatef := ShortDateFormat; // grava o formato de data original
cdates := DateSeparator; // grava o separador de data original if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
ListaLer.LoadFromFile('C:\enLastre\eadisul.txt');//Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
ListaGrava.Delimiter:=';';
// ListaGrava.StrictDelimiter:=True; // gera a intrucao SQL para a insercao dos registros
dm.qrImpE.Close;
dm.qrImpE.SQL.Clear;
dm.qrImpE.SQL.Add('insert into tab_eadisul');
dm.qrImpE.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpE.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)'); // aqui está o 'segredo'
ShortDateFormat := 'yyyy-mm-dd'; // altera para o formato de data do arquivo
DateSeparator := '-'; // altera para o separador de data do arquivo for i := 0 to pred(ListaLer.Count) do
begin
ListaGrava.DelimitedText := ListaLer.Strings[i];
//rotina para importar dados tab_eadisul
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpE.Close;
dm.qrImpE.ParamByName('DATA').AsSQLTimeStamp := StrToSqlTimeStamp(ListaGrava.Strings[0]);
dm.qrImpE.ParamByName('CAVALO').AsString := ListaGrava.Strings[1];
dm.qrImpE.ParamByName('REBOQUE').AsString := ListaGrava.Strings[2];
dm.qrImpE.ParamByName('STATUS').AsString := ListaGrava.Strings[3];
dm.qrImpE.ParamByName('MIC_ID').AsString := ListaGrava.Strings[4];
dm.qrImpE.Open;
dm.Transacao.Commit;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edImporta.Clear;
ShortDateFormat := sdatef; // retorna ao formato de data original
DateSeparator := cdates; // retorna ao separador de data original
end;
end;
end; ------------------------------------------------------------------------------------------------- Aqui esta o conteudo do meu arquivo txt, gostaria de salientar para vc que entre a data e a hora tem um espaço, este espaço tambem esta me apresentando erro na hora da importação; este então é o arquivo maldito que quero importar para a tabela criada no firebird e não estou conseguindo; 2011-04-12 07:29:00;IEZ9395;MAF0687;C;AR000135131
2011-04-12 07:29:00;IEZ9395;MAF0687;C;AR000135131
2011-04-12 07:29:24;EFW0724;EFW0714;V;AR000135103
2011-04-12 07:30:01;DJF6492;DTB9722;V;AR000135070
2011-04-12 07:30:30;GLT275;HYJ243;V;AR000135152
2011-04-12 07:31:04;IML487;IIV565;V;AR000135161
2011-04-12 07:31:31;GYQ174;EUJ970;V;AR000135708
2011-04-12 07:31:52;FPG525;FQJ230;V;AR000135596
2011-04-12 07:32:23;EDX502;BTB575;V;AR000135727
2011-04-12 07:32:43;IGY3129;IHS0793;V;AR000135118
2011-04-12 07:33:01;ECL306;BRG104;V;AR000135672
2011-04-12 07:39:46;CRD997;CKB852;V;AR000135648
2011-04-12 07:40:06;HLD260;HLD259;V;AR000135714
2011-04-12 07:52:23;CQH929;HDT119;V;AR000135720
2011-04-12 07:52:49;JBR541;JAL215;V;AR000135707
2011-04-12 07:54:29;TVE915;RXF929;V;AR000135671
2011-04-12 07:54:46;WAI843;WCN215;V;AR000134534
2011-04-12 07:55:07;IJO976;HPK145;V;AR000134678
2011-04-12 07:55:26;WZN962;CRC700;V;AR000134633
2011-04-12 07:55:54;GTG849;GVY560;V;AR000135532 --------------------------------------------------------------------------------------------------------- aqui esta a estrutura do meu banco de dados que utilizo com firebird 2.1 + Delphi7 --------------------------------------------------------------------------------------------------------- TAB_EADISUL (
DATA TIMESTAMP,
CAVALO VARCHAR(10) CHARACTER SET WIN1251 COLLATE WIN1251,
REBOQUE VARCHAR(10) CHARACTER SET WIN1251 COLLATE WIN1251,
STATUS VARCHAR(2) CHARACTER SET WIN1251 COLLATE WIN1251,
MIC_ID VARCHAR(12) CHARACTER SET WIN1251 COLLATE WIN1251); --------------------------------------------------------------------------------------------------- Se voce precisa de mais alguma informação referente ao projetinho que estou criando, meu email de contato é: lmelo@eadisul.com.br agradeço muito se puder me ajudar a verificar onde estou pecando e se voce testou o codigo e funcionou porque, que na minha rotina não funciona. pode ser algum detalhe que não estou conseguindo desenvolver; fico no aguardo;
03/05/2011
Emerson Nascimento
ListaGrava,ListaLer:Tstrings;
i:Integer;
data,linha: String;
sdatef: string;
cdates: char;
begin
sdatef := ShortDateFormat; // grava o formato de data original
cdates := DateSeparator; // grava o separador de data original
if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
ListaLer.LoadFromFile('C:\enLastre\eadisul.txt');//Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
ListaGrava.Delimiter:=';';
ListaGrava.StrictDelimiter:=True; // *** PORQUE ESTA LINHA ESTA DESABILIDATA ????? ***
// gera a intrucao SQL para a insercao dos registros
dm.qrImpE.Close;
dm.qrImpE.SQL.Clear;
dm.qrImpE.SQL.Add('insert into tab_eadisul');
dm.qrImpE.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpE.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
// aqui está o 'segredo'
ShortDateFormat := 'yyyy-mm-dd'; // altera para o formato de data do arquivo
DateSeparator := '-'; // altera para o separador de data do arquivo
for i := 0 to pred(ListaLer.Count) do
begin
ListaGrava.DelimitedText := ListaLer[i];
//rotina para importar dados tab_eadisul
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpE.Close;
dm.qrImpE.ParamByName('DATA').AsSQLTimeStamp := StrToSqlTimeStamp(ListaGrava[0]);
dm.qrImpE.ParamByName('CAVALO').AsString := ListaGrava[1];
dm.qrImpE.ParamByName('REBOQUE').AsString := ListaGrava[2];
dm.qrImpE.ParamByName('STATUS').AsString := ListaGrava[3];
dm.qrImpE.ParamByName('MIC_ID').AsString := ListaGrava[4];
dm.qrImpE.Open;
dm.Transacao.Commit;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edImporta.Clear;
ShortDateFormat := sdatef; // retorna ao formato de data original
DateSeparator := cdates; // retorna ao separador de data original
end;
end;
end;
se o seu StringList não possuir a propriedade StrictDelimiter você precisará criar uma rotina para separar os dados. a StringList não vai funcionar para você.
03/05/2011
Luciano Farias
03/05/2011
Emerson Nascimento
no seu caso será necessário criar uma rotina para fazer a separação da string.
tente dessa forma:
var
ListaGrava,ListaLer:Tstrings;
i:Integer;
data,linha: String;
sdatef: string;
cdates: char;
procedure SeparaString(str: String; delimiter: char; var lista: TStrings);
var i: integer;
begin
lista.Clear;
while (str <> '') do
begin
i := pos(delimiter, str);
if (i > 0) then
lista.Add(copy(str,1,i-1))
else
begin
lista.Add(str);
i := Length(str);
end;
Delete(str, 1, i);
end;
end;
begin
sdatef := ShortDateFormat; // grava o formato de data original
cdates := DateSeparator; // grava o separador de data original
if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
ListaLer.LoadFromFile('C:\enLastre\eadisul.txt');//Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
// gera a intrucao SQL para a insercao dos registros
dm.qrImpE.Close;
dm.qrImpE.SQL.Clear;
dm.qrImpE.SQL.Add('insert into tab_eadisul');
dm.qrImpE.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpE.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
// aqui está o 'segredo'
ShortDateFormat := 'yyyy-mm-dd'; // altera para o formato de data do arquivo
DateSeparator := '-'; // altera para o separador de data do arquivo
for i := 0 to pred(ListaLer.Count) do
begin
SeparaString(ListaLer[i], ';', ListaGrava);
//rotina para importar dados tab_eadisul
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpE.Close;
dm.qrImpE.ParamByName('DATA').AsSQLTimeStamp := StrToSqlTimeStamp(ListaGrava[0]);
dm.qrImpE.ParamByName('CAVALO').AsString := ListaGrava[1];
dm.qrImpE.ParamByName('REBOQUE').AsString := ListaGrava[2];
dm.qrImpE.ParamByName('STATUS').AsString := ListaGrava[3];
dm.qrImpE.ParamByName('MIC_ID').AsString := ListaGrava[4];
dm.qrImpE.Open;
dm.Transacao.Commit;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edImporta.Clear;
ShortDateFormat := sdatef; // retorna ao formato de data original
DateSeparator := cdates; // retorna ao separador de data original
end;
end;
end;
note que não há mais qualquer referência ao delimitador da StringList.
04/05/2011
Luciano Farias
var ListaGrava,ListaLer:Tstrings; data,linha:String; i,posini:Integer; begin ListaGrava:=TStringList.Create; ListaLer:=TStringList.Create; try listaLer.LoadFromFile('temp.txt'); //Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar ListaGrava.Delimiter:=';'; listaGrava.StrictDelimiter:=True; for i := 0 to pred(ListaLer.Count) do begin posini:=pos(';',ListaLer.Strings[i]); linha:=ListaLer.Strings[i]; data:=COPY(Linha,1,posini-1); ## Como eu formataria aqui a variavel data para (dd/mm/yyy hh:mm:ss) copy(Linha,1,posIni-1); Linha:=copy(Linha,posini+1,length(Linha)); ListaGrava.DelimitedText:=Linha; showmessage(data++sLineBreak+ ListaGrava.Strings[0]+sLineBreak+ ListaGrava.Strings[1]+sLineBreak+ ListaGrava.Strings[2]+sLineBreak+ ListaGrava.Strings[3]); {********************************************** Aqui na verdade vc vai colocar a sua rotina de Exportação SeuDataSet.append; SeuDataSet.fieldByName('SeuCampoData').asstring:=ListaGrava.Strings[0]; SeuDataSet.fieldByName('campo0').asstring:=ListaGrava.Strings[0]; SeuDataSet.fieldByName('campo1').asstring:=ListaGrava.Strings[1]; SeuDataSet.fieldByName('campo2').asstring:=ListaGrava.Strings[2]; SeuDataSet.fieldByName('campo3').asstring:=ListaGrava.Strings[3]; SeuDataSet.post; ****************************************************** } end; finally ListaGrava.Free; ListaLer.Free; end;
ps) Aqui o data vai aparecer como 2011-03-22 07:48:17 , não sei se seu banco utiliza este
padrão para campos data ..Aqui esta Ano , mes , dia e alem disso o separador é um
Traço ... Caso o seu banco utilize outro tipo de formatação , basta formatar a
variavel data para que esta fique coerente com o seu banco . caso contrário terá um
erro na hora do post
04/05/2011
Emerson Nascimento
você testou o código que eu te passei ???
var
ListaGrava,ListaLer:Tstrings;
i:Integer;
data,linha: String;
sdatef: string;
cdates: char;
procedure SeparaString(str: String; delimiter: char; var lista: TStrings);
var i: integer;
begin
lista.Clear;
while (str <> '') do
begin
i := pos(delimiter, str);
if (i > 0) then
lista.Add(copy(str,1,i-1))
else
begin
lista.Add(str);
i := Length(str);
end;
Delete(str, 1, i);
end;
end;
begin
sdatef := ShortDateFormat; // grava o formato de data original
cdates := DateSeparator; // grava o separador de data original
if edImporta.Text <> '' then
begin
ListaGrava:=TStringList.Create;
ListaLer:=TStringList.Create;
try
ListaLer.LoadFromFile('C:\enLastre\eadisul.txt');//Aqui vc vai colocar o caminho onde esta o Arquivo Txt que se quer exportar
// gera a intrucao SQL para a insercao dos registros
dm.qrImpE.Close;
dm.qrImpE.SQL.Clear;
dm.qrImpE.SQL.Add('insert into tab_eadisul');
dm.qrImpE.SQL.Add('(DATA,CAVALO,REBOQUE,STATUS,MIC_ID) VALUES');
dm.qrImpE.SQL.Add('(:DATA,:CAVALO,:REBOQUE,:STATUS,:MIC_ID)');
// aqui está o 'segredo'
ShortDateFormat := 'yyyy-mm-dd'; // altera para o formato de data do arquivo
DateSeparator := '-'; // altera para o separador de data do arquivo
for i := 0 to pred(ListaLer.Count) do
begin
SeparaString(ListaLer[i], ';', ListaGrava); // nova rotina para separar a string
//rotina para importar dados tab_eadisul
if not dm.Transacao.InTransaction then
dm.Transacao.StartTransaction;
dm.qrImpE.Close;
dm.qrImpE.ParamByName('DATA').AsSQLTimeStamp := StrToSqlTimeStamp(ListaGrava[0]);
dm.qrImpE.ParamByName('CAVALO').AsString := ListaGrava[1];
dm.qrImpE.ParamByName('REBOQUE').AsString := ListaGrava[2];
dm.qrImpE.ParamByName('STATUS').AsString := ListaGrava[3];
dm.qrImpE.ParamByName('MIC_ID').AsString := ListaGrava[4];
dm.qrImpE.Execute;
dm.Transacao.Commit;
end;
finally
ListaGrava.Free;
ListaLer.Free;
edImporta.Clear;
ShortDateFormat := sdatef; // retorna ao formato de data original
DateSeparator := cdates; // retorna ao separador de data original
end;
end;
end;
Clique aqui para fazer login e interagir na Comunidade :)