Ir para conteúdo

POWERED BY:

Arquivado

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

~Thiago Lara

[Resolvido] Problema com BOF e EOF..

Recommended Posts

Bom...

Deixa eu explicar, eu tenho um sistema de quiz, rodando em um site que faz promoçoes sempre, cada quiz tem 3 perguntas... e são 5 ganhadores por quiz.

 

Eu pretendo então criar uma pagina com o resultado exibindo somente os ganhadores ou seja que acertaram as 3 opçoes do quiz..

 

resumindo eu tenho as tabelas:

 

quiz

cd_quiz

quiz

data_inicio

data_final

 

quiz_conteudo

cd_quizconteudo

cd_quiz

pergunta

resposta1

resposta2

resposta3

resposta4

correta

 

quiz_controle

cd_quiz

cd_quizconteudo

cd_usuario

resposta

 

 

Ou seja, no controle que eu faço a verificação das respostas dos usuarios com a resposta certa da tabela conteudo...

o problema é que eu já consegui exibir apenas os ganhadores porem no final da um erro ! eu sei pq mas n sei resolver...

 

a logica é :eu pego todos os usuários que acertaram a primeira resposta do quiz que eu estou verificando os ganhadores, entao eu faço uma segunda sql selecionando apenas desses todos que acertaram a primeira somente os que acertaram a segunda.. e assim até a terceira..

 

 

o erro é o seguinte: nem todos os usuarios que acertaram a primeira acertaram a segunda resposta ai quando vai selecionar na segunda SQL no banco de dados já da erro na linha 109.. (que está comentada..)

alguém tem alguma sugestao?

 

o código roda certinho mostra os ganhadores mas no final da erro ...

 

Sérgio Trestini

 

ADODB.Field error '800a0bcd'

 

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

 

/locadora/quiz_resultado.asp, line 109

 

 

CÓDIGO:

 

<%
	sql3 = "select * from quiz_controle where resposta="&correta1&" and cd_quiz="&cd_quiz
	set rs3 = conexao.execute(sql3)
	while not rs3.eof
		cd_usuario = rs3("cd_usuario")
		sql4 = "select * from quiz_controle where resposta="&correta2&" and cd_usuario="&cd_usuario&" and cd_quiz="&cd_quiz
		set rs4 = conexao.execute(sql4)
			resposta2 = rs4("resposta") ' LINHA 109
			if correta2 = resposta2 then
			sql5 = "select * from quiz_controle where resposta="&correta3&" and cd_usuario="&cd_usuario&" and cd_quiz="&cd_quiz
				set rs5 = conexao.execute(sql5)
				resposta3 = rs5("resposta")
				if correta3 = resposta3 then
					sql6 = "select * from usuarios where cd_usuario="&cd_usuario
					set rs6 = conexao.execute(sql6)
					nome = rs6("nome")
					response.write nome
					response.write "<BR>"
				end if
			end if
	rs3.movenext
	wend
	
	%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta colocar um if pra verificar se não é fim de arquivo antes de executar a query. Exemplo:

 

<%
	sql3 = "select * from quiz_controle where resposta="&correta1&" and cd_quiz="&cd_quiz
	set rs3 = conexao.execute(sql3)
	If not rs3.eof then
		while not rs3.eof
			cd_usuario = rs3("cd_usuario")
			sql4 = "select * from quiz_controle where resposta="&correta2&" and cd_usuario="&cd_usuario&" and cd_quiz="&cd_quiz
			set rs4 = conexao.execute(sql4)
				If Not rs4.eof Then
					resposta2 = rs4("resposta") ' LINHA 109
					if correta2 = resposta2 then
					sql5 = "select * from quiz_controle where resposta="&correta3&" and cd_usuario="&cd_usuario&" and cd_quiz="&cd_quiz
						set rs5 = conexao.execute(sql5)
						If Not rs5.eof Then
							resposta3 = rs5("resposta")
							if correta3 = resposta3 then
								sql6 = "select * from usuarios where cd_usuario="&cd_usuario
								set rs6 = conexao.execute(sql6)
								nome = rs6("nome")
								response.write nome
								response.write "<BR>"
							end If
						End If 
					end If
				End If 
			rs3.movenext
			Wend
	End If 
	%>

