Ir para conteúdo

Arquivado

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

Fácil Buscar

[Resolvido] UPDATE de contador de visitas MYSQL e ASP

Recommended Posts

Olá, tenho um contador de visitas em ASP com acesso ao banco de dados MYSQL. Acontece que ao atualizar as tabelas com um novo número de visita, dá o seguinte erro abaixo:

Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 = 1 where ano = 2017' at line 1

/combo1/contador/conta.asp, line 58

 

Essa é a página:

<%@ Language=VBScript %>
<!--#include file="conexao.asp" -->
<%
Session.LCID = 1046

dim RsRevisitas, RsVisitas, RsMes, RsDia, RsTotalMes, RsTotalDia, RsIn, vSQL
dim vData, aData, vDia, vMes, vAno, totalMes, totalDia, totalAno, x

vData = FormatDateTime(Date(), 2)
aData = Split(vData, "/")
vDia     = Trim(aData(0))
vMes     = Trim(aData(1))
vAno     = Trim(aData(2))
sub executa


'--------------------------------------------------------------------------------------------------
'    1.2 - aqui estes selects pegarão a quantidade de visitantes por mes e dia respectivamente.
    

vSQL = "select * from db_mes order by ano desc"
    set RsTotalMes = cnnDB.execute(vSQL)
    totalAno = RsTotalMes(1) + RsTotalMes(2) + RsTotalMes(3) + RsTotalMes(4) + RsTotalMes(5) + RsTotalMes(6) +_
                   RsTotalMes(7) + RsTotalMes(8) + RsTotalMes(9) + RsTotalMes(10) + RsTotalMes(11) + RsTotalMes(12)
    vSQL = "select * from db_dia where "& vDia &" = "& vDia &" and mes = "& vMes & " and ano = '" & vAno &"' "
    set RsTotalDia = cnnDB.execute(vSQL)


'---------------------------------------------------------------------------------------------------
'    1.3 - se o ano atual(vAno) for maior do que o que está sendo selecionado na tb_mes.ano
'            o código insere mais um grupo de doze(12) linhas representando o novo ano que se inicia na db_dia
'            para fazer a contagem de visitantes por dias do mês
'            e insere tbm mais uma linha na db_mes para fazer a contagem dos visitantes de um determinado mês.
  

 if vAno > RsTotalMes("ano") then
        for x = 1 to 12
            vSQL = "insert into db_dia ( "&_
                       "    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "&_
                       "    13, 14, 15, 16, 17, 18, 19, 20, 21, 22, "&_
                       "    23, 24, 25, 26, 27, 28, 29, 30, 31, mes, ano) "&_
                       "values( "&_
                       "    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "&_
                       "    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "&_
                       "    0, 0, 0, 0, 0, 0, 0, "& x &", "& vAno &")"
            set RsIn = cnnDB.execute(vSQL)
            set RsIn = nothing
        next
    
        vSQL = "insert into db_mes ( "&_
                   "    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ano) "&_
                   "values( "&_
                   "    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "& vAno &")"
        set RsIn = cnnDB.execute(vSQL)
    end if


'----------------------------------------------------------------------------------------------------
'    1.4 - após pegar a quantidade de visitantes por mes e dia no ítem 1.2
'            aqui é feito o incremento de mais um visitante e ao mesmo tempo
'            as db_mes e db_dia são atualizadas com os novos valores de acordo com o dia atual.

'if Request.Cookies("IP")("UsuarioIP") = request.servervariables("REMOTE_ADDR") then
'else

        totalMes = RsTotalMes(vMes) + 1
        cnnDB.execute = "update db_mes set "& vMes &" = "& totalMes &" where ano = "& RsTotalMes("ano") &" "
        set RsDia = cnnDB.execute(vSQL)
        totalDia = RsTotalDia(vDia) + 1
        cnnDB.execute = "update db_dia set "& vDia &" = "& totalDia &" where mes = "& vMes &" and ano = '"& vAno &"' "
        set RsDia = cnnDB.execute(vSQL)
        
'Response.Cookies("IP")("UsuarioIP") = request.servervariables("REMOTE_ADDR")
'end if        
'-----------------------------------------------------------------------------------------------------
end sub

