Ir para conteúdo
Fórum Script Brasil
  • 0

Função randômica


Guest Rafael P.C

Pergunta

Guest Rafael P.C

Pessoal preciso de uma ajuda em relação a uma função randômica. Esta função deve extrai do banco de dados os registros aleatoriamente mas não deve repetir as informações extraídas mas não estou conseguindo fazer isto alguém pode me ajudar?

<% option explicit %> 
<% 
dim db, rs, sql, controle, numero 

set db = Server.CreateObject("ADODB.Connection") 
db.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath("random.mdb") & ";Persist Security Info=False" 
set rs = Server.CreateObject("ADODB.RecordSet") 
rs.activeconnection = db 

'para chamar o script utilize a linha abaixo 
call randomizar() 

sub randomizar() 

dim foi(3) 
dim numero 
'procurando o 1°registro a imprimir 
call procura() 
'se o lugar onde ele procurou não achar nada então 
if rs.eof or rs.bof then 
'fecha a conexão e procura de novo 
rs.close 
call procura() 
response.write "<tr><tD>"&rs("descricao")&" "&rs("valor")&"- </td></tr>" 
' id do 1° numero 
foi(1) = rs("id") 
'senao ele já imprime e grava o id 
else 
response.write "<tr><tD>"&rs("descricao")&" "&rs("valor")&"- </td></tr>" 
foi(1) = rs("id") 
end if 

'nova procura... 
rs.close 
call procura() 

'apartir daqui a lógica é a mesma 
if rs.eof or rs.bof then 
rs.close 
call procura() 
' aqui verificamos se o id encontrado já foi colocado 
if foi(1) = rs("id") then 
do while not foi(1) <> rs("id") 
rs.close 
call procura() 
loop 
end if 
response.write "<tr><tD>"&rs("descricao")&" "&rs("valor")&"- </td></tr>" 
foi(2) = rs("id") 
else 
'o mesmo aqui 
if foi(1) = rs("id") then 
do while not foi(1) <> rs("id") 
rs.close 
call procura() 
loop 
end if 
response.write "<tr><tD>"&rs("descricao")&" "&rs("valor")&"- </td></tr>" 
foi(2) = rs("id") 
end if 


'mesma lógica só que com um campo a mais 
rs.close 
call procura() 
if rs.eof or rs.bof then 
rs.close 
call procura() 
'aqui vemos se o registro encontrado foi igual aos dois anteriores 
if foi(1) = rs("id") or foi(2) = rs("id") then 
'loop para achar um registro diferente dos dois anteriores 
do while not foi(1) <> rs("id") and foi(2) <> rs("id") 
rs.close 
call procura() 
loop 
end if 
response.write "<tr><tD>"&rs("descricao")&" "&rs("valor")&"- </td></tr>" 
foi(3) = rs("id") 
else 
'o mesmo aqui 
if foi(1) = rs("id") or foi(2) = rs("id") then 
do while not foi(1) <> rs("id") and foi(2) <> rs("id") 
rs.close 
call procura() 
loop 
end if 
response.write "<tr><tD>"&rs("descricao")&" "&rs("valor")&"- </td></tr>" 
foi(3) = rs("id") 
end if 

'limpando 
set foi(3) = nothing 
set numero = nothing 
set controle = nothing 

end sub 

Sub procura() 
'aqui pegamos um registro aleatóriamente 
sql = "SELECT * FROM randomizando" 
rs.open sql, db, 3, 3 
controle=0 
randomize 
numero = (RND * rs.recordcount)\1 
do while numero <> controle 
controle=controle+1 
rs.MoveNext 
loop 
end sub 
%>

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Guest Rafael P.C

Na verdade não entendi muito bem mas se usar o distinct no select ele só vai trazer os registros exclusivos mas quem esta sorteando os dados não é o select e sim.

randomize 
numero = (RND * rs.recordcount)\1 
do while numero <> controle 
controle=controle+1 
rs.MoveNext
Por desencargo de consciência ate fiz o select distinct mas não deu certo
Sub procura() 
sql = "SELECT distinct id, descricao, valor  FROM randomizando" 
rs.open sql, db, 3, 3 
controle=0 
randomize 
numero = (RND * rs.recordcount)\1 
do while numero <> controle 
controle=controle+1 
rs.MoveNext 
loop 
end sub

