importar arquivo txt para base firebird
Bom dia Pessoal,
estou com um probleminha na hora de importar meu arquivo dados.txt para minha tabela; até que esta importando os arquivos o problema que não esta salvando com os campos corretamente esta desconfigurado;
Por exemplo:
este é meu arquivo txt que gostaria de esportar desta maneira
IFY1370;BNU024;C;AR168740432
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
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
Curtidas 0
Respostas
Marco Salles
19/03/2011
luciano , vc pode quebrar as strings em um Array de Strings . Isto pode ser fetio utilizando as propriedades
delimiter , delimitedText , StrictDelimiter da classe TStrings;
veja um exemplo
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/
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/
GOSTEI 0
Luciano Farias
19/03/2011
Show de bola Marco Antonio;
Funcionou perfeitamente, sua estrutura ja estou importando para dentro da minha base de dados, muito obrigado pela força.
agora me diga uma coisa e se eu quiser importar junto uma data com este formato 2010-12-01 10:19:00;
seria possivel, rotina de esportação ficaria como;
mas até aqui muito obrigado novamente;
IBQuery1.Close;
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];
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];
GOSTEI 0
Marco Salles
19/03/2011
Esta data vem de onde ???
do proprio sistema ??? ou de algum lugar especifico ???
do proprio sistema ??? ou de algum lugar especifico ???
GOSTEI 0
Luciano Farias
19/03/2011
Marco;
Esta data estou tentando importar junto com aquele arquivo txt que havia solicitado ajuda, por exemplo:
este é meu arquivo dados.txt
2011-03-22 07:48:17;IWS694;BWL246;v;AR000105984
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;
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;
GOSTEI 0
Marco Salles
19/03/2011
hummm
Vc mudou o arquivo , logico tem que mudar o codigo
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
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
GOSTEI 0
Luciano Farias
19/03/2011
Caro Marco Antonio ainda estou na briga para finalizar este meu projetinho de importação de arquivo txt, ainda não consegui converter a data conforme as linha do meu arquivo a baixo;
2011-04-12 07:29:00;IEZ9395;MAF0687;C;AR000135131
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;
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;
GOSTEI 0
Emerson Nascimento
19/03/2011
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;
GOSTEI 0
Luciano Farias
19/03/2011
Bom Dia meu amigo obrigado por atender meu pedido de ajuda, mas estou lhe mandando o erro
que gerou, pois adaptei seu codigo no projeto e mostrou este erro,
o que poderia ser...
desde ja agrgadeço
GOSTEI 0
Emerson Nascimento
19/03/2011
publique o seu código, o conteúdo do arquivo, o banco de dados utilizado e o tipo do campo.
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.
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.
GOSTEI 0
Luciano Farias
19/03/2011
Bom dia Amigo conforme solicitou-me, segue as informações
______________________________________________________________________________________
Este é o meu codigo que estava utilizando onde eu não estava conseguindo formatar a Data do arquivo txt
______________________________________________________________________________________
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\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;
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;
GOSTEI 0
Emerson Nascimento
19/03/2011
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; // *** 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ê.
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ê.
GOSTEI 0
Luciano Farias
19/03/2011
Meu amigo esta linha eu desabilitei pois ela trava o codigo pois fica solicitando que eu declare alguma variavel na uses, o que eu declaro na uses da unit,
Conforme as informações que lhe passei voce testou ai e funcionou a rotina
ListaGrava.StrictDelimiter:=True; // *** PORQUE ESTA LINHA ESTA DESABILIDATA ????? ***
GOSTEI 0
Emerson Nascimento
19/03/2011
como eu disse, sem a propriedade StrictDelimiter não será possível fazer o que você precisa, pois o stringList usa o espaço como separador - além do caractere que você definiu.
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.
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.
GOSTEI 0
Luciano Farias
19/03/2011
Vc mudou o arquivo , logico tem que mudar o codigo
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
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
GOSTEI 0
Emerson Nascimento
19/03/2011
não entendi nada..... eu mudei o arquivo ????
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;
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;
GOSTEI 0
Emerson Nascimento
19/03/2011
então, /BeginEnd\, deu certo? conseguiu importar seu arquivo texto?
GOSTEI 0
Luciano Farias
19/03/2011
Emerson
valeu mesmo pela força, sua dicas foram de grande valia, mas consegui formatar desta forma
criei uma variavel
Data:TDateTime
e Joguei o conteuda da minha linha do txt onde havia a data e converti com esta rotina
funcionou que foi uma Beleza e ta importando a data como eu queria;
Data:= strtodateTime(copy(linha,9,2)+'/'+copy(linha,6,2)+'/'+copy(linha,1,4)+''+copy(linha,12,8));
Grande Abraço
Eu teria outra duvida, se derrepente vc puder me dar mais esta ajudinha seria mais ou menos assim
tenho uma consulta em uma TABELA "A" por exemplo que jogarei para um dbgrid e deste dbgrid eu gostaria de fazer uma rotina de Isert com IBquery na TABELA "B" por exemplo, todas as duas tabelas tem campos iguais
fico no aguardo se puder dar uma otima dica
GOSTEI 0
José
19/03/2011
Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
Fernando Rodrigo
19/03/2011
vc poderá utilizar direto no firebird
INSERTEX INTO CLIENTE FROM CSV C:\CLIENTE.CSV DELIMITER ;
INSERTEX INTO CLIENTE FROM CSV C:\CLIENTE.CSV DELIMITER ;
GOSTEI 0