sub detona
    set RsRevisitas = nothing
    set RsVisitas     = nothing
    set RsTotalMes = nothing
    set RsTotalDia     = nothing
    set RsMes         = nothing
    set RsIn             = nothing
    set RsDia         = nothing
    set RsUpd         = nothing
    cnnDB.close()
end sub
%>

<%
executa
detona
%>

 

Pode me ajudar? sou novato e preciso muito dessa atualização.

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos, boa tarde!

Então, encontrei a solução baseada na orientação de um amigo. Mudei os nomes das tabelas no banco de dados de 1,2,3,... para m1,m2,m3,... e mudei o código fonte da página que fazia a consulta e a atualização e funcionou perfeitamente.

Segue abaixo a solução para que derrepente sirva de auxílio para outra pessoa.

<!--#include file="conexao.asp" -->

<%
Session.LCID = 1046

dim RsRevisitas, RsVisitas, RsMes, RsDia, RsTotalMes, RsTotalDia, RsIn, vSQL
dim vData, aData, vDia, vMes, vAno, totalMes, totalDia, totalAno, x

vData = FormatDateTime(Date(), 2)
aData = Split(vData, "/")
vDia	 = Trim(aData(0))
vMes	 = Trim(aData(1))
vAno	 = Trim(aData(2))
%>
<%
vSQL = "select * from db_mes order by ano desc"
	set RsTotalMes = cnnDB.execute(vSQL)
totalano = 0

	totalAno = totalAno + RsTotalMes("m1") + RsTotalMes("m2") + RsTotalMes("m3") + RsTotalMes("m4") + RsTotalMes("m5") + RsTotalMes("m6") +_
				   RsTotalMes("m7") + RsTotalMes("m8") + RsTotalMes("m9") + RsTotalMes("m10") + RsTotalMes("m11") + RsTotalMes("m12") 


	vSQL = "select * from db_dia where "& vDia &" = "& vDia &" and mes = "& vMes & " and ano = '" & vAno &"' "
	set RsTotalDia = cnnDB.execute(vSQL)

if vAno > RsTotalMes("ano") then
		for x = 1 to 12
		
		vSQL = "Insert into db_dia (mes,ano) values ("& x &", "& vAno &")"
		set RsIn = cnnDB.execute(vSQL)
		set RsIn = nothing
		next
		
		vSQL = "insert into db_mes (ano) values("& vAno &")"
		set RsIn = cnnDB.execute(vSQL)

end if
'aqui entra uma consulta de cookies para contabilizar apenas um acesso por IP
if Request.Cookies("IP")("UsuarioIP") = request.servervariables("REMOTE_ADDR") then
else

'aqui atualiza a tabela mensal
a=vmes
b="m"
mes=b&a		
		totalMes = RsTotalMes(mes) + 1
		cnnDB.execute = "update db_mes set "&mes&" = "& totalMes &" where ano = "& RsTotalMes("ano") &""

'aqui atualiza a diaria
c=vdia
d="d"
dia=d&c			
		totalDia = RsTotalDia(dia) + 1
        cnnDB.execute = "update db_dia set "&dia&" = "& totalDia &" where mes = "& vMes &" and ano = '"& vAno &"' "
    
Response.Cookies("IP")("UsuarioIP") = request.servervariables("REMOTE_ADDR")
end if	    
		
