Ir para conteúdo

POWERED BY:

Arquivado

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

WRJann

[Resolvido] como transformar um valor de request.QueryString em n

Recommended Posts

Estou fazendo um sistema de comentários específico para determinada mensagem.

O usuário clica no formulário que envia a informação para postar.asp .

Ali estou com dificuldade pois para pegar o valor que identifica a mensagem estou usando um request.QueryString.

 

Quando eu posto o comentário me aparece este erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)

[Microsoft][Driver ODBC para Microsoft Access] Tipo de dados imcompatível na expressão de critério.

/sgp/postar.asp, line 11

Que pelo que olhei em outra fórum há um conflito de tipo de dados. Realmente, no meu banco de dados preciso de um valor numérico.

 

Tentei alterar o código e apareceu este erro:

 

Erro de compilação do Microsoft VBScript (0x800A03EE)

')' esperado

/sgp/postar.asp, line 4, column 34

id = (request.QueryString("id"), 1)

---------------------------------^

Sendo assim, alguém saberia me informar como transformar um valor de request.QueryString em número?

Sou iniciante e tenho dificuldades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

converte ele antes, use o CInt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum, obrigado.

Um outro moderador me respondeu no fórum da MSDN.

Ele passou assim:

id = request.QueryString("id")

id = Cint(id)

 

No entanto, esbarrei em outro problema.

 

Vou expor todo o caso:

 

tenho uma página verMensagem.asp:

 

<!--#include file="includes/config.asp" -->
<%
 call connect
 
 dim rs, id, cm
   id = request.QueryString("id")
 set rs = con.execute( "SELECT * FROM TB_MENSAGENS WHERE COD_MENSAGEM=" & id )
 set cm = con.execute( "SELECT * FROM TB_COMENTARIOS WHERE STATUS=TRUE ORDER BY ID DESC" )
%>
<html>
<head>
<title>teste</title>
<style type="text/css">
@import url('css_Js/Estilo.css');
</style>
<script type="text/javascript" src="css_Js/validacao.js"></script>
</head>
<body>
<div id="container">

 <div id="corpo">
  <img src="Img/banner_mensagens.jpg" alt="Mensagens" title="Mensagens" />
        <div class="titulo_corpo">   <%=rs("titulo")%>   </div>
  <div class="chamada_corpo">   <%=rs("chamada")%>   </div>
  <div class="texto_corpo">   <%=replace( rs("texto"), vbcrlf, "<br/>")%>   </div>
    <div class="autor_corpo"><%=rs("autor")%></div>
  <div class="desc_autor_corpo"><%=rs("fonte")%></div>
  <div class="publicado_corpo"><%=formatDateTime(rs("data_registro"), 1)%></div>
  
  <input type="button" value="Postar Comentário" class="bt" onclick="mostrarOcultar('formMural')" />
 
 <form id="formMural" name="formMural" method="post" action="postar.asp" onsubmit="return validarMural()" style="display:none;">
  <table width="270" border="0" align="center" cellspacing="3" class="borderPostRecado">
    <tr>
   <td height="25" colspan="2" bgcolor="#F1F1F1"><strong>   Postar Recado </strong></td>
    </tr>
    <tr>
   <td align="right" valign="top">Nome:  </td>
   <td align="right">
    <input name="nome" type="text" id="nome" size="32" />
   </td>
    </tr>
    <tr>
   <td align="right" valign="top">E-mail:  </td>
   <td align="right">
    <input name="email" type="text" id="email" size="32" />
   </td>
    </tr>
    <tr>
   <td align="right" valign="top">Mensagem:  </td>
   <td align="right">
    <textarea 
     name="mensagem" 
     cols="30" 
     rows="3" 
     id="mensagem" 
     onkeyup="formataTexto(this)" 
     onkeydown="formataTexto(this)"></textarea>
   </td>
    </tr>
    <tr>
   <td> </td>
   <td align="right">
    <span id="txtMensagem">Caracteres: 0 de 200</span>
    <input name="Submit" type="submit" class="bt" value="Postar" />
   </td>
    </tr>
      </table>
  </form>
      
   <h1 class="autor_corpo">Lista de Comentários</h1>
   
   <%
   while not cm.eof
   %>
   <table width="500" border="1" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td width="100" align="right"><strong>Nome:</strong></td>
          <td><%=cm("nome")%></td>
        </tr>
        <tr>
          <td height="23" align="right"><strong>Mensagem:</strong></td>
          <td><%=cm("mensagem")%></td>
        </tr>
        <tr>
          <td> </td>
          <td align="right"><%=formatDateTime(cm("data_registro"), 1)%></td>
        </tr>
    </table>
 <br/>
 <%
  cm.movenext
  Wend
 %>
       
   </div>
 
<!--#include file="Includes/rodape.asp" -->  
</div>
 
</body>
</html>
<%
 cm.close
 set cm = nothing
 call desconnect
%>
 
[color="#FF0000"]que direciona o comentário para postar.asp[/color]
 
<!--#include file="Includes/Config.asp" -->
<%
 dim nome, email, mensagem, id
id	= request.QueryString("id")
id	= Cint(id)
  nome   = request.Form("nome")
  email   = request.Form("email")
  mensagem  = request.Form("mensagem")
 
 call connect
 ' inserir
 con.execute ("INSERT INTO TB_COMENTARIOS (NOME, EMAIL, MENSAGEM, ID_MENSAGEM)"&_
    " VALUES ('"&nome&"', '"&email&"', '"&mensagem&"', '"&id&"')")
 
 call desconnect
 
 response.Redirect("verMensagem.asp?id='"&id&"'")
  
%>

Quando eu posto o comentário dá o seguinte erro:

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][Driver ODBC para Microsoft Access] Não é possível adicionar ou alterar registros, pois é necessário que eles tenham um registro relacionado na tabela 'TB_MENSAGENS'.

/sgp/postar.asp, line 11

 

A linha 11 do postar.asp é:

 

con.execute ("INSERT INTO TB_COMENTARIOS (NOME, EMAIL, MENSAGEM, ID_MENSAGEM) VALUES ('"&nome&"', '"&email&"', '"&mensagem&"', '"&id&"')")

 

O Relacionamento das Tabelas no BD é o seguinte:

 

Na TB_MENSAGENS, o COD_MENSAGEM está relacionado 1 para muitos com ID_MENSAGEM da TB_COMENTARIOS

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele está reclamando que não tem um registro relacionado na tabela principal

 

verificou isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique a ortografia. pode ser um nome de coluna Invalido 'sua_coluna'. A coluna a qual você se refere na Base de Dados não foi encontrada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mário e Xanburzum, desculpem a demora em responder. Trabalho por escala e estão vendo agora as respostas.

Eu olhei todos os nomes das duas tabelas do Banco de dados.

Na página verMensagem.asp , modificando os dados da tabela TB_COMENTARIOS direto no Access , as modificações são apresentadas normalmente. Só na hora de incluir via arquivo postar.asp é que dá esse erro:

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][Driver ODBC para Microsoft Access] Não é possível adicionar ou alterar registros, pois é necessário que eles tenham um registro relacionado na tabela 'TB_MENSAGENS'.

/sgp/postar.asp, line 12

Os dados que estão no Banco de dados são estes:

 

TB_MENSAGENS:

 

COD_MENSAGEM

TITULO

CHAMADA

TEXTO

AUTOR

FONTE

STATUS

DATA_REGISTRO

 

TB_COMENTARIOS:

 

ID

COD_MENSAGEM

NOME

EMAIL

MENSAGEM

STATUS

DATA_REGISTRO

 

Achei um erro na programação da pág. verMensagem.asp, e ficou assim:

 

<!--#include file="includes/config.asp" -->
<%
	call connect
	
	dim rs, id, cm
			id = request.QueryString("id")
	set rs = con.execute( "SELECT * FROM TB_MENSAGENS WHERE COD_MENSAGEM="&id )
	set cm = con.execute( "SELECT * FROM TB_COMENTARIOS WHERE COD_MENSAGEM="&id& "AND STATUS=TRUE ORDER BY ID DESC")
	
%>

A principio, não consigo ver onde está o erro.

Xanburzum, quando você diz "um nome de coluna Invalido 'sua_coluna'", isso se refere aos itens da tabela do Banco de Dados?

Se for os nomes estão aparentemente corretos.

 

Não sei se usei a lógica certa para fazer este tipo de sistema de comentários de mensagens. Caso eu esteja errado, existe outra maneira melhor de fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

este erro geralmente é um nome errado, um erro de ortografia, mas dê um response.write na sua string SQL para ver o que esta sendo passado

response.write(SQL)

response.end()

 

e também verifique se esta recebendo um valor NULL em uma coluna que não aceita

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei o response.write nas variáveis do sql (era isso?)

 

A variável 'id' está recebendo o valor '0' (zero) em todas as mensagens que testo.

 

Será que é isso?

 

Não sei se a sintaxe que usei no código está certa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique o tipo que esta a variavel no banco....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum, o tipo desta variavel no banco é número.

 

Eu estava refletindo se não estou recuperando esta informação de forma errada no request.QueryString("id"). Pelo meu código acima o que você acha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você estiver usando no formulario o método Post , recupere atraves do request.form

Compartilhar este post


Link para o post
Compartilhar em outros sites

WRJann, eu estava olhando o seu codigo reparei que esta um pouco diferente do que eu costumo usar. Fiz algumas observações... vou postar com algumas alterações...

<!--#include file="Includes/Config.asp" -->
<%
 dim rs, nome, email, mensagem, id
	id   		= request.QueryString("id")
	id   		= Cint(id)
  	nome 		= request.Form("nome")
  	email		= request.Form("email")
  	mensagem  	= request.Form("mensagem")
 
 call connect
 ' inserir
