Randomizar um registro do banco de dados
Por favor, preciso muito da ajuda dos colegas...
É o seguinte: Estou fazendo um programa que é um clone do
´ Show do Milhão 4 ´ , só que com perguntas sobre o Universo StarWars...
Como eu faço para o sistema escolher aleatoriamente, e sem repetição, as perguntas que já estão gravadas numa tabela paradox ???
(´ O Show do Milhão 4 ´ , é feiro em Acess)...
Já tentei:
num : integer;
.......
Num := (Random(100));
edit1.text := inttostr(Num);
Table1.findkey([edit1.text]);
Ou seja, o sistema faz um sorteio de 1 à 100,
o valor sorteado é armazenado na variável Num,
Esse valor é passado para o edit1( que fica invisível),
E o método FindKey retorna o registro equivalente, amarzenado no edit1.
Só que sempre que eu executo o programa,
ele sempre sorteia o registro número: 1, ou seja, a primeira pergunta sempre é a mesma .
Por favor alguém pode melhorar esse código ???
Ou me mostrar um outro, bem explicadinho, linha por linha com comentários...
Tentei também usar uma query:
Ex: select *
from tab_perguntas
where nivel = a
Tentei desta forma, mais a query me faz uma listagem num DBGRID de todas as perguntas do nível A.
Eu queria que dessa listagem, me fosse apresentado apenas um registro aleatoriamente selecionado.
Por favor, é urgente!!!!!!!!!!!!!
É o seguinte: Estou fazendo um programa que é um clone do
´ Show do Milhão 4 ´ , só que com perguntas sobre o Universo StarWars...
Como eu faço para o sistema escolher aleatoriamente, e sem repetição, as perguntas que já estão gravadas numa tabela paradox ???
(´ O Show do Milhão 4 ´ , é feiro em Acess)...
Já tentei:
num : integer;
.......
Num := (Random(100));
edit1.text := inttostr(Num);
Table1.findkey([edit1.text]);
Ou seja, o sistema faz um sorteio de 1 à 100,
o valor sorteado é armazenado na variável Num,
Esse valor é passado para o edit1( que fica invisível),
E o método FindKey retorna o registro equivalente, amarzenado no edit1.
Só que sempre que eu executo o programa,
ele sempre sorteia o registro número: 1, ou seja, a primeira pergunta sempre é a mesma .
Por favor alguém pode melhorar esse código ???
Ou me mostrar um outro, bem explicadinho, linha por linha com comentários...
Tentei também usar uma query:
Ex: select *
from tab_perguntas
where nivel = a
Tentei desta forma, mais a query me faz uma listagem num DBGRID de todas as perguntas do nível A.
Eu queria que dessa listagem, me fosse apresentado apenas um registro aleatoriamente selecionado.
Por favor, é urgente!!!!!!!!!!!!!
Lbsystems
Curtidas 0
Respostas
Aroldo Zanela
06/05/2003
Colega,
Crie um outra tabela para armazenar os número que já foram ´sorteados´ e consulte a mesma antes de prosseguir em cada nova pergunta, caso já esteja cadastrada como ´numero sorteado´, faça o sorteio novamente.
Crie um outra tabela para armazenar os número que já foram ´sorteados´ e consulte a mesma antes de prosseguir em cada nova pergunta, caso já esteja cadastrada como ´numero sorteado´, faça o sorteio novamente.
GOSTEI 0
Falinden
06/05/2003
Coloque a chamada do procedimento Randomize antes de chamar a função Random. Pode ser que ajude na ´randomização´.
....
Randomize;
Num := (Random(100));
...
E, então, vc armazena numa tabela os valores já sorteados como explicou com tamanha propriedade nosso colega Aroldo Zanela.
FAB
....
Randomize;
Num := (Random(100));
...
E, então, vc armazena numa tabela os valores já sorteados como explicou com tamanha propriedade nosso colega Aroldo Zanela.
FAB
GOSTEI 0