Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro após inserir a última linha do arquivo texto


Andreia Regina

Pergunta

Olá!

Estou com um problema ao importar os dados de um arquivo txt, ele está importando tudo mas após importar a última linha exibe mensagem de erro, conforme abaixo:

INSERT INTO tb_teste (ano, mes, codigo, tipo, valor, antecipado, pgto_vcto, saldo) VALUES ('2009', '9', '99999', 'TAXA BANCARIA', '1.70', '0.00', '1.70', '0.00')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

Alguém pode me ajudar a eliminar a exibição desse erro?

Grata

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Oi 'Andreia Regina' !

pelo que vi, e pode estar errado por ser uma cópia, está faltando o ponto-e-virgula no final da instrução insert;

Verifique se o arquivo não possui caracteres estranhos ou falta sinalização entre uma instrução e outra.

Este erro indica que algo foi escrito errado e o motor do MySQl não está conseguindo depurar.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Denis,

ele insere todos os registros do arquivo, e exibe este erro ao finalizar, na última linha do arquivo txt não existe nada que avise que o arquivo acabou

está assim:

2009| 9|99864|TAXA BANCARIA|2,00|0,00|2,00|0,00

2009|10|99880|TAXA BANCARIA|2,00|0,00|2,00|0,00

2009| 9|99996|TAXA BANCARIA|1,70|0,00|1,70|0,00

no banco todos os registros são inseridos.

o sql está assim:

$sql=mysql_query("INSERT INTO tb_teste (ano, mes, codigo, tipo_desconto, valor, antecipado, pgto_vcto, saldo) VALUES ('$ano', '$mes', '$campo[2]', '$campo[3]', '$valor', '$antecipado', '$pgto_vcto', '$saldo')") or die(mysql_error());

Agradeço a atenção.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Andreia!

Por padrão todos os arquivos tem um marcador de EOF. Parece que seu algorítimo não está lendo ou entendendo este marcador e o último registro (o registro além do último lido de seu arquivo) está inválido para o MySQL.

Experimente criar uma tabela temporária com a seguinte estrutura:

CREATE TEMPORARY TABLE temp (
   ano char(4),
   mes char(2),
   codigo char(5),
   tipo_desconto char(13),
   valor char(4),
   antecipado char(4),
   pgto_antecipado char(4),
   saldo char(4)
) ENGINE = MEMORY;
e dar uma carga nela assim:
LOAD DATA INFILE 'arquivo.txt'
INTO TABLE temp 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n'';
Faça as mudanças para que ele aceite os números decimais, assim:
UPDATE temp
SET valor = replace(valor, ',', '.'),
   antecipado = replace(antecipado, ',', '.'),
   pgto_antecipado = replace(pgto_antecipado, ',', '.'),
   saldo = replace(saldo , ',', '.');

Depois, é só dar carga na tabela correta e dropar a tabela temporária.

P.S.: NÃO ESQUEÇA LINES TERMINATED BY '\n' é para arquivos texto que foram gerados no LINUX/UNIX.

Se o arquivo TXT foi gerado no WINDOWS/DOS use LINES TERMINATED BY '\n'.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Andreia

Alem da sugestao do Denis, veja se valor e pgto_vcto estao declarados como FLOAT, ou outra declaracao que aceite valores decimais. A mensagem

check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

diz que há um erro de sintaxe, mas me parece que o comando esta correto.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...