Ir para conteúdo

POWERED BY:

Arquivado

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

LuX_

[Resolvido] Erro sem sentido em uma sub que acessa bd

Recommended Posts

Boa tarde pessoal. Meu código é simples!

<%
sub connectBd()
banco = Server.MapPath("./produtos.mdb")
set cn = Server.CreateObject("ADODB.Connection")
set rs =Server.createObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & banco & ";"
rs.Open sql,cn,cursor,lock
end sub
%>
<%
Response.Charset="ISO-8859-1"
'Controle de cache graças ao I.E ¬¬
'HTTP/1.1
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control","no-cache"
'HTTP/1.0
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1 ' minutos até a expiração
Response.Expiresabsolute = Now() ' data de expiração
dim sql, banco,striid,cursor,lock ',id_tab,categoria
striid = Request.querystring("index")
sql = "Select * from tabprodutos where codigo ="  & striid
cursor = 0
lock = 1
call connectBd
if rs.EOF = true then
response.write "Nada encontrado"
rs.close
set cn = nothing
else
Response.write "<img align='left' id='img_zoom' style='position:absolute;top:0px;display:block;'src='" & rs("foto") & "'><br>"
Response.write "<div style='position:absolute;height:auto;width:269px;top:10px;right:10px;background-color:#fffd5a;'><p><strong>Nome:</strong>" & Replace(rs("nome"),"chr(39)",chr(39)) & "</p>"
Response.write "<p><strong>Descrição:</strong>" & replace(Replace(rs("descricao"),"chr(39)","'"),chr(13),"<br>")& "<br><br><strong>Clique no link abaixo para voltar</strong></p><center><a style=" & chr(34) & "color:#494940;height:15px;width:70px;background-position:bottom left;background-repeat:repeat-x;background-image:url('sombra_voltar.jpg');" & chr(34) &" href='java script:voltar();'><strong>Voltar</strong></a></center></div><br>"
end if
rs.close
set cn = nothing
%>

Ele dá problema na linha 26 dizendo que não encontra o objeto rs!

 

linha 26: if rs.EOF = true then

 

Alguém me ajuda por favor! Estou desesperado! Em outra página o código que parece estar identico funcionou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

O problema persistiu o mesmo.

 

Até porque não tem problema nenhum em usar o rs.EOF=true ou rs.EOF=false!

 

Mas por via das dúvidas eu testei e deu na mesma! =/

 

Faz idéia do que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

LuX, a única possibilidade que enxergo agora, seria a sua SUB não estar conectando no banco...

Faça o seguinte,

 

Remova as linhas

 

sub connectBd()
e:

end sub
e também:

call connectBd

e veja se funciona, porque uma vez, que a função não funcione, chamar o Record Set fatalmente resultaria em erro, porque logicamnete o objeto não foi criado

 

Se não me engano, (faz mto tempo que não faço nada em ASP) nas SUB é obrigatório declaração de variáveis não?

Não sei porque sempre usei Option Explicit então você tem de declarar até quando espirra :D

 

Edit: Relendo seu código, essa linha

 

banco = Server.MapPath("./produtos.mdb")

 

Veja se realmente aponta para o diretório onde está seu banco. De um Response.Write(banco) : Response.End e veja o que retorna, se é o caminho exato do seu banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá gente! Muito obrigado pela ajuda!

 

Fiz um teste que chega a mesma conclusão que o do nosso amigo que pediu que eu removesse linhas!

 

coloquei na sub o seguinte:

 

response.write rs("codigo")

Ele escreveu na tela o código completamente.

 

Então a sub está conectando sim...infelizmente!

 

Caro amigo que perguntou sobre declarar o rs, está na sub connectBd

 

set rs [....]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então kobutii

 

Eu fiz outra cosia que chegou na conclusão necessária.

 

Você levantou a hipotese de a sub não conectar o banco não foi?

 

pois dentro da sub eu escrevi isso aqui:

 

response.write rs("codigo")

codigo é o campo da tabela no banco.

 

E dentro da sub ele escreveu na página o cógido que ele achou no select!

Então ela tá conectando sim!

 

acho que agora ficou mais claro né? =DD

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema foi resolvido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tive um problema semelhante num IF e a solução(sem explicação) foi colocar entre parenteses. No seu caso ficaria

 

if (rs.EOF = true) then

 

não custa tentar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para resolver esse problema, basta informar acima do SUB:

Public rs

sub connectBd()

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso eu vi mas onde estas a declarar a variavel ? sim pq eu acho que nao basta o set tambem tens de dizer "dim rs" pelo menos comigo funciona assim , se nao declarares nao da. tambem reparei que nao declaraste a variavel cn mas se da assim nao sei.

 

Se eliminaste as linhas que foram referidas acima, tens de colocar o codigo da suposta sub no sitio onde fazes o codigo. fizeste-o?

 