Tem como usar o distinct de outra forma?

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpa... mas então eu acho que não entendi sua duvida... deixa eu me explicar e daí você me explica melhor pra eu consegui te ajudar, ok? desculpa mesmo...

achei que a sua dificuldade fosse unica e exclusivamente a de não repetir informações... por causa desse trecho aqui:

mas não deve repetir as informações extraídas mas não estou conseguindo fazer isto

com certeza te entendi errado, pelo novamente desculpas... peço que me explique um pouquinho melhor o que e pra que exatamente esta tentando fazer...

isso é importante para que eu entenda a logica do seu app...

peço tb que me explique exatamente o que não esta funcionando no seu código, ok?

Desta forma certamente consigoi te ajudar!

Desculpe mais uma vez...

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Rafael P.C

Não, que isto, não precisa me pedir desculpas, eu que não soube explicar.

Este código vai fazer parte de uma Prova online aonde terá 10 pergunta e cada pergunta 4 alternativas o código abaixo vai randomizar as alternativa. Então não pode ter duas alternativas iguais. Na parte randomica ela esta repetindo os campos. Tipo uma vês aparece registro1, registro 2, registro 3 e guando atualizo a pagina registro1, registro 3, registro1. Como faço para não repetir os campos?

Este código extrai do Baco de dados três campos com o

sql = "SELECT distinct id, descricao, valor  FROM randomizando" 
rs.open sql, db, 3, 3
E o script abaixo randomiza aleatoriamente os três campos
randomize 
numero = (RND * rs.recordcount)\1 
do while numero <> controle 
controle=controle+1 
rs.MoveNext

Espero ter conseguido explicar

Link para o comentário
Compartilhar em outros sites

  • 0

Eu entendi, mas ainda tenho algumas dúvidas... e pelo que já entendi acho que não e um problema de app e sim de lógica...

Como está a estrutura de seu bd nessa tabela randomizando?

è nessa tabela que ficam as perguntas e as opções de respostas?

e o campo id? é altonumerico?

no aguardo

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Rafael P.C

Primeiro desculpa meu PC queimo a placa mãe. Por isto não respondi logo.

Então na verdade eu pegue este script na net, pois não tinha nenhuma idéia como fazer às alternativas randômicas. Então eu estava tentando entender para adaptar na prova. Bom vou tentar explicar à estrutura a prova tem um banco de dados chamado avaliação.mdb dentro dele tenho três tabelas. A primeira se chama exames que é responsável pelos dados titulo do topo da pagina o tipo da prova os campos dela são ExameID, ExameNome e ExameTitulo a próxima tabela se chama opcoes que tem as alternativas de cada pergunta Ex.“1º pergunta opção A) opção B) opção c) opção d)” os campos dela são OpcaoID, QuestaoID, Opção, Resposta, Pontos, Marca e a ultima tabela Questões que contem as perguntas Ex.”pergunta 1, pergunta 2” os campos são QuestaoID, ExameID, Numero e Questão.

A baixo segue o script das paginas da prova.

Index.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Menu</title>
</head>

<body bgcolor="#FFFFFF">

<p align="left"><font color="#004080" size="5"
face="Comic Sans MS"><strong><img
src="top_menu.gif"></strong></font><font
color="#004080" size="4" face="Comic Sans MS"><strong> Simulado
Teste de avaliação de conhecimentos</strong></font></p>

<hr size="0" color="#800080">

<ol>
<li><p align="left"><font color="#FF8000" size="4"
face="Comic Sans MS"><strong>Avaliação de conhecimentos</strong></font><font
color="#0000FF" size="4" face="Comic Sans MS"><strong> - </strong></font><a
href="exame.asp?ques=1"><font color="#0000FF" size="4"
face="Comic Sans MS"><strong>Qualidade Basic Básico</strong></font></a></p>
</li>
</ol>

