Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Ribeiro

Como verificar registros antes de Importar TXT

Recommended Posts

Olá pessoal, estou com um novo problema na importação de um txt, preciso que o sistema verifique se existem registros já cadastrados no banco e se houver entao é carregada uma página (mensagem de erro).

 

Quando colocado em pratica esta ocorrendo um erro no Loop.

 

Erro que apresenta no navegador.

 

Erro de compilação do Microsoft VBScript erro '800a040e'

'loop' sem 'do'

,line 137

loop

 

 

Código até o momento

SQL = "Select * from tbl_cotacaoExter where cod_periodo = "&request("periodo")&" AND nome_produto = "&request(arrayLinha(0))&""
SQL2 = "INSERT INTO tbl_cotacaoExter (cod_produto, nome_produto, qtd_prod, estoque, un_medida, cod_periodo) VALUES ('"&arrayLinha(0)&"','"&arrayLinha(1)&"','"&arrayLinha(2)&"','"&arrayLinha(3)&"','"&arrayLinha(4)&"','"&cod_periodo&"')"
Set RS = conexao.execute(SQL)


if RS.EOF <> true then
response.write "<script>location = 'erro_cadgrupoproduto.asp'</script>"

else
conexao.execute(SQL2)
'Passar para próxima linha
loop

'Destruiremos e fecharemos o FSO e o acesso ao arquivo de texto
varArquivo.Close
Set varArquivo = Nothing
Set objFSO = Nothing

'Destruiremos e fecharemos a conexão com o banco de dados
conexao.close
Set Conexao = nothing
end if

Alguém tem alguma idéia de como solucionar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Removendo essa linha

'Passar para próxima linha

loop

 

Ou acrescentando DO WHILE e RS.MOVENEXT, conforme sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Removendo essa linha

'Passar para próxima linha

loop

 

Ou acrescentando DO WHILE e RS.MOVENEXT, conforme sua necessidade.

E ai beleza, então hargon não deu certo continua pedindo loop

 

O que fiz foi isso, mas provavelmente esta errado:

else
conexao.execute(SQL2)
'Passar para próxima linha
Do while not RS.EOF
RS.MoveNext

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o código completo agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o código completo agora.

<%
cod_periodo = request.Form("periodo")
Session("cod_periodo") = Cint(cod_periodo)
Dim objFSO


'Aqui daremos início ao sistema, criaremos o objeto FileSystemObject
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")


Dim varArquivo


'Agora, com o uso do FSO, iremos abrir o arquivo texto que iremos criar
Set varArquivo = objFSO.OpenTextFile(server.MapPath("Cotacao.txt"), 1) 


dim arrayLinha


'Agora que o arquivo já foi aberto, iremos ler linha por linha
'O comando AtEndOfStream determina que iremos repetir o processo abaixo
'até o fim do arquivo
Do while not varArquivo.AtEndOfStream


'Abaixo, criaremos um array para separar os dados entre ponto-e-vírgula
'ReadLine é usado para indicar que iremos separar os dados desta linha

arrayLinha=split(varArquivo.ReadLine, ";",-1,1)

'Com o array criado, iremos inserir de acordo com a ordem dos campos
'Usando 'arrayLinha(0)' nós determinamos cada dado pela ordem do arquivo de texto
'começando pelo zero que é respectivamente o campo nome e por ai adiante
arrayLinha(0) = Replace((arrayLinha(0)), "'", "'")
arrayLinha(1) = Replace((arrayLinha(1)), "'", "'")
arrayLinha(2) = Replace((arrayLinha(2)), "'", "'")
arrayLinha(3) = Replace((arrayLinha(3)), "'", "'")
arrayLinha(4) = Replace((arrayLinha(4)), "'", "'")

SQL = "Select * from tbl_cotacaoExter where cod_periodo = "&request("periodo")&" AND nome_produto = "&request(arrayLinha(0))&""
SQL2 = "INSERT INTO tbl_cotacaoExter (cod_produto, nome_produto, qtd_prod, estoque, un_medida, cod_periodo) VALUES ('"&arrayLinha(0)&"','"&arrayLinha(1)&"','"&arrayLinha(2)&"','"&arrayLinha(3)&"','"&arrayLinha(4)&"','"&cod_periodo&"')"
Set RS = conexao.execute(SQL)


if RS.EOF <> true then
response.write "<script>location = 'erro_cadgrupoproduto.asp'</script>"

else
conexao.execute(SQL2)
'Passar para próxima linha
Do while RS.EOF
Loop

'Destruiremos e fecharemos o FSO e o acesso ao arquivo de texto
varArquivo.Close
Set varArquivo = Nothing
Set objFSO = Nothing

'Destruiremos e fecharemos a conexão com o banco de dados
conexao.close
Set Conexao = nothing
end if

