mostrar registro usando random
boa noite pessoal, estou precisando de mostrar um registro de uma tabela de modo randomico.
tenho somente 3 edit , um mostra um nome de fruta o outro mostra um nome de legumes.o outro mostra o campo id. quando clico no botão randomizar, ele randomiza o numero id. mais não mostra a linha da tabela daquele id. tentei colocar um dbgrid, mais não sei como simular o click na coluna id do dbgrid para randomizar la dentro. no edit uso o seguinte.
procedure Tfrm_frutas.SpeedButton1Click(Sender: TObject);
VAR
I:INTEGER;
begin
mostrar;
Randomize; for I := 0 to 3 do
dbgrid1.OnEnter:= inttostr(random(I)+1); dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(Edit1.text));
dm_curso.qry_frutas.open; se alguém puder ajudar agradeço muito
VAR
I:INTEGER;
begin
mostrar;
Randomize; for I := 0 to 3 do
dbgrid1.OnEnter:= inttostr(random(I)+1); dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(Edit1.text));
dm_curso.qry_frutas.open; se alguém puder ajudar agradeço muito
Geraldo Leal
Curtidas 0
Respostas
Leonardo Xavier
03/10/2010
O que seria o seu campo "Edit1.text" ?
dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(Edit1.text)+'');
dm_curso.qry_frutas.open;
GOSTEI 0
Aroldo Zanela
03/10/2010
Colega,
Coloca a estrutura (DDL) da tabela para entendermos sobres os tipos de dados e a normalização de sua(s) tabela(s), visando a solução mais adequada.
A princípio, se o campo ID for numérico não se usa QuotedStr. Também seria mais recomendável o uso de componentes data-aware (consciente de dados) para que a exibição seja síncrona após o posicionamento do cursor de dados. Outro fato (errado) é que você chama uma rotina de exibição antes de efetuar a "randomização".
GOSTEI 0
Geraldo Leal
03/10/2010
O que seria o seu campo "Edit1.text" ?
dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(Edit1.text)+'');
dm_curso.qry_frutas.open;
olha amigo, esta questão do edit, foi um forma que eu achei para fazer o randomico,
quer dizer faço dentro dele, pois não consegui fazer usando somente a variavel.
então uso desta forma, é uma gambiarra , creio eu . no outro codigo eu tinha colocado o dbgrid. mais não funcionou.desta forma abaixo funciona, porem não mostra o registro todo da linha.
eu coloquei 3 dbedits. um para mostrar nome da fruta , outro mostrar nome do legume e o outro para mostrar
o id da tabela que é integer. auto numeração. então utilizo este codigo embaixo para fazer o randomico dentro
do dbedit ele faz o randomico direitinho, porem os outros campos não mudam de acordo o id que aparece no randomico, meio confuso né. mais é assim mesmo. eu clico no botão aparece o id 3 porem o registro que tem
na linha do id 3 não aparece.nos outros dois dbedits. tentei fazer direto no banco de dados ao enves de usar um dbedit como abaixo , o que seria melhor, mais não sei. poderia usar a query , se puder judar agradeço
procedure Tfrm_frutas.SpeedButton1Click(Sender: TObject);
VAR
I:integer;
begin Randomize; for I := 2 to 4 do
dbedit2.text:= inttostr(random(I)+1 ); dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(dbedit2.text));
dm_curso.qry_frutas.open;
VAR
I:integer;
begin Randomize; for I := 2 to 4 do
dbedit2.text:= inttostr(random(I)+1 ); dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(dbedit2.text));
dm_curso.qry_frutas.open;
GOSTEI 0
Geraldo Leal
03/10/2010
Colega,
Coloca a estrutura (DDL) da tabela para entendermos sobres os tipos de dados e a normalização de sua(s) tabela(s), visando a solução mais adequada.
A princípio, se o campo ID for numérico não se usa QuotedStr. Também seria mais recomendável o uso de componentes data-aware (consciente de dados) para que a exibição seja síncrona após o posicionamento do cursor de dados. Outro fato (errado) é que você chama uma rotina de exibição antes de efetuar a "randomização".
boa tarde aroldo, segue o que pediu
CREATE GENERATOR SQ_FRUTAS;
CREATE TABLE FRUTAS (
ID_FRUTAS INTEGER NOT NULL,
NOME_fruta VARCHAR(50) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
NOME_legume VARCHAR(50) COLLATE PT_BR,
FOTOS BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/ ALTER TABLE FRUTAS ADD CONSTRAINT PK_FRUTAS PRIMARY KEY (ID_FRUTAS);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ; /******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/ /* Trigger: FRUTAS_BI */
CREATE OR ALTER TRIGGER FRUTAS_BI FOR FRUTAS
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id_frutas is null) then
new.id_frutas = gen_id(sq_frutas,1);
end
^
SET TERM ; ^ o campo foto, é que também tentei colocar foto dos produtos na tabela, mais também não consegui,e estou tentando uma outra forma. quanto ao randomico. se tiver maneira de fazer ai, agradeço se postar para mim. sucesso geraldo leal
ID_FRUTAS INTEGER NOT NULL,
NOME_fruta VARCHAR(50) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
NOME_legume VARCHAR(50) COLLATE PT_BR,
FOTOS BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/ ALTER TABLE FRUTAS ADD CONSTRAINT PK_FRUTAS PRIMARY KEY (ID_FRUTAS);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ; /******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/ /* Trigger: FRUTAS_BI */
CREATE OR ALTER TRIGGER FRUTAS_BI FOR FRUTAS
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id_frutas is null) then
new.id_frutas = gen_id(sq_frutas,1);
end
^
SET TERM ; ^ o campo foto, é que também tentei colocar foto dos produtos na tabela, mais também não consegui,e estou tentando uma outra forma. quanto ao randomico. se tiver maneira de fazer ai, agradeço se postar para mim. sucesso geraldo leal
GOSTEI 0
Aroldo Zanela
03/10/2010
Colega,
Quais componentes você está utilizando para acessar os dados? DBX, IBX, ADO, Zeus, etc?
GOSTEI 0
Geraldo Leal
03/10/2010
Obrigado pelo retorno, uso os componentes da palheta ibdatabase.
ibtable, ibquery e o componente da palheta aceess o data source.
sucesso
GOSTEI 0
Aroldo Zanela
03/10/2010
Colega,
Crie um novo formulário. Copie o código abaixo e cole sobre o formulário (não é código pascal) para criar os componentes.
Copie o código abaixo. Clique duas vezes sobre o botão "btn1" e cole o código.
Digite um número (e.g.: 7) e fique pressionando o "btn1" para analisar o comportamento.
[]'s
Aroldo Zanela
object lblAleatorio: TLabel Left = 230 Top = 13 Width = 51 Height = 13 Caption = 'lblAleatorio' end object btn1: TButton Left = 4 Top = 6 Width = 75 Height = 25 Caption = 'btn1' TabOrder = 0 OnClick = btn1Click end object dbgrd1: TDBGrid Left = 0 Top = 221 Width = 862 Height = 195 Align = alBottom DataSource = ds1 TabOrder = 1 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] end object edt1: TEdit Left = 92 Top = 8 Width = 121 Height = 21 TabOrder = 2 Text = 'edt1' end object tbl1: TTable Active = True DatabaseName = 'DBDEMOS' TableName = 'animals.dbf' Left = 191 Top = 88 end object ds1: TDataSource DataSet = tbl1 Left = 244 Top = 116 end
var Semente, vaPara: Integer; begin Randomize; // Inicializar a geração de números aleatórios Semente := StrToIntDef(edt1.Text,0 ); // Semente para números aleatórios vaPara := Random(Semente); // Gerar número aleatório [Menor que a semente] lblAleatorio.Caption := IntToStr(vaPara); // Mostrar o número do registro tbl1.First; // Posicionar-se no primeiro registro "sempre" tbl1.MoveBy(vaPara-1); // Deslocar "n" posições end;
GOSTEI 0
Leonardo Xavier
03/10/2010
Corrije seu código antes de mais nada colocando as aspas que faltaram, pois os códigos SQL do delphi sao assim, tive que desenvolver certa vez um sistema de cadastramentos, onde trabalhei bastante com codigos SQL. Qualquer detalhe pode fazer a diferença.
dm_curso.qry_frutas.sql.clear;
dm_curso.qry_frutas.close;
dm_curso.qry_frutas.sql.add('select *');
dm_curso.qry_frutas.sql.add('from frutas');
dm_curso.qry_frutas.sql.add('where id_frutas ='+ quotedstr(Edit1.text)+');
dm_curso.qry_frutas.open;
GOSTEI 0