<%
Response.Charset="ISO-8859-1"
'Controle de cache graças ao I.E ¬¬
'HTTP/1.1
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control","no-cache"
'HTTP/1.0
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1 ' minutos até a expiração
Response.Expiresabsolute = Now() ' data de expiração
dim sql, cn, rs, banco,striid,cursor,lock ',id_tab,categoria
striid = Request.querystring("index")
sql = "Select * from tabprodutos where codigo ="  & striid
cursor = 0
lock = 1
'Aqui chamas a tua tal sub
banco = Server.MapPath("./produtos.mdb")
set cn = Server.CreateObject("ADODB.Connection")
set rs =Server.createObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & banco & ";"
rs.Open sql,cn,cursor,lock

if rs.EOF = true then
response.write "Nada encontrado"
rs.close
set cn = nothing
else
Response.write "<img align='left' id='img_zoom' style='position:absolute;top:0px;display:block;'src='" & rs("foto") & "'><br>"
Response.write "<div style='position:absolute;height:auto;width:269px;top:10px;right:10px;background-color:#fffd5a;'><p><strong>Nome:</strong>" & Replace(rs("nome"),"chr(39)",chr(39)) & "</p>"
Response.write "<p><strong>Descrição:</strong>" & replace(Replace(rs("descricao"),"chr(39)","'"),chr(13),"<br>")& "<br><br><strong>Clique no link abaixo para voltar</strong></p><center><a style=" & chr(34) & "color:#494940;height:15px;width:70px;background-position:bottom left;background-repeat:repeat-x;background-image:url('sombra_voltar.jpg');" & chr(34) &" href='java script:voltar();'><strong>Voltar</strong></a></center></div><br>"
end if
rs.close
set cn = nothing
%>

Eu faria assim

 

Nao te custa tentar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o erro que retorna no navegador, e a gente parte dai...

Só falar que o erro é na linha 26 é meio subjetivo...

 

Porém, já tentou o que o hargon sugeriu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

O erro que é retornado no navegador é aquele: Objeto necessário: rs

 

Quanto as instruções que foram indicadas agora ha pouco ainda vou tentar! obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi hargon! Porém acabo de descobrir que estou tendo problemas em outra página usando exatamente a mesma sub!

Para utilizar a mesma eu coloquei ela num include.

Ela funcionou nas páginas que eu havia testado sem o include

Mas tem uma página em que ela não funciona e o erro é ainda pior!

 

Os argumentos são incorretos, estão fora do intervalo aceitável ou estão em conflito.

/projeto/connstring.asp, line 8

 

 

Vou passar o código:

 

connstring.asp

Public rs,cn
sub connectBd()
banco = Server.MapPath("./produtos.mdb")
set cn = Server.CreateObject("ADODB.Connection")
set rs =Server.createObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & banco & ";"
rs.Open sql,cn,cursor,lock
end sub

sub alterBd()
banco = Server.Mappath("./produtos.mdb")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & banco & ";"
cn.execute sql
end sub

dessa vez tem mais uma sub, mas não faz diferença se eu não estiver chamando ela não é?

 

o código da página que dá erro é simples também

 

sub testalogin()
	cursor = 3
	lock = 3
	sql = "Select * from tabusuarios where login_cliente='" & Request.Form("txtlogin") & "'"
	call connectBd
	
	if rs.EOF = false then
		rs.close
		set cn = nothing
		set rs = nothing
		response.redirect "cadastra.asp?q=existe"
	end if
	rs.close
	set rs = nothing
	set cn=nothing
end sub

sub addbanco()
set cn = Server.CreateObject("ADODB.Connection")
sql = "insert into tabusuarios(nome_cliente,sexo_cliente,estado,cidade_cliente,email_cliente,operadora_clie
nte,endereco_cliente,cpf_cliente,telefone_cliente,login_cliente,senha_cliente) values('" & trim(request.form("txtnome")) & "','" & request.Form("ssexo") & "','" & request.Form("sestado") & "','" & request.form("txtcidade") & "','" & request.Form("txtemail") & "','" & request.form("txtoperadora") & "','" & request.Form("txtendereco") & "','" & Request.Form("txtcpf") & "','" & request.Form("txttelefone") & "','" & request.Form("txtlogin") & "','" & request.Form("txtsenha") & "')"
call alterBd
set cn = nothing
ok = true
end sub


'FIM DE SUBS
'FIM DE SUBS
'FIM DE SUBS
'FIM DE SUBS
'FIM DE SUBS
'FIM DE SUBS

	call valida_formulario()
	call testalogin()
	call addbanco()
if ok = true then
	response.redirect "cadastra.asp?q=s"
end if

e agora quem pdoerá me defender? =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem precisa mais se preocupar!

Esqueci de declarar variavel de novo AUSHAUHSUAHSUAHS

 

Esqueci de LOCK e CURSOR como globais! =D

 

Obrigado a todos vocês amigos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifica os valores em sql,cn,cursor,lock, provavelmente estão vazias.

 

Acredito que o problema seja isso. Para usar variáveis globais, você tem que declarar elas como globais, logo fora das funções.

 

 

 

Editado:

 

Que bom que resolveu. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.