Ir para conteúdo

POWERED BY:

Arquivado

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

wilnet

Contador, qual o erro?

Recommended Posts

Olá galera, estou encontrando este problema em minha pg's por causa do script de um contador, como segue abaixo:

 

--------------------------------------------------------------------------------------------

ADODB.Field error '800a0bcd'

 

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

 

/informatica/contador/contador.asp, line 30

----------------------------------------------------------------------------------------------

 

A linha 30 a qual se refere é está:

 

'Atribui a variável Counter recebe o número de visitas

Counter = RsQuery("acesso")

-------------------------------------------------------------------------------------------

Como sou leigo em ASP ainda, não consegui resolver, o engraçado é que em minha máquina funciona legal, mas quando publico, na Net da pau, o que será que é?

 

grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente antes de atribuir o valor do recordset a variável colocar isso

 

if NOT RsQuery.EOF then......atribuiçãoelseCounter = 0end if

pois como ele não encontrou registro e você está tentando pegar um, ele dá erro!!

 

falows

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu rOcKLoCo, vou tentar sua sugestão, qualquer coisa de errado posto novamente.A propósito, alguém teria um outro script de contador que funcione legal?grato + 1 vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende de como você está fazendo... mostre pra gente seu CODIGO!!falows

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, o código que estou é este como segue abaixo:

 

<%

'Declara as variáveis

Dim Conn, RsQuery, Pagina, Counter

'Atribui o endereço da página atual a uma variável (Pagina)

Pagina = Request.ServerVariables("SCRIPT_NAME")

'Atribui a variável Conn uma instancia do objeto Connection

'ou seja, a variável passa a propriedade de conexão

Set Conn = Server.Createobject("ADODB.Connection")

'Abre a conexão com o banco de dados usando o Server.MapPath, que localiza o banco com esse nome

'apenas dentro do mesmo diretório

Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:/Inetpub/wwwroot/site/bd/contador.mdb"

'Verifica se a Session Pagina ja contem algum valor, no caso o valor (visitada)

If Len(Session(Pagina)) = 0 Then

'Atribui a variável RsQuery a consulta executada no banco de dados

Set RsQuery = Conn.Execute("SELECT * FROM admin")

'Atribui a variável Counter o valor atual de visitas

Counter = RsQuery("acesso")+1

'Atribui a variável RsQuery a atualização feita no banco de dados

'Repare que desta maneira você pode usar esse Banco de Dados para várias páginas

'porque apenas será atualizada linha que corresponde a (url = '" & Pagina & "')

'url é o endereço atual

Set RsQuery = Conn.Execute("UPDATE admin SET acesso = " & Counter & " WHERE url = '" & Pagina & "'")

'Atribui a Session(Pagina) o valor "visitada", onde só será contado como uma nova visita quando a sessão for encerrada (a sessão se encerra após 20 minutos de página estática, ou ao fechar o browser)

Session(Pagina) = "visitada"

'Caso a Session Pagina não contenha o valor (visitada), será contado como mais uma visita

Else

'Atribui a variável RsQuery a consulta atualização feita no banco de dados

Set RsQuery = Conn.Execute("SELECT * FROM admin WHERE url = '" & Pagina & "'")

'Atribui a variável Counter recebe o número de visitas

Counter = RsQuery("acesso")

'Fecha o conexão com o banco de dados

End If

'Fecha o conexão com o banco de dados

Conn.Close

'Caso a Session Pagina não contenha o valor (visitada), será contado como mais uma visita

Set Conn = Nothing

'É impresso o total de visitas

Response.Write Counter

%>

 

Na pg, em que ele irá aparecer, eu coloquei um include chamando este código.

 

Agora me explique o porque do erro, se em minha máquina ele roda legal, mas quando é publicado ele da o erro no post citado acima? Faz alguma diferença, rodar na máquina e na Net?

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada de como eu fiz... assim você trata, verificando se existe registro na tabela!!

 

falows

 

<%

'Declara as variáveis

Dim Conn, RsQuery, Pagina, Counter

'Atribui o endereço da página atual a uma variável (Pagina)

Pagina = Request.ServerVariables("SCRIPT_NAME")

'Atribui a variável Conn uma instancia do objeto Connection

'ou seja, a variável passa a propriedade de conexão

Set Conn = Server.Createobject("ADODB.Connection")

'Abre a conexão com o banco de dados usando o Server.MapPath, que localiza o banco com esse nome

'apenas dentro do mesmo diretório

Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:/Inetpub/wwwroot/site/bd/contador.mdb"

'Verifica se a Session Pagina ja contem algum valor, no caso o valor (visitada)

If Len(Session(Pagina)) = 0 Then

'Atribui a variável RsQuery a consulta executada no banco de dados