%>	

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por vicente386
      Ola. Tenho uma tabela no 3 campos que sao "LIVRO, POS, PAGINA" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
      estou tentando fazer assim:
      <?php > ini_set('max_execution_time', 2000); $pdo = new > DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD); > $sql = $pdo->prepare("SELECT count(*) FROM tabela2018"); > $sql->execute(); > $livro = 1; > foreach($sql as $obj){ > $variavel = $obj[0]; > ceil((float)$variavel/100); > $qtdlaco = ceil((float)$variavel/100); > for ($id = 1; $id <= 35; $id++) { > for($L=1; $L < $qtdlaco; $L++) { > for ($P = 0; $P <= 30; $P++) { > $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id"); > $sql->bindValue(':LIVRO', $livro); > $sql->bindValue(':POS', $P); > $sql->bindValue(':PAGINA', $L); > $sql->execute(); > } > } > } >} ?> mas na tebela so aparece: LIVRO POS PAGINA 1 30 83 1 30 83 1 30 83 e nao como deveria : LIVRO POS PAGINA 1 0 1 1 1 1 1 2 1
    • Por lezão
      Boa tarde, galera!
      Td bem com vcs?
       
      Estou precisando de um UPDATE que qnd eu seleciono o checkbox e clico no botão submit ele chama para a pagina que ira fazer a alteração.
      Tenho um exemplo só que  em asp, vejam abaixo:
      Imagem UPDATE
       
      espero ter explicado certo.
       
      obrigado!
       
    • Por Samuel Pietro
      Estou com a seguinte situação.
       
      Preciso que o Update só aconteça nos campos vazios. Por exemplo, tenho no CSV 
      id;a;b;c 1;1;;3 1;1;2;;  
      |id | a | b | c |
      | 1 | 1 |    | 3 |
      | 1 | 1 | 2 |  |
       
      Na primeira linha tenho o campo da coluna b em branco, logo ele irá inserir no banco de dados o conteúdo da primeira linha, quando ele ler a segunda linha irá ver que a minha key, que é a coluna id, já existe e irá atualizar, o problema é que eu preciso que  atualize apenas os campos em branco, pois se atualizar todos os campos ele iria substituir o campo da coluna c que ficaria em branco !
       
      O código que fiz até o momento! 
      INSERT INTO tabela (id, a, b, c) VALUES ('$column[0]','$column[1]','$column[2]','$column[3]') on duplicate key UPDATE id='$column[0]',a='$column[0]', b='$column[0]', c='$column[0]'  
      Gostaria da ajuda de vocês para saber como posso adequar esse código na minha necessidade, seria tipo adcionar is null UPDATE.. sei lá, tentei várias opções mas sem sucesso ainda! 
       
       
       
       
    • Por FERREIRA FILHO
      Estou tentando fazer um update de vários registros com checkbox, mais não está atualizando no banco de dados MySQL. Segue o meu código, desde já agradeço!
       
      <?php 
      include_once("../config/conexao.php");

      $nivel = $_SESSION['nivel'];
         
      if ($_SESSION['nivel'] == 4)
          {
      $sql = "SELECT ID, NOME, VOLUNTARIO FROM cidadao ORDER BY NOME";
      $res = mysql_query($sql) or die (mysql_error() );
      if (mysql_num_rows($res) > 0 )
      echo '<form method="post">';
      ?>
      <table width="431" border="0" align="center" cellpadding="0" class="bordaFina">
          <tr bgcolor="#999999" >
            <td width="302" align="center" valign="middle" bgcolor="#F0F0F0" class="style27">Nome  </td>
            <td width="123" align="center" valign="middle" bgcolor="#F0F0F0" class="style27">Voluntário</td>
          </tr>
          <?php
      while ($row = mysql_fetch_assoc($res))
          {     
          ?>
          <tr >
            <td><?php echo $row["NOME"];?></div></td>
        <td ><div align="center"> 
       <input type="checkbox" name= "VOLUNTARIOS[<?php  $row["ID"] ?>]" value="1" <?php if($row["VOLUNTARIO"] == 1){ echo "checked";} ?>> 
       <input type="hidden" name= "VOLUNTARIOS[<?php $row["ID"] ?>]" value="0" <?php if($row["VOLUNTARIO"] == 0){ echo ""; }  ?>>
        </div></td>
        </tr>
          <?php 
        }  //End While
        ?>
      </table>
        
      <p><div align="center"><?php echo '<input type="submit"name= "submit" value= "Salvar">';?></div>
        <?php
      if (isset ($_POST["submit"]))
      {        
              foreach($_POST['VOLUNTARIOS'] as $ID => $VOL) 
                {mysql_query("update cidadao SET VOLUNTARIO ='$VOL' WHERE ID='$ID'")or die(mysql_error()); }                    
                 echo "<meta HTTP-EQUIV='refresh' CONTENT='1;URL=teste.php'>";
      }
      ?>
      <?php
      echo'<br>';
      echo '</form>';
      }//endif
      ?>
       

    • Por FabianoSouza
      Pessoal, tenho uma lista com 100.000 nomes.
      Preciso colocar o campo sexo para esses registros.
       
      Os colegas sabem dizer se há alguma técnica, ferramenta ou função para realizar esse trabalho?
       
      Tive uma ideia de fazer uma comparação usando  um "dicionário de nomes". Isso seria um caminho viável? Alguém teria um dicionário para disponibilizar?
       
       
      Grato.
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.