Eu fiz corrento, se os ifs não tiverem certo avise. Mas deu pra entender o que precisa ser feito, não é? É só verificar se é fim de arquivo antes de atribuir um valor para a variável. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fiz isso.

O problema é que tem hora que é fim de arquivo e tem hora que não é !

 

Ou seja, de todos que acertaram a primeira resposta nem todos acertaram a segunda! Resumindo alguns passam no teste de verificação de fim de arquivo e outros nao ai acaba que nao exibe nada na tela =/

 

humpf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kara resume isto tudo em um select só usando Join, caso não consegua mande sua estrutura completa de base de dados( os dados que esta utilizando aqui ) tipo como controla as perguntas ? de onde vem os id_usuario etc.

 

Da para resumir isso tudo em um select só sem precisar de if bof e eof nenhum.

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então faz o seguinte, guarda em um array os que passaram e no segundo e terceiro select usa um resposta in (variavel) do array carregado

 

 

 

 

Qual conteudo voce grava no campo resposta da tabela quiz_conteudo.

 

é "resposta 1"

 

ou apenas "1"

 

como identifica a resposta certa ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora estava no trabalho, mas gravo apenas como Inteiro ou seja .. se a resposta for a primeira opçao no banco de dados fica:

 

1

 

 

sacou?

você tem MSN pra conversar melhor?

se tiver add ai

thioga@hotmail.com

 

abraçao cara...

 

nunca trabalhei com vetor no asp.. rs

sera que tem algum exemplo no forum?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom cara como conversamos por msn o problema é que esta listando os quiz e as respostas mas não esta dizendo para quais perguntas.

 

Exemplo se o quiz 5 que estava com problema e resposta 2 era verdadeira para pergunda 20 e a resposta 1 era verdadeira para pergunda 10. Se não dizer qual pergunta esta conferindo, qualquer que tenha respondido a resposta 1 o sistema entende como resposta certa para a pergunda 10.

 

é mais ou menos isto

mude no seu codigo como abaixo

 

Aqui voce vai carregar as variaveis com o numero da pergunta

sql2 = "select * from quiz_conteudo where cd_quiz="&cd_quiz ' Faço uma seleção na tabela contéudo referente ao Quiz
set rs2 = conexao.execute(sql2)
correta1 = rs2("correta")
conteudo1 = rs2("cd_quizconteudo")
rs2.movenext
correta2 = rs2("correta")
conteudo2 = rs2("cd_quizconteudo")
rs2.movenext
correta3 = rs2("correta")
conteudo3 = rs2("cd_quizconteudo")

 

aqui voce adiciona o controle da pergunta ao select

sql3 = "select * from quiz_controle where resposta="&correta1&" and cd_quizconteudo="&conteudo1&" and cd_quiz="&cd_quiz
	set rs3 = conexao.execute(sql3)
	while not rs3.eof
		cd_usuario = rs3("cd_usuario")
		sql4 = "select * from quiz_controle where resposta="&correta2&" and cd_usuario="&cd_usuario&"  and cd_quizconteudo="&conteudo2&" and cd_quiz="&cd_quiz
		set rs4 = conexao.execute(sql4)
			if not rs4.eof then
				'resposta2 = rs4("resposta")
				'if correta2 = resposta2 then
					sql5 = "select * from quiz_controle where resposta="&correta3&" and cd_quizconteudo="&conteudo3&" and cd_usuario="&cd_usuario&" and cd_quiz="&cd_quiz
					set rs5 = conexao.execute(sql5)
					if not rs5.eof then
						resposta3 = rs5("resposta")
						if correta3 = resposta3 then
							sql6 = "select * from usuarios where cd_usuario="&cd_usuario
							set rs6 = conexao.execute(sql6)
							nome = rs6("nome")
							response.write nome
							response.write "<BR>"
						end if
					end if
				'end if
			end if
	rs3.movenext
	wend

Sua logica estava certa só faltava este controle, parabens seu programa de quiz é muito bom.

 

abraços e boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom!

Gostei de interagir nesse sistema e mais uma vez obrigado a todos do imasters...

afinal descobri o que faltava vindo ate aqui no forum!

 

:)

 

parabens de verdade!!!

 

valeu filipe \o/

 

muito obrigado mesmo!

abracos!

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.