Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigos, tá quase lá, juntando o que eu tinha e mais algumas dicas cheguei até aqui, mas dá o seguinte erro:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta 'COUNT(*)acesso'.
/cont.asp, line 9
<%set lojaDB = Server.CreateObject("ADODB.Connection")lojaDB.ConnectionString = "Driver={Microsoft Access Driver (.mdb)};DBQ= " & server.MapPath("../loja.mdb")lojaDB.openDim usuario usuario = request.form ("usuario")sql = "SELECT COUNT()acesso FROM clientes WHERE usuario='"&usuario&"'"set tabTemp = Nothingset tabTemp = lojaDB.execute(sql)if tabTemp("acesso") > 0 thensql = "INSERT INTO clientes(acesso)VALUES(1)"set tabTemp = Nothingset tabTemp = lojaDB.execute(sql)elsesql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"&usuario&"'"set tabTemp = Nothingset tabTemp = lojaDB.execute(sql)end if%>alguém ai tem mais alguma dica para poder rodar este contador de usuario individual.Pra quem não leu os outros posts, trata-se de um contador individual , que registrará em um BD os acessos que cada usuario previamente cadastrado no BD realizou, atraves da página de Login, que acessa a página que tem este contador (Eu o estou chamando através do método "IncludeFile")
Bem acho que assim fica mais fácil da galera dar uma ajudinha.
Detalhe no BD a tabela clientes já está com a colunas acesso(que contara os acessos) de cada usuario no formato número.
SELECT COUNT(*) as acesso FROM clientes
Ok galera, vou tentar estas dicas. Brigadãooooo
Olá amigos, acabei de usar as dicas que me passaram, o erro sumiu mas o contador não está incrementando no BD. O que pode ser. O código está assi agora:
cont.asp
<%
set lojaDB = Server.CreateObject("ADODB.Connection")
lojaDB.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ= " & server.MapPath("../loja.mdb")
lojaDB.open
Dim usuario
usuario = request.form ("usuario")
sql = "SELECT COUNT(*) as acesso FROM clientes WHERE usuario='"&usuario&"'"
set tabTemp = Nothing
set tabTemp = lojaDB.execute(sql)
if tabTemp("acesso") > 0 then
sql = "INSERT INTO clientes(acesso)VALUES(1)"
set tabTemp = Nothing
set tabTemp = lojaDB.execute(sql)
else
sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"&usuario&"'"
set tabTemp = Nothing
set tabTemp = lojaDB.execute(sql)
end if
%>
você tem um campo do bd que já está somado os acessos? Se sim, você não precisa do count(). Aparentemente pode ser isso.
Olá, também já tentei sem usar o 'COUNT' mas continua sem incrementar o BD, que será que pode ser ?
>
Olá amigos, acabei de usar as dicas que me passaram, o erro sumiu mas o contador não está incrementando no BD. O que pode ser. O código está assi agora:
cont.asp
<%
set lojaDB = Server.CreateObject("ADODB.Connection")
lojaDB.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ= " & server.MapPath("../loja.mdb")
lojaDB.open
Dim usuario
usuario = request.form ("usuario")
sql = "SELECT COUNT(*) as acesso FROM clientes WHERE usuario='"&usuario&"'"
set tabTemp = Nothing
set tabTemp = lojaDB.execute(sql)
if tabTemp("acesso") > 0 then
sql = "INSERT INTO clientes(acesso)VALUES(1)"
set tabTemp = Nothing
set tabTemp = lojaDB.execute(sql)
else
sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"&usuario&"'"
set tabTemp = Nothing
set tabTemp = lojaDB.execute(sql)
end if
%>
sql = "SELECT COUNT(*) as acesso FROM clientes WHERE usuario='"&usuario&"'"set tabTemp = Nothingset tabTemp = lojaDB.execute(sql)response.write "<BR>SQL count: " & sql &"<BR>"if tabTemp("acesso") > 0 then sql = "INSERT INTO clientes(acesso,usuario)VALUES(1,'"&usuario&"')" set tabTemp = Nothing set tabTemp = lojaDB.execute(sql)else sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"&usuario&"'" set tabTemp = Nothing set tabTemp = lojaDB.execute(sql)end ifresponse.write "<BR>SQL update/insert: " & sql &"<BR>"qq coisa posta aki o RESPOSTA SE NAUM FUNCIONAR...Amigo(Valeu a força) mas apesar de reformular um pouco a sua dica(apenas removi as tags de html) pois a página que chama o script não terão estes dados visíveis, estes dados apenas atualizarão o contador (nomeado de : acesso) em meu BD.
Aconteceu o mesmo de antes não deu erro, mas não acrescentou +1 a tabela 'acesso' que é a tabela que guardará os acessos de cada usuario. Realmente não sei onde é que pode estar errado ????
Existiria como fazer isso através de cookies ??? incrementando os valores do bd cada vez que for realizado o acesso por cada um dos usuarios ?
<%set lojaDB = Server.CreateObject("ADODB.Connection")lojaDB.ConnectionString = "Driver={Microsoft Access Driver (.mdb)};DBQ= " & server.MapPath("../loja.mdb")lojaDB.openDim usuario Dim acessoDim sqlDim contadorusuario = request.form("usuario")sql = "SELECT COUNT() as acesso FROM clientes WHERE usuario='"&usuario&"'"set tabTemp = Nothingset tabTemp = lojaDB.execute(sql)if tabTemp("acesso") > 0 then sql = "INSERT INTO clientes(acesso,usuario)VALUES(1,'"&usuario&"')" set tabTemp = Nothing set tabTemp = lojaDB.execute(sql)else sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"&usuario&"'" set tabTemp = Nothing set tabTemp = lojaDB.execute(sql)end if%>
posta os response.write q foram colocados... para q leia entenda o pq do erro, ok....vai ser de grande ajuda pra entender o q se passa... :o
Faça um teste, fiz alterações de cabeça, por isso pode ser que algo não role de 1ª
<%set lojaDB = Server.CreateObject("ADODB.Connection")lojaDB.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ= " & server.MapPath("../loja.mdb")
lojaDB.open
Dim usuario, acesso, sql, contador
usuario = request.form("usuario")
sql = "SELECT acesso FROM clientes WHERE usuario='"& usuario &"';" 'Não é nescessário o Count, uma vez que na tabela já existe campo com o total de acessos
set tabTemp = lojaDB.execute(sql)
if tabTemp.eof then
sql = "INSERT INTO clientes(acesso,usuario)VALUES(1,'"& usuario &"');"
lojaDB.execute(sql)
else
sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"& usuario &"';"
lojaDB.execute(sql)
Acessos = tabTemp("acessos")
end if
tabTemp.Close
lojaDB.Close
Set tabTemp = Nothing
Set lojaDB = Nothing
Response.Write Acessos%>
[/tr]
Amigao, usei a sua sugestão(corrigi apenas o plural no nome 'acessos' que não existia) é dá o seguinte erro na página que chama o script:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][Driver ODBC para Microsoft Access] O campo 'clientes.usuario' não pode ser uma seqüência de caracteres de comprimento nulo.
/forlamp/cont.asp, line 12
Na página que chama o script 'index.asp' (está dentro de um diretório chamado LOJA) eu o chamo(script) através de um includeFile. Na página de login tem apenas um form com dois campos 'usuario' e 'senha'.
No BD tem a tabela clientes onde temos:
ID USUARIO SENHA NOME EMAIL ACESSO
01 JOAO ***** JOAO JOAO@.. 0
02 MARIA ***** MARIA MARIA@.. 0
E se eu alterar o código para:
<%
set lojaDB = Server.CreateObject("ADODB.Connection")
lojaDB.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ= " & server.MapPath("../loja.mdb")
lojaDB.open
Dim usuario, acesso, sql, contador
usuario = request.form("usuario")
sql = "SELECT acesso FROM clientes WHERE usuario='"& usuario &"';" 'Não é nescessário o Count, uma vez que na tabela já existe campo com o total de acessos
set tabTemp = lojaDB.execute(sql)
if tabTemp.eof then
sql = "INSERT INTO clientes(acesso)VALUES(1);"
lojaDB.execute(sql)
else
sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"& usuario &"';"
lojaDB.execute(sql)
Acessos = tabTemp("acesso")
end if
tabTemp.Close
lojaDB.Close
Set tabTemp = Nothing
Set lojaDB = Nothing
Response.Write Acesso
%>
Os erros somem , mas ai ao invés de incrementar o valor no campo acesso do BD, ele cria um novo ID, assim:
ID USUARIO SENHA NOME EMAIL ACESSO
01 JOAO ***** JOAO JOAO@.. 0
02 MARIA ***** MARIA MARIA@.. 0
03 1
Acho que estamos próximos de uma solução, mas ainda não entendi por que não tá somando o valor a um usuario existente na Tabela dentro do campo 'acesso'.
Desde já agradeço todos aqueles que estão colaborando e venham a colaborar.
O erro é que não está chegando para seu request o "usuario". Como você está fazendo no login? é junto com esse do contador? você pode fazer direto o login e o contador.
Na página login não tem nada além de um form com os campos usuario e senha, que se efeutado com sucesso vai para a pagina index.asp do diretorio \loja , e é na página index.asp que chamo o script cont.asp através do IncludeFile.
Manda sua página de login, não form, a página que processa o login que adaptamos.
Página que faz o login:
**<%@LANGUAGE="vb script:history.go(-1);">Retornar</a></td>**
</tr></table>
</body>
</html>
Onde topo.inc é o script com a conexão com o BD.
<%
Dim lojaDB
set lojaDB = Server.CreateObject("ADODB.Connection")
**lojaDB.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ= " & server.MapPath("../loja.mdb")**
lojaDB.open
%>
<STYLE TYPE='text/css'>
a.buttonStyle {
color :#000000;
font-weight :normal;
font-size :12pt;
font-family :Arial, Helvetica, sans-serif;
text-decoration :none;
background-color :#FFCC00;
height : auto;
width :150px;
border :thin solid;
border-color:#FFCC00;
}
a.buttonStyle:hover {
color :#003399;
text-decoration :none;
background-color :#FF6600;
border: thin outset;
border-color: #FFFFFF #000000 #000000 #FFFFFF;
cursor:hand;
}
**</STYLE>**
**<body topmargin="0" leftmargin="0">**
**<table width="100%" height="80" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFCC00">**
** <tr>**
** <td width="71%" background="topo.gif"> </td>**
** <td width="29%" bgcolor="#FFCC00"><form action=listaprod.asp method=query>**
** <strong><font color="#CC0000" size="2" face="Arial, Helvetica, sans-serif"><a href="./status.asp">Acompanhar **
** seus pedidos</a></font></strong> **
** </form>**
** <strong></strong></td>**
** </tr>**
**</table>**Galera Valeu a todos pela ajuda.
Fiz uma das opções de um dos amigos e deu certo
Como funcionou:
Removi os includes e coloquei o script na propria página de login, ao inves
de colocar na página que abre após o acesso. Deu certo desta forma.
Agradeço a todos http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Um abraço
Joao Carlos
Troque a parte inicial, que você marcou com Azul, por esse:
<!--#include file="Connections/lojaDB.asp" -->
<%
' *** Validate request to log in to this site.
MM_LoginAction = Request.ServerVariables("URL")
If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Request.QueryString
MM_valUsername=CStr(Request.Form("usuario"))
If MM_valUsername <> "" Then
MM_fldUserAuthorization="nivel"
MM_redirectLoginSuccess="loja/index.asp"
MM_redirectLoginFailed="cadastro.asp"
MM_flag="ADODB.Recordset"
set MM_rsUser = Server.CreateObject(MM_flag)
MM_rsUser.ActiveConnection = MM_lojaDB_STRING
MM_rsUser.Source = "SELECT usuario, senha, Acesso"
If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization
MM_rsUser.Source = MM_rsUser.Source & " FROM clientes WHERE usuario='" & Replace(MM_valUsername,"'","''") &"' AND senha='" & Replace(Request.Form("senha"),"'","''") & "'"
MM_rsUser.CursorType = 0
MM_rsUser.CursorLocation = 2
MM_rsUser.LockType = 3
MM_rsUser.Open
If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then
' username and password match - this is a valid user
Session("MM_Username") = MM_valUsername
sql = "UPDATE clientes SET acesso = acesso + 1 WHERE usuario='"& Replace(MM_valUsername,"'","''") &"' AND senha='"& Replace(Request.Form("senha"),"'","''") &"';"
lojaDB.execute(sql)
Session("Acessos") = MM_rsUser("acesso")
If (MM_fldUserAuthorization <> "") Then
Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value)
Else
Session("MM_UserAuthorization") = ""
End If
if CStr(Request.QueryString("accessdenied")) <> "" And false Then
MM_redirectLoginSuccess = Request.QueryString("accessdenied")
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginSuccess)
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginFailed)
End If
%>
Esse code só conta a visita de usuários cadastrados, e armazena o valor na session
q tal tentar dar um espaço entre 'COUNT(*)' e 'acesso' ???