Ir para conteúdo

POWERED BY:

Arquivado

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

Lucia_na

On Error Resume Next

Recommended Posts

Ola Pessoal.

Estou com problema com o ON ERROR RESUME NEXT.

Tenho em algumas páginas esse tratamento de erro. Qd peguei esse código ASP para manutenção ja tinha o ON ERROR RESUME NEXT no início da pagina ASP. O meu site esta um pouco lento entao andei lendo o seguinte:

 

"Tratamento de Erros são essenciais em aplicações, mas por outro lado o seu uso pode dar enorme queda na performance das páginas que possuem tratamento de erro, por exemplo abrindo uma conexão que dá erro por algum motivo e usando o On Error para tratar o script vai para o próximo passo, ignorando o erro, e tenta abrir um recodset de uma conexão que falhou, prejudicando o servidor."

 

Gostaria de saber o seguinte: se eu tiro o ON ERROR RESUME NEXT da pagina ASP, não traz resultados, (nessa pagina tenho consulta ao banco e consulta web Service), pq será que não funciona se eu tirar essa intrução??

Ja olhei no meu código se poderia ter algum erro, mas nao achei nada visível.

 

Aproveitando a oportunidade, é melhor usar o recordset ou o getRows, em questão de performance?

 

 

Obrigada

 

Luciana

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estava com um post em aberto pedindo ajuda para tratamento de erro. Consegui resolver meu problema, coloquei na minha página o on error resume next. Não me apresentou nenhum problema.

 

E assim, por mais que ele apresentasse algum problema de demora, de forma alguma seria aconselhável você tirar, porque talvez a página estava com isso, porque é necessário, muitas vezes você sabe que um erro será gerada, e não tem como evitar, mas precisa dele para fazer as coisas darem certo. Pode ser que nessa página que pegou, tenha um caso desse, e se o tirar, irá parar de funfar.

 

Só que assim, se no seu código só tem simplesmente o on error resume next, pode sim te apresentar problemas.

 

O que você pode fazer é, após cada ponto crítico de seu código, que você sabe que pode ocorrer um erro, é utilizar do seguinte código:

 

if err.number <> 0 then
   response.write("erro ocorrido")
   response.write("N°:" & err.number)
end if

Fazendo dessa forma, evitará os exemplos que deu, de ocorrer um erro em uma tabela, ai ele vai pra linha da frente, e continua colocando um erro por cima do outro e você não vê nada.

 

Dá uma olhada nesse link também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andava mesmo a procura disto :)

 

So uma coisa como faço para que ele em vez de apresentar o erro na pagina, apresente uma msg ao utilizador que estiver a visualizar essa pagina e guarde o erro num txt especifico?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro do if do erro coloque uma clausura sql que faz um insert no bd, lá dentro resgate o numero do erro... hora... e ip... e jogue tudo em um bd, dai depois você poderá visualizar e tentar resolver os problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto??

 

if err.number <> 0 then
set conn = CreateObject("ADODB.Connection")
	conn.Provider = "Microsoft.Jet.Oledb.4.0"
        conn.Open Server.MapPath("db/erros.mdb")
	set rs=server.createobject("adodb.recordset")
	erros="select * from erros"
	rs.open erros,conn,2,2
	rs.addnew
	
	rs.fields("pagina")=aquasplender (para poder utilizar a mesma bd exclusiva para erros posso definir um campo de identificação do site assim)
	rs.fields("erro")="N°:" & err.number   (não falta nada aqui?)
	rs.fields("urls")=??? (como faço para ele gravar o nome da pagina, nao é o titulo mas sim a pagina, qualquercoisa.asp)
        rs.fields("hora")=time()
	rs.fields("data")=date()
	
end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa este post é de 11 agosto 2008

vamos contribuir respondendo tópicos mais atuais...

 

ou abre um novo post

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa este post é de 11 agosto 2008

vamos contribuir respondendo tópicos mais atuais...

 

ou abre um novo post

 

 

Apenas postei aqui porque ao pesquisar no google vim aqui ter e achei que nao valia a pena abrir outro post visto que o problema já estava(tinha estado) a ser debatido aqui, se entenderes que deva abrir um novo post eu abro, por mim é igual.

 

