GARANTIR DESCONTO

Fórum mostrar registro aleatoriamente no delphi com banco firebird #382370

29/07/2010

0

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

Geraldo Leal

Responder

Posts

29/07/2010

Marco Salles

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;      
Responder

Gostei + 0

29/07/2010

Eriley Barbosa

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
Responder

Gostei + 0

29/07/2010

Geraldo Leal


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
Responder

Gostei + 0

29/07/2010

Emerson Nascimento

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.

Responder

Gostei + 0

29/07/2010

Geraldo Leal


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
Responder

Gostei + 0

29/07/2010

Geraldo Leal

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.

Responder

Gostei + 0

29/07/2010

Geraldo Leal

 
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
Responder

Gostei + 0

30/07/2010

Emerson Nascimento

esse seu email não existe...
Responder

Gostei + 0

30/07/2010

Geraldo Leal

desculpe emerson, foi erro de digitação, o correto geraleal1@hotmail.com
sucesso
geraldo leal
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar