Ir para conteúdo

POWERED BY:

Arquivado

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

Cesão

Comparação de campos de tipos diferentes

Recommended Posts

Como faço para comparar dois campos de tipos diferentes? ele dah essa falha:

 

Tipo de erro:

Microsoft JET Database Engine (0x80004005)

Tipo não coincidente na expressão.

 

Comparação:

<%sql="SELECT * FROM pesq_votos a, pesq_respostas b WHERE a.id_user="&id&" and a.id_perg=b.id_perg and a.id_resp=b.id_resp"	set rs_votos=conexao.execute(sql)%>

Soh que eh o seguinte... um eh tipo TEXTO e o outro AUTONUMERAÇÃO...

(a.id_resp eh texto e b.id_resp eh autonumeração)

 

(se for o Salgado que for responder, ele vai lembrar do que estou falando... pois na tabela de votos, o campo id_resp tinha que ser texto para poder caber as respostas do checkbox... e agora to tendo que comparar esse id_resp com o id_resp da tabela de respostas p mostrar quais respostas são)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ver se rola:

<%
sql="SELECT * FROM pesq_votos a, pesq_respostas b WHERE a.id_user="& id &" and a.id_perg=b.id_perg and b.id_resp IN (b.id_resp)"
set rs_votos=conexao.execute(sql)
%>

Repare que usei o IN na SQL, como b.id_resp deve vir com "," deve funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho...

 

usei esse codigo:

<%sql="SELECT * FROM pesq_votos a, pesq_respostas b WHERE a.id_user="& id &" and a.id_perg=b.id_perg and b.id_resp IN (a.id_resp)"	set rs_votos=conexao.execute(sql)%>

E continua dando o MESMO erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem querer ser intrometido ehehe:Vi o seu topico anterior.Pelo que intendi você quer relacionar os tabelas.PQ você não usa um campo numerico em ""pesq_respostas"" para relacionar ao campo autonumerico de "pesq_votos", axu que desta forma seria mais viável.Obs.: Não realmente se é isso a sua dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas o pesq_respostas eh autonumerico... o que nao eh numerico (eh texto) eh o da pesq_votos... e nao posso deixar o mesmo numerico pois ele recebe dados de checkbox, ou seja, vários resultados separados por virgulas (Ex: 12, 10, 15, 3, 14)Alguem pode me ajudar??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como faço esse CAST?? tem como você demonstrar p mim como faz ai?Mas se eu converter o campo, ele vai reconhecer as virgulas e talz que existem no conteudo dele?E como eu faço esse "IN" ai... pq a comparação seria mais ou menos essa mesmo... em um dos campos vai existir apenas 1 numero (Ex: 12) e no outro vai existir vários (Ex: 10, 12, 15, 20, 22)...E eu preciso comparar esses dois campos... como faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem pode me ajudar??

Compartilhar este post


Link para o post
Compartilhar em outros sites

preciso disso meio urgente... alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos fazer uma alteração na lógica de inserção e no BD? Passe o campo para inteiro e poste como está a parte que insere esses dados no BD para fazermos a alteração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas qual campo eu tenho que passa para inteiro?

O que era Autonumeração (relativo as respostas)?

Ou o que era de texto (relativo aos votos que recebia os IDs de checkbox e radio e talz)?

 

Aqui vai meu código de inserção:

