Fórum mostrar registro usando random #387750

03/10/2010

0

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
Geraldo Leal

Geraldo Leal

Responder

Posts

04/10/2010

Leonardo Xavier

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;



Responder

Gostei + 0

04/10/2010

Aroldo Zanela

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".    
Responder

Gostei + 0

04/10/2010

Geraldo Leal

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

Gostei + 0

04/10/2010

Geraldo Leal

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
Responder

Gostei + 0

04/10/2010

Aroldo Zanela

Colega,   Quais componentes você está utilizando para acessar os dados? DBX, IBX, ADO, Zeus, etc?
Responder

Gostei + 0

04/10/2010

Geraldo Leal

Obrigado pelo retorno, uso os componentes da palheta ibdatabase. ibtable, ibquery e o componente da palheta aceess o data source. sucesso
Responder

Gostei + 0

05/10/2010

Aroldo Zanela

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.  
  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
  Copie o código abaixo. Clique duas vezes sobre o botão "btn1" e cole o código.  
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;
  Digite um número (e.g.: 7) e fique pressionando o "btn1" para analisar o comportamento.   []'s Aroldo Zanela
Responder

Gostei + 0

05/10/2010

Leonardo Xavier

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;

Responder

Gostei + 0

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

Aceitar