set rs = con.execute ("INSERT INTO TB_COMENTARIOS (NOME, EMAIL, MENSAGEM, ID_MENSAGEM) VALUES ('"&nome&"', '"&email&"', '"&mensagem&"', '"&id&"')")
 
 call desconnect
 
 response.Redirect("verMensagem.asp?id='"&id&"'")
  
%>

Eu declarei uma variavel "rs".

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro é esse

 

você precisa incluir o registro observando que no campo que relaciona as tabelas tem que ter um identificador existente na outra tabela

 

tem que respeitar o relacionamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele esta gerando erro ainda, se sim , poste o número do erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, desculpem a demora em responder voces, mas trabalho por escala e à noite.

Bom, não consegui resolver ainda.

 

O erro continua sendo:

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][Driver ODBC para Microsoft Access] Não é possível adicionar ou alterar registros, pois é necessário que eles tenham um registro relacionado na tabela 'TB_MENSAGENS'.

/sgp/postar.asp, line 12

Fiz as alterações sugeridas pelo Gilberto Jr e continua com o mesmo erro.

 

Eu acho que estou recuperando de forma errada o código que identifica qual mensagem se refere o comentário.

Vejam abaixo meu postar.asp:

 

<!--#include file="includes/config.asp" -->
<%
	dim rs, nome, email, mensagem, id
	    id              = request.QueryString("id")
		id              = Cint(id)        
		nome            = request.Form("nome")        
		email           = request.Form("email")        
		mensagem        = request.Form("mensagem")	
	
	call connect
	' inserir
	set rs = con.execute ("INSERT INTO TB_COMENTARIOS (NOME, EMAIL, MENSAGEM, COD_MENSAGEM) VALUES ('"&nome&"', '"&email&"', '"&mensagem&"', '"&id&"')")
	
	call desconnect
	
	response.Redirect("verMensagem.asp?id='"&id&"'")
		
%>

Digo isso pois dando o response.write, a variável 'id' está recebendo o valor '0' (zero) em todas as mensagens que testo.

 

No formulário abaixo, vocês poderiam me ajudar exemplificando como enviar o id da mensagem para o arquivo postar.asp. Tentei fazer alguma coisa neste sentido e também não consegui:

 

<form id="formMural" name="formMural" method="post" action="postar.asp" onsubmit="return validarMural()" style="display:none;">
		<table width="300" border="0" align="center" cellspacing="3" class="borderPostRecado">
		  <tr>
			<td height="25" colspan="2" bgcolor="#F1F1F1" class="form"><strong>   Postar Recado </strong></td>
		  </tr>
		  <tr>
			<td align="right" valign="top">Nome:  </td>
			<td align="right">
				<input name="nome" type="text" id="nome" size="32" />
			</td>
		  </tr>
		  <tr>
			<td align="right" valign="top">E-mail:  </td>
			<td align="right">
				<input name="email" type="text" id="email" size="32" />
			</td>
		  </tr>
		  <tr>
			<td align="right" valign="top">Mensagem:  </td>
			<td align="right">
				<textarea 
					name="mensagem" 
					cols="30" 
					rows="6" 
					id="mensagem" 
					onkeyup="formataTexto(this)" 
					onkeydown="formataTexto(this)"></textarea>
			</td>
		  </tr>
		  <tr>
			<td> </td>
			<td align="right">
				<span id="txtMensagem">Caracteres: 0 de 200</span>
				<input name="Submit" type="submit" class="bt" value="Postar" />
				
			</td>
		  </tr>
      </table>
  </form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, esquece o que eu disse hehehe.. eu estava achando que você estava fazendo um update.

 

 

é o Seguinte! o que voce esta tentando incluir em uma tabela nao tem na outra do relacionamento!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema Resolvido

 

O Gilberto Jr me ajudou a resolver sugerindo o seguinte:

 

Primeiro passo!

Você recuperou todos os valores do form certinho mas nao recuperou o ID da mensagem, da forma que voce fez ate funcionaria se fosse uma exibicao mas como é uma insercao nao tem como você usar a request.querystring voce tem request.form.

 

O que voce deve fazer, jogar o ID_MENSAGEM dentro do formulario, isso é simples é so você colocar um <input type=hidden name=postar /> com o value <%=rs("COD_MENSAGEM")%>.

 

e na hora de recupar o valor do form você altera de id = request.querystring("id") para request.form("postar").

 

no seu response.redirect o id você esta usando ele como string e ele nao é uma string é um numero, entao você faz o seguinte response.redirect "verMensagem.asp?id="&id

 

Segui estes passos e funcionou. O detalhe é que eu não estava sabendo como recuperar o valor correspondente ao código identificador da mensagem.

 

Agradeço a todos que colaboraram e me ajudaram e muito.

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.