mostrar registro aleatoriamente no delphi com banco firebird
Bom dia Pessoal, ai estou precisando de mais uma ajuda, fazer o que, sempre estou precisando, mais também estou tentando ajudar alguns. preciso mostrar em uma pesquisa um registro pego aleatoriamente no banco de dados, em um campo numero(integer), quando clicar em um botão vem o registro da coluna tal.vamos dizer, vem o 100 da outra vez vem o 85 e por ai vai. tenho algum exemplo mais não funciona, já testei.
_sql:= 'select * from tabela order by (rand())'; // este é um exemplo.
_sql:='SELECT * FROM tabela WHERE campo ORDER BY RAND() LIMIT 1,3' ; // este é outro
agradeço a ajuda de todos.
sucesso
geraldo leal
Geraldo Leal
Curtidas 0
Respostas
Marco Salles
29/07/2010
Se entendi , não seria simplesmente
var
SuaVariavel:Integer;
begin
Randomize;
SuaVariavel:=Random(ValorQue vc quer Randomizar); ??? ..... bla bla bla.. _sql:='SELECT * FROM tabela WHERE Seucampo '+quoteToStr(SuaVariavel); bla .. bla .. bla.. end;
SuaVariavel:=Random(ValorQue vc quer Randomizar); ??? ..... bla bla bla.. _sql:='SELECT * FROM tabela WHERE Seucampo '+quoteToStr(SuaVariavel); bla .. bla .. bla.. end;
GOSTEI 0
Eriley Barbosa
29/07/2010
No firebird não tem limit, é FIRST.
eX.: SELECT FIRST 10 * FROM TABELA;
Outra coisa o FIRST só funciona na versão 1.5 para cima
Atenciosamente
Eriley
GOSTEI 0
Geraldo Leal
29/07/2010
Marcos e Eriley, boa tarde, quanto ao first, creio que so retornará os primeiros 10 ou quantos for colocados, não sei bem, e quanto ao codigo seu , marcos, está dando um pequeno erro, provavelmente eu não estou sabendo alguma coisa, mais não encontra quotetostr e já tentei quotedstr e outros, dá não localiza, ai seguinte, tenho este codigo abaixo, funcionou, porem tenho um problema, tenho que colocar um edit como pode ver procedure TFrm_pesquisa.SpeedButton11Click(Sender: TObject);
var
I: INTEGER;
Randomize;
for I := 0 to 100000 do
edit2.text:=inttostr(random(I));
//_sql:='SELECT * FROM TABELA WHERE id = '+ quotetostr(I);
dm.qry_TABELA.sql.clear;
dm.qry_TABELA.close;
dm.qry_TABELA.sql.add('select *');
dm.qry_TABELA.sql.add('from biblia');
dm.qry_TABELA.sql.add(' where id ='+ quotedstr(edit2.text)); acima traz pelo id. porem o seguinte. tenho no campo id numeros de 0 a 10000. so que nestes 10000 tenho um campo paralelo que é o campo livro que tem 20 livros. ou seja são 500 livros de cada então são 500 livros repetidos, o mesmo nome e cada livro tem 100 paginas ou seja cada página é repetida 5 vezes. então preciso trazer randomicamente, um livro e suas 5 paginas, deu para entender! trazendo pelo id ele traz um livro e uma pagina. é o que tem em uma linha. então preciso trazer pelo livro pois ai ele trará as 5 páginas. ex. livro página jabuticaba 1 jabuticaba 2 jabuticaba 3 jabuticaba 4 jabuticaba 5 sucesso a todos
GOSTEI 0
Emerson Nascimento
29/07/2010
tente assim:
begin
Randomize;
edit2.text := inttostr(random(10000)+1);
dm.qry_TABELA.close;
dm.qry_TABELA.sql.clear;
dm.qry_TABELA.sql.add('select * from biblia where livro = ');
dm.qry_TABELA.sql.add('(select livro from biblia where id = '+edit2.text+')');
dm.qry_TABELA.sql.add('order by pagina');
para uma melhor performance é preciso criar índices pelos campos livro, id e pagina.
begin
Randomize;
edit2.text := inttostr(random(10000)+1);
dm.qry_TABELA.close;
dm.qry_TABELA.sql.clear;
dm.qry_TABELA.sql.add('select * from biblia where livro = ');
dm.qry_TABELA.sql.add('(select livro from biblia where id = '+edit2.text+')');
dm.qry_TABELA.sql.add('order by pagina');
para uma melhor performance é preciso criar índices pelos campos livro, id e pagina.
GOSTEI 0
Geraldo Leal
29/07/2010
Marcos e Eriley, boa tarde, quanto ao first, creio que so retornará os primeiros 10 ou quantos for colocados, não sei bem, e quanto ao codigo seu , marcos, está dando um pequeno erro, provavelmente eu não estou sabendo alguma coisa, mais não encontra quotetostr e já tentei quotedstr e outros, dá não localiza, ai seguinte, tenho este codigo abaixo, funcionou, porem tenho um problema, tenho que colocar um edit como pode ver procedure TFrm_pesquisa.SpeedButton11Click(Sender: TObject);
var
I: INTEGER;
Randomize;
for I := 0 to 100000 do
edit2.text:=inttostr(random(I));
//_sql:='SELECT * FROM TABELA WHERE id = '+ quotetostr(I);
dm.qry_TABELA.sql.clear;
dm.qry_TABELA.close;
dm.qry_TABELA.sql.add('select *');
dm.qry_TABELA.sql.add('from tabela');
dm.qry_TABELA.sql.add(' where id ='+ quotedstr(edit2.text)); acima traz pelo id. porem o seguinte. tenho no campo id numeros de 0 a 10000. so que nestes 10000 tenho um campo paralelo que é o campo livro que tem 20 livros. ou seja são 500 livros de cada então são 500 livros repetidos, o mesmo nome e cada livro tem 100 paginas ou seja cada página é repetida 5 vezes. então preciso trazer randomicamente, um livro e suas 5 paginas, deu para entender! trazendo pelo id ele traz um livro e uma pagina. é o que tem em uma linha. então preciso trazer pelo livro pois ai ele trará as 5 páginas. ex. livro página jabuticaba 1 jabuticaba 2 jabuticaba 3 jabuticaba 4 jabuticaba 5 sucesso a todos
GOSTEI 0
Geraldo Leal
29/07/2010
tente assim:
begin
Randomize;
edit2.text := inttostr(random(10000)+1);
dm.qry_TABELA.close;
dm.qry_TABELA.sql.clear;
dm.qry_TABELA.sql.add('select * from tabela where livro = ');
dm.qry_TABELA.sql.add('(select livro from tabela where id = '+edit2.text+')');
dm.qry_TABELA.sql.add('order by pagina');
para uma melhor performance é preciso criar índices pelos campos livro, id e pagina.
begin
Randomize;
edit2.text := inttostr(random(10000)+1);
dm.qry_TABELA.close;
dm.qry_TABELA.sql.clear;
dm.qry_TABELA.sql.add('select * from tabela where livro = ');
dm.qry_TABELA.sql.add('(select livro from tabela where id = '+edit2.text+')');
dm.qry_TABELA.sql.add('order by pagina');
para uma melhor performance é preciso criar índices pelos campos livro, id e pagina.
GOSTEI 0
Geraldo Leal
29/07/2010
Boa noite Emersom e a todos, tentei seu codigo , mais não funcionou comigo, não sei o motivo, quando retorna não traz dado nenhum. meu email é geraleal'@hotmail.com se me mandar um email, te mando um exemplo ai fica mais fácil para me ajudar. o resultado você posta aqui. grato sucesso geraldo leal
GOSTEI 0
Emerson Nascimento
29/07/2010
esse seu email não existe...
GOSTEI 0
Geraldo Leal
29/07/2010
desculpe emerson, foi erro de digitação, o correto geraleal1@hotmail.com sucesso geraldo leal
GOSTEI 0