<ol type="1" start="2">
<li><p align="left"><font color="#FF8000" size="4"
face="Comic Sans MS"><strong>Avaliação de conhecimentos</strong></font><font
color="#0000FF" size="4" face="Comic Sans MS"><strong> - </strong></font><a
href="exame.asp?ques=2"><font color="#0000FF" size="4"
face="Comic Sans MS"><strong>Qualidade Intermediário</strong></font></a></p>
</li>
</ol>

<ol type="1" start="3">
<li><p align="left"><font color="#FF8040" size="4"
face="Comic Sans MS"><strong>Avaliação de conhecimentos</strong></font><font
color="#0000FF" size="4" face="Comic Sans MS"><strong> - </strong></font><a
href="exame.asp?ques=3"><font color="#0000FF" size="4"
face="Comic Sans MS"><strong>Qualidade Avançado</strong></font></a></p>
</li>
</ol>

<hr size="0" color="#800080">

<p align="center"><font color="#004080" face="Comic Sans MS">Clique
no link da avaliação que deseja fazer.</font></p>
</body>
</html>
exame.asp
<HEAD>
<TITLE>
Exame de Avalicação - Qualidade
</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">

<%

sConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("avaliacao.mdb")
set conn = Server.CreateObject("ADODB.Connection")

conn.open sConnString

'encontra o tipo de avalizacao
'ex: exame.asp?ques=1 - indica que voce seleciona o exame basico
set RS = Conn.Execute("SELECT * FROM [Exames] WHERE [ExameID]=" & request.querystring("ques"))


%>

<font face="Arial">
<h2><b><% =rs("ExameNome") %></b></h2><font size=2><% =rs("ExameTitulo") %>
<hr>
<p>

<form action="pontos.asp?ques=<% =request.querystring("ques") %>" method="post">
<%
rs.close
set rs=nothing

'inicia um loop para exibir as questões
set RS = Conn.Execute("SELECT * FROM [Questoes] WHERE [ExameID]=" & request.querystring("ques") & " ORDER BY [Numero]")
if not RS.EOF then
RS.movefirst
do

response.write "<b><font face='Verdana' color='blue'>" & rs("Numero") & ". " & rs("Questao") & "</b><p>" & chr(13)

'exibe as opções disponiveis
set ORS = Conn.Execute("SELECT * FROM [opcoes] WHERE [QuestaoID]=" & RS("QuestaoID"))
dim controle, numero 
controle=0 
randomize 
numero = (RND * rs.recordcount)\1 
do while numero <> controle 
controle=controle+1 
if not ORS.EOF then
ORS.movefirst
do
response.write "<input type=Radio Name=""Questao" & RS("QuestaoID") & """ Value=""Resposta" & ORS("OpcaoID") & """>" & ORS("Opcao") & "<br>" & chr(13)
ORS.movenext

loop until ORS.EOF
end if
response.write "<p>"
RS.movenext
loop until RS.EOF
%> 
<hr>
<input type=submit value="Verificação de Resultado"> Clique aqui para verificar suas respostas
<%
else
%>
<h3><font color="red">Não há questões cadastradas para esta avaliação.</font><h3>
<hr>
<h4><a href="avaliacao.asp">Continua Avaliação</a> <font color="red">Retorna ao site</h4></font> 
<% 
end if
conn.close
set conn = nothing
%>
</form>
</BODY>
</HTML>

Link para o comentário
Compartilhar em outros sites

  • 0

Rafael, td bem? Cara recebi aqui sua MP... você já leu o link que o bareta recomendou... Cara... não é complicado não... você tem que usar o select distinct com a função random tb... entendeu? pra pegar um de cada e ao mesmo tempo randomico!

A quantas anda seu código?

Não é complicado não... mas um estudo será necessário... de uma pesquisada no google sobre select random e distinct... no seu caso precisara os dois... e olha... dependendo da forma como fizer o seu bd... no máximo dois selects resolvem sua necessidade!

Cara... 80% dos problemas que eu vejo aqui são de lógica! Programações mirabolantes... bds extremamente complicados... quando que com um BD simples e um ou dois selects você mata a charada! Perder duas horas pensando em uma lógica apropriada fará com que você ganhe 30 horas mais a frente!

Me faça saber como estão as coisas agora!

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...