'Abaixo, caso a ordem ou a quantidade de campos do arquivo de texto
'seja inferior a do banco de dados, retornaremos uma mensagem de erro
if err>0 then
response.write "<script>history.back(1);alert('Ocorreu algum problema na inserção.\nVerifique o layout do arquivo de texto.')</script>"
response.End()
end if

'Deletando o arquivo cotacao.txt
Set objFSO = server.CreateObject("Scripting.FileSystemObject") 
objfso.DeleteFile Server.MapPath("cotacao.txt"),true
Set fso = Nothing 

'Confirmando importação
response.write "<script>location = 'ok_importar_dados.asp'</script>"
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remova essas duas linhas:

Do while RS.EOF

Loop

 

Acrescente somente LOOP após

Set Conexao = nothing

end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remova essas duas linhas:

Do while RS.EOF

Loop

 

Acrescente somente LOOP após

Set Conexao = nothing

end if

 

Eu fiz da forma como orientou mas o seguinte erro esta ocorrendo:

 

Erro de compilação do Microsoft VBScript erro '800a040e'

 

'loop' sem 'do'

 

/testes/gmerc/comerc/valida_cadastra_cotacao_Exter.asp, line 131

 

Loop

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem certeza que está trabalhando no mesmo código que postou?

 

Pq se realizar a substituição no código acima, não existe a possibilidade de dar erro na linha 131, pq são apenas 79 linhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem certeza que está trabalhando no mesmo código que postou?

 

Pq se realizar a substituição no código acima, não existe a possibilidade de dar erro na linha 131, pq são apenas 79 linhas.

 

Sim é o mesmo codigo, é que antes do codigo que postei existem linhas em html e algumas descrições.

 

Eu fiz outros testes e a mesma mensagem aparece solicitando o Loop Do.,

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que está acontecendo é que não está fechando algum DO WHILE que foi aberto. Você disse que colocou o LOOP após o END IF e erro persiste. Então posta o código inteiro com as alterações, talvez alguma linha faltando ou a mais em outra parte desse código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que está acontecendo é que não está fechando algum DO WHILE que foi aberto. Você disse que colocou o LOOP após o END IF e erro persiste. Então posta o código inteiro com as alterações, talvez alguma linha faltando ou a mais em outra parte desse código.

 

Olá Hargon, cara desculpa pela demora, mas ta lembrado da nossa última conversa. Estou postando o codigo ok da uma olhada o erro é o mesmo.

<%
' Não deixa ficar no cache


Response.Buffer= True 
Response.AddHeader "cache-control", "private" 
Response.AddHeader "pragma", "no-cache" 
Response.ExpiresAbsolute = #January 1, 1990 00:00:01# 
Response.Expires=Now()-1 
Response.AddHeader "Cache-Control", "must-revalidate" 
Response.AddHeader "Cache-Control", "no-cache"
%>


<%


Response.Write "<center><div id='Carregando' style='display:block;'><br><br>"
Response.Write "<font face='Arial, Tahoma' size='2' color='#330099'><b>Aguarde carregando...</b></font><br><br>"
Response.Write "<img src='progressbar.gif' alt='Carregando...' border='0' height='17' width='94'>"
Response.Write "</div></center>"
'Response.Buffer = True
Response.Flush()
Response.Write "<script language='javascript'>document.all.Carregando.style.display = 'none';</script>"


%>
<%
cod_periodo = request.Form("periodo")
Session("cod_periodo") = Cint(cod_periodo)
Dim objFSO


'Aqui daremos início ao sistema, criaremos o objeto FileSystemObject
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")


Dim varArquivo


'Agora, com o uso do FSO, iremos abrir o arquivo texto que iremos criar
Set varArquivo = objFSO.OpenTextFile(server.MapPath("Cotacao.txt"), 1) 


dim arrayLinha


'Agora que o arquivo já foi aberto, iremos ler linha por linha
'O comando AtEndOfStream determina que iremos repetir o processo abaixo
'até o fim do arquivo
Do while not varArquivo.AtEndOfStream


'Abaixo, criaremos um array para separar os dados entre ponto-e-vírgula
'ReadLine é usado para indicar que iremos separar os dados desta linha

arrayLinha=split(varArquivo.ReadLine, ";",-1,1)

'Com o array criado, iremos inserir de acordo com a ordem dos campos
'Usando 'arrayLinha(0)' nós determinamos cada dado pela ordem do arquivo de texto
'começando pelo zero que é respectivamente o campo nome e por ai adiante
arrayLinha(0) = Replace((arrayLinha(0)), "'", "'")
arrayLinha(1) = Replace((arrayLinha(1)), "'", "'")
arrayLinha(2) = Replace((arrayLinha(2)), "'", "'")
arrayLinha(3) = Replace((arrayLinha(3)), "'", "'")
arrayLinha(4) = Replace((arrayLinha(4)), "'", "'")