<!-- #include file="conn/conexao.asp" --><%id_user = Request.Form("id_user")idade = Request.Form("idade")sql="SELECT * FROM pesq_perguntas WHERE tipo='1' ORDER BY id_perg"	set rs_perg=conexao.execute(sql)	sql="SELECT * FROM pesq_perguntas WHERE tipo='2' ORDER BY id_perg"	set rs_perg2=conexao.execute(sql)	sql="SELECT * FROM pesq_perguntas WHERE tipo='4' ORDER BY id_perg"	set rs_perg4=conexao.execute(sql)	sql="SELECT * FROM pesq_perguntas WHERE tipo='3' ORDER BY id_perg"	set rs_perg3=conexao.execute(sql)SQL="INSERT INTO pesq_idade (id_user,idade) VALUES("& id_user &", '"& idade &"')"'Response.Write(SQL &"<BR>")conexao.Execute(SQL)	While Not rs_perg.EOFid_perg = cstr(rs_perg(0))Resposta = Request.Form(id_perg) ' Acredito que tenha usado o ID da pergunta para nomear os campos da resposta.SQL="INSERT INTO pesq_votos (id_user,id_perg,id_resp) VALUES("& id_user &", "& id_perg &", '"& resposta &"')"'Response.Write(SQL &"<BR>")conexao.Execute(SQL)rs_perg.movenextWendWhile Not rs_perg2.EOFid_perg2 = cstr(rs_perg2(0))Resposta = Request.Form(id_perg2) ' Acredito que tenha usado o ID da pergunta para nomear os campos da resposta.SQL="INSERT INTO pesq_votos (id_user,id_perg,id_resp) VALUES("& id_user &", "& id_perg2 &", '"& resposta &"')"'Response.Write(SQL &"<BR>")conexao.Execute(SQL)rs_perg2.movenextWendWhile Not rs_perg4.EOFid_perg4 = cstr(rs_perg4(0))respostatxt = Request(id_perg4)SQL="INSERT INTO pesq_respostas_texto (id_user,id_perg,resposta) VALUES("&id_user&", "& id_perg4 &", '"&respostatxt&"')"'Response.Write(SQL &"<BR>")conexao.Execute(SQL)rs_perg4.movenextWendWhile Not rs_perg3.EOFid_perg3 = cstr(rs_perg3(0))nota = Request(id_perg3)SQL="INSERT INTO pesq_notas (id_user,id_perg,nota) VALUES("&id_user&", "& id_perg3 &", '"&nota&"')"'Response.Write(SQL &"<BR>")conexao.Execute(SQL)rs_perg3.movenextWend%><%response.redirect "pesquisa_ok.asp"conexao.close()Set conexao = nothing%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo que recebe as respostas virará Inteiro.

 

Qual dos tipos 1 ou 2 é o CheckBox?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O tipo 2...O tipo 1 eh radio...o tipo 2 eh checko 3 eh campo de texto normalo 4 eh campo de texto Multilinha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, então vamos alterar esse trecho:

While Not rs_perg2.EOF

id_perg2 = cstr(rs_perg2(0))

Resposta = Request.Form(id_perg2) ' Acredito que tenha usado o ID da pergunta para nomear os campos da resposta.

SQL="INSERT INTO pesq_votos (id_user,id_perg,id_resp) VALUES("& id_user &", "& id_perg2 &", '"& resposta &"')"

'Response.Write(SQL &"<BR>")

conexao.Execute(SQL)

rs_perg2.movenext

Wend

Para:

While Not rs_perg2.EOF
id_perg2 = cstr(rs_perg2(0))
Resposta = Request.Form(id_perg2) ' Acredito que tenha usado o ID da pergunta para nomear os campos da resposta.
If InStr(Resposta,",") <> 0 Then
Arr_Resposta = Split(Resposta,",")
For x = LBound(Arr_Resposta) To UBound(Arr_Resposta)
SQL="INSERT INTO pesq_votos (id_user,id_perg,id_resp) VALUES("& id_user &", "& id_perg2 &", '"& Arr_Resposta(x) &"')"
conexao.Execute(SQL)
Next
Else
SQL="INSERT INTO pesq_votos (id_user,id_perg,id_resp) VALUES("& id_user &", "& id_perg2 &", '"& resposta &"')"
conexao.Execute(SQL)
End If
rs_perg2.movenext
Wend

Àpartir disso o relacionamento do início será direto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, agora ele vai inserir 1 registro para cada resposta de checkbox??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei o que você me passo, mas dah esse erro:Tipo de erro:Microsoft JET Database Engine (0x80040E07)Tipo de dados imcompatível na expressão de critério./yazigi2/add_pesquisa.asp, line 27

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci de tirar as ' do campo da resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eh, eu jah tinha testado isso tbm, mas dah o MESMO erro...E eu jah alterei o campo de TEXTO para NÚMERO no DB....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, Coloque o response.Write(SQL &"<BR>") alí e comente o Conexao.execute. Vamos ver se alguém está vindo vazio.

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.