Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcelo Ribamar

Importação de arquivo CSV

Recommended Posts

Pessoal que pode me ajudar, estou tentando fazer importação de um arquivo CSV, que ocorrerá mensalmente no sistema, estou usando SQL como tabelas o código está a seguir, já fiz funcionar mas está danda problema não sei o que está ocorrendo. alguém sabe? ou outra forma de fazer isso.

 

procedure TImpNF.CustoMateriaPrimaClick(Sender: TObject);

var

Arq: TextFile;

Texto, Pla, Cod, Eco, Pre : string;

I : Integer;

function MV : String;

var

monta:String;

begin

monta:='';

inc(I);

while texto <> '|' do { DEFINE O FINAL DA LINHA }

begin

if texto= ';' then { DEFINE DIVISÃO DE CAMPOS DO ARQ A IMPORTAR }

break;

monta := monta + texto;

inc(I);

end;

result := monta;

end;

 

begin

if OpenDialog1.Execute then

begin

screen.Cursor:= crHourGlass;

AssignFile(Arq,OpenDialog1.FileName);

reset(Arq);

if not EOF(Arq) then

repeat

ReadLn(Arq,Texto);

with Cust_M_Prima do

begin

i:=0;

Label7.caption := mv;

Label8.caption := mv;

Label9.caption := mv;

if not Locate('Cad_CM_Planta',Label7.Caption,[]) and

not Locate('Cad_CM_Codigo',Label8.Caption,[]) and

not Locate('Cad_CM_Economics',Label9.Caption,[]) then

begin

Append;

FieldByName('Cad_CM_Planta').AsString := mv;

FieldByName('Cad_CM_Codigo').asString := mv;

FieldByName('Cad_CM_Economics').AsString := mv;

FieldByName('Cad_CM_Preco').asString := mv;

Post;

end;

end;

until EOF(Arq);

end;

CloseFile(Arq);

Cad_MPrima.Close;

Screen.Cursor:= crDefault;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho no erro mostra este "â...

Já tentou rodar passo-a-passo e pegar a linha de erro ? Ou localizar dentro do arquivo se tem "â para gerar o erro ?

A rotina está correta? existe uma maneira mais certa ou segura de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quais são os tipos de campos destes ?

 

Cad_CM_Planta

Cad_CM_Codigo

Cad_CM_Economics

Cad_CM_Preco

 

obs.: Sempre que colocar fonte, use a tag CODE

todos estes campos são "char" exeto Cad_CM_Preco que é "Float", estou usando SQL Server a conexão é com database e query, isso afetaria a inserção de dados na tabela? Como faria para fazer a inserção direta através do insert do SQL, sem duplicação de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que não pode estar sendo inserido algum valor com letra na coluna Cad_CM_Preco ?

já verifiquei todo o arquivo e não tem nada incomum, fiz algumas alterações mas agora não dá o erro mas não carrega as informações na tabela. ficou assim:

 

procedure TImpNF.CustoMateriaPrimaClick(Sender: TObject);var   Arq: TextFile;   Texto, Pla, Cod, Eco, Pre : string;   I, Q1, Q2 : Integer;function MV : String;var   monta:String;begin   monta:='';   inc(I);   while texto[I] <> '|' do  { DEFINE O FINAL DA LINHA }   begin	 if texto[I]= ';' then { DEFINE DIVISÃO DE CAMPOS DO ARQ A IMPORTAR }		break;		monta := monta + texto[I];		inc(I);	 end;	 result := monta;   end;   begin	  if OpenDialog1.Execute then	  begin		screen.Cursor:= crHourGlass;		AssignFile(Arq,OpenDialog1.FileName);		reset(Arq);		if not EOF(Arq) then		repeat		  ReadLn(Arq,Texto);		  with Cust_M_Prima do		  begin			i:=0;			Label7.caption := mv;			Label8.caption := mv;			Label9.caption := mv;			Inc(Q1);			Label6.Caption := inttoStr(Q1);			Abre_CM_PrimaPesq('','','');			if not(Locate('Cad_CM_Planta',Label7.Caption,[])) and			   not(Locate('Cad_CM_Codigo',Label8.Caption,[])) and			   not(Locate('Cad_CM_Economics',Label9.Caption,[])) then			begin			   Cust_M_Prima.Append;			   FieldByName('Cad_CM_Planta').AsString := mv;			   FieldByName('Cad_CM_Codigo').asString := mv;			   FieldByName('Cad_CM_Economics').AsString := mv;			   FieldByName('Cad_CM_Preco').asString := mv;			   Cust_M_Prima.Post;			   Cust_M_Prima.Refresh;			   Inc(Q2);			   messagedlg('Aqui',mtinformation,[mbok],0);			end;		  end;		until EOF(Arq);   end;   CloseFile(Arq);   Cad_MPrima.Close;   Screen.Cursor:= crDefault;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.