Não mano, neste caso você esta listando, você tem que da um insert para que o erro seja cadastrado no bd.

 

 

ok, vamos la ver se entendi, sera isto?

 

<%
if err.number <> 0 then
        
       INSERT INTO erros (pagina, erro, ip, urls, hora, data)
       VALUES ('aquasplender', '"N°:" & err.number', 'Request.ServerVariables("REMOTE_ADDR")', 'Request.Url', 'time()', 'date()' )

%>

O primeiro campo da tabela nao inseri porque é de numeração automatica e presumo que nao o defenindo ele nao vai escrever la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O On Error Resume Next é o único tratamento possível, porém se for usado de forma errada ele torna-se péssimo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

remove ele é chama o SQL INSERT pelo recordset, no open

e antes de inserir você dá um SELECT ,para ver se ja existe os dados.

 

exemplo:

 

   Option explicit
   'declaro as var
   dim varlogin, varemail, varsenha, conexao, conDBQ, constring, rsselect, SQLselect, rsinsert, SQLinsert
   'recupero todos os dados
   varlogin=trim(request.form("login"))
   varsenha=trim(request.form("senha"))
   varemail=trim(request.form("email"))
   'crio a conexao
   %>
   <!--#include file="conn/conexao1.asp"-->
   <% 'abrir a conexao
   call abreconexao
   'crio o rsselect para verificar se os dados jah estaun cadastrados
   set rsselect=server.createobject("ADODB.Recordset")
   'crio o SQLselect
   SQLselect="SELECT login FROM login WHERE login='"&varlogin&"'"
   rsselect.open SQLselect,conexao,1,3
   if not rsselect.eof then
   		response.redirect("incluir_form_treina.asp?msgeof=1")
		set rsselect=nothing
   else	
   		'crio o rsinsert para inseiri os dados no bd
   		 set rsinsert=server.createobject("ADODB.Recordset")
		'crio o SQLinsert pra incluir no bd
		SQLinsert="INSERT INTO login(login,senha,email) values('"&varlogin&"','"&varsenha&"','"&varemail&"')"
		rsinsert.open SQLinsert,conexao,1,3
		response.redirect("administracao_treina.asp?msg=1")
		set rsinsert=nothing
	end if 
	call fechaconexao %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

sera isto?

 

 <% dim varerro, varip, varurls, varhora, vardata
 
   varerro=trim("N°:" & err.number)
   varip=trim(Request.ServerVariables("REMOTE_ADDR"))
   varurls=trim(Request.Url)
   varhora=trim(time())
   vardata=trim(date())
	

if err.number <> 0 then

 SQLinsert="INSERT INTO erros(pagina,erro,ip, urls, hora, data ) values('aquasplender','"&varerro&"','"&varip&"','"&varurls&"','"&varhora&"','"&vardata&"')"
 rsinsert.open SQLinsert,conexao,1,3
 set rsinsert=nothing
	


rs.update
rs.close
conn.close
end if
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tbm poideria gravar em um arquivo de texto usando fso.

 

 

A minha ideia inicial seria gravar num txt para nao sobrecarregar a bd, mas nao faço ideia nenhuma como gravar num txt...

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um select antes de inserir e caso ja exista redireciona ele para outra pagina e exibe uma mensagem ou pode ser um pop-up que se fecha automaticamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um select antes de inserir e caso ja exista redireciona ele para outra pagina e exibe uma mensagem ou pode ser um pop-up que se fecha automaticamente

 

 

mas eu quero que ele escreva tudo mesmo que seja repetido, preciso do select na mesma??

 

 

para já nao vale a pena mais tarde irei olhar para ele melhor.

 

Obrigado pelo link :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, se você não saber fazer INSERT, nem criar arquivo txt sugiro que estude um pouco antes. Terá menos dúvidas e poderá ser mais direto com elas..

 

dá uma olhada nos links que a galera postou aí...

 

acho que todo mundo aqui gosta de ensinar a pescar mas dar o peixe é outra história

 

:)

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas eu quero que ele escreva tudo mesmo que seja repetido, preciso do select na mesma??

dae nao precisa SELECT, apenas o INSERT

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.