SQL = "Select * from tbl_cotacaoExter where cod_periodo = "&request("periodo")&" AND nome_produto like '"&request(arrayLinha(0))&"'"
SQL2 = "INSERT INTO tbl_cotacaoExter (cod_produto, nome_produto, qtd_prod, estoque, un_medida, cod_periodo) VALUES ('"&arrayLinha(0)&"','"&arrayLinha(1)&"','"&arrayLinha(2)&"','"&arrayLinha(3)&"','"&arrayLinha(4)&"','"&cod_periodo&"')"
Set RS = conexao.execute(SQL)


if RS.EOF <> true then
response.write "<script>location = 'erro_cadgrupoproduto.asp'</script>"

else
conexao.execute(SQL2)
'Passar para próxima linha
 

'Destruiremos e fecharemos o FSO e o acesso ao arquivo de texto
varArquivo.Close
Set varArquivo = Nothing
Set objFSO = Nothing

'Destruiremos e fecharemos a conexão com o banco de dados
conexao.close
Set Conexao = nothing
Loop
end if

'Abaixo, caso a ordem ou a quantidade de campos do arquivo de texto
'seja inferior a do banco de dados, retornaremos uma mensagem de erro
if err>0 then
response.write "<script>history.back(1);alert('Ocorreu algum problema na inserção.\nVerifique o layout do arquivo de texto.')</script>"
response.End()
end if

'Deletando o arquivo cotacao.txt
Set objFSO = server.CreateObject("Scripting.FileSystemObject") 
objfso.DeleteFile Server.MapPath("cotacao.txt"),true
Set fso = Nothing 

'Confirmando importação
Loop
response.write "<script>location = 'ok_importar_dados.asp'</script>"
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remove o LOOP dentro desse IF.

if RS.EOF <> true then
		response.write "<script>location = 'erro_cadgrupoproduto.asp'</script>"
	else
		conexao.execute(SQL2)
		'Passar para próxima linha
		
		
		'Destruiremos e fecharemos o FSO e o acesso ao arquivo de texto
		varArquivo.Close
		Set varArquivo = Nothing
		Set objFSO = Nothing
		
		'Destruiremos e fecharemos a conexão com o banco de dados
		conexao.close
		Set Conexao = nothing
		Loop
	end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remove o LOOP dentro desse IF.

if RS.EOF <> true then
		response.write "<script>location = 'erro_cadgrupoproduto.asp'</script>"
	else
		conexao.execute(SQL2)
		'Passar para próxima linha
		
		
		'Destruiremos e fecharemos o FSO e o acesso ao arquivo de texto
		varArquivo.Close
		Set varArquivo = Nothing
		Set objFSO = Nothing
		
		'Destruiremos e fecharemos a conexão com o banco de dados
		conexao.close
		Set Conexao = nothing
		Loop
	end if

 

Fiz os testes mas agora ocorreu um erro diferente,

 

Erro de tempo de execução do Microsoft VBScript erro '800a01a8'

 

Objeto necessário

 

/testes/gmerc/comerc/valida_cadastra_cotacao_Exter.asp, line 51

Compartilhar este post


Link para o post
Compartilhar em outros sites

você viu esse erro, ele necessita do loop para fazer a leitura do arquivo, eu tava pensando que pode ser mais facil fazer a importar e depois verificar os duplicados e excluir automaticamente, mas não tenho ideia de como fazer isso, vou dar uma pesquisa se você tiver alguma ideia posta ae beleza...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o que está na sua linha 51.

 

Eu não entendi pq você fecha o objeto dentro do IF.

varArquivo.Close
Set varArquivo = Nothing
Set objFSO = Nothing
Set objFSO = server.CreateObject("Scripting.FileSystemObject")
objfso.DeleteFile Server.MapPath("cotacao.txt"),true
Set fso = Nothing
Isso deveria ficar depois do Loop

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o que está na sua linha 51.

 

Eu não entendi pq você fecha o objeto dentro do IF.

varArquivo.Close
Set varArquivo = Nothing
Set objFSO = Nothing
Set objFSO = server.CreateObject("Scripting.FileSystemObject")
objfso.DeleteFile Server.MapPath("cotacao.txt"),true
Set fso = Nothing
Isso deveria ficar depois do Loop

 

Eu fecho por causa de comando que ta na linha 51, mas nao sei se esta certo,

 

Do while not varArquivo.AtEndOfStream

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz essa alteração. Passa isso para baixo conforme falei e poste o resultado. Se der errado, poste como ficou seu código.

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.