Set RsQuery = Conn.Execute("SELECT * FROM admin")

if NOT RsQuery.EOF then

'Atribui a variável Counter o valor atual de visitas

Counter = RsQuery("acesso")+1

'Atribui a variável RsQuery a atualização feita no banco de dados

'Repare que desta maneira você pode usar esse Banco de Dados para várias páginas

'porque apenas será atualizada linha que corresponde a (url = '" & Pagina & "')

'url é o endereço atual

Set RsQuery = Conn.Execute("UPDATE admin SET acesso = " & Counter & " WHERE url = '" & Pagina & "'")

'Atribui a Session(Pagina) o valor "visitada", onde só será contado como uma nova visita quando a sessão for encerrada (a sessão se encerra após 20 minutos de página estática, ou ao fechar o browser)

Session(Pagina) = "visitada"

'Caso a Session Pagina não contenha o valor (visitada), será contado como mais uma visita

Else

'Atribui a variável RsQuery a consulta atualização feita no banco de dados

Set RsQuery = Conn.Execute("SELECT * FROM admin WHERE url = '" & Pagina & "'")

'Atribui a variável Counter recebe o número de visitas

Counter = RsQuery("acesso")

'Fecha o conexão com o banco de dados

End If

'É impresso o total de visitas

Response.Write Counter

else

response.write "não existe registro"

end if

RsQuery.Close

set RsQuery = nothing

'Fecha o conexão com o banco de dados

Conn.Close

'Caso a Session Pagina não contenha o valor (visitada), será contado como mais uma visita

Set Conn = Nothing

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá rOcKLoCo, eu fiz exatamente como você passou com o novo código, e agora apresenta este erro abaixo:

--------------------------------------------------------------------------------

53

ADODB.Recordset error '800a0e78'

 

Operation is not allowed when the object is closed.

 

/informatica/contador/contador_admin.asp, line 39

-----------------------------------------------------------------------------------

Onde o n° 53, é a contagem que está a pg, em minha máquina, rodando com o "ISS", mas quando publico na NET, da esse erro, e quando logo e começo a navegar nas pg's da esse erro:

--------------------------------------------------------------------------------------

não existe registro

Microsoft VBScript runtime error '800a01a8'

 

Object required: ''

 

/informatica/contador/contador_admin.asp, line 39

-----------------------------------------------------------------------------------------

A linha 39 é esta:

RsQuery.Close

------------------------------------------------------------------------------------------

O que será que acontece, que em casa no micro ele funciona e na Net não, sabe responder?

 

Grato novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, dá uma olhada no seu codigo... a logica está um pouco confusa!! mas o q eu te passei é o certo... só refaz...falows

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando você atualiza ou insere valores a conexao se fecha automaticamente, portanto quando tenta fechar diz que não pode pois já está fechada.Só se deve fechar depois de selects

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando você atualiza ou insere valores a conexao se fecha automaticamente, portanto quando tenta fechar diz que não pode pois já está fechada.Só se deve fechar depois de selects

eu olhei o codigo dele... ele seta várias vezes o mesmo Recordset... ou seja, vai dar conflito!!entao carinha, dá uma zoiada nisso.... falows

Compartilhar este post


Link para o post
Compartilhar em outros sites

uam coisa é certa ta uma bagunça o codigo, se não for necessario tira os coments pro codgio ficar mais limpo, facilita ate pra você ver onde pode estar dando pau

Compartilhar este post


Link para o post
Compartilhar em outros sites

tirei os comentarios e limpei um pouco o codigo, ai consegui ver o problema....

 

voce esta fechando o recordset fora do if, e este pode nao ter sido criado....

 

segue o codigo modificado

 

<%Dim Conn, RsQuery, Pagina, CounterPagina = Request.ServerVariables("SCRIPT_NAME")Set Conn = Server.Createobject("ADODB.Connection")Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:/Inetpub/wwwroot/site/bd/contador.mdb"If Len(Session(Pagina)) = 0 Then      Set RsQuery = Conn.Execute("SELECT * FROM admin")      if NOT RsQuery.EOF then            Counter = RsQuery("acesso")+1            Set RsQuery = Conn.Execute("UPDATE admin SET acesso = " & Counter & " WHERE url = '" & Pagina & "'")            Session(Pagina) = "visitada"      Else            Set RsQuery = Conn.Execute("SELECT * FROM admin WHERE url = '" & Pagina & "'")             Counter = RsQuery("acesso")      End If      Response.Write Counter      RsQuery.Close      set RsQuery = nothingelse      response.write "não existe registro"end ifConn.CloseSet Conn = Nothing%>

outra coisa, voce utiliza uma variavel de session para cada pagina? acho estranho, nao entendi porque utilizar session...

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.