Fórum Acho que é meio impossível, mas... #162613

26/05/2003

0

Eu tenho 100 TEdits num Form. Cada um possui um nome de sua ordem de criação, isto é, Edit1, Edit2, (...), Edit99, Edit100. Cada uma, no evento OnCreate deveria receber o valor de um registro cuja chave tem um valor de 1 até 100, exatamente como o nome dos TEdits. O que eu quero saber é se exite algum modo rápido de se fazer com os TEdits recebam em seu texto, o valor do campo Descricao(que não é a chave).
Veja o procediemento de criação da tabela:
create table Descricoes ( z integer not null, descricao varchar(100), primary key (z) );

O que não quero é ter fazer ago do tipo:
Descricoes.First; Edit1.Text := DescricoesZ.AsString; Descricoes.Next; Edit2.Text := DescricoesZ.AsString; Descricoes.Next; ... e assim por diante até 100.

É isso que não quero ter que fazer. Mesmo não exista um meio de fazê-lo, pelo menos digam que NÃO DÁ PRA FAZER!

Caso seja importante, uso Delphi 7, dbExpress, Interbase 6.5, Windows NT 4.0 SP 1, etc. Uso os componentes para conecção TSQLConnection, TSQLDataSet, TDataSetProvider e TClientDataSet.


Deafth

Deafth

Responder

Posts

26/05/2003

Ma_cunhado

Olha só um exemplo que testei agora
coloque dez (ou mais) Edits em um form e um botao
no onClick do botao
var
i,n:Integer;
begin
for i:=0 to componentcount -1 do
begin
n:=i;
if ((components[i] is Tedit)) and ((components[i].Name=´Edit´+inttostr(n))) then
(components[i]as Tedit).text:=Inttostr(i);
end;
end;

eu acho q para o seu caso no lugar do inttostr(i) vc faz uma pesquisa com o valor de I pega o valor do campo e coloca
Por exemplo se eu tivesse usando uma TTable
ficaria assim

if ((components[i] is Tedit)) and ((components[i].Name=´Edit´+inttostr(n))) then
begin
table1.locate(´indice´,i,[locaseInsensitive]);
(components[i]as Tedit).text:=table1.fieldbyname(´campo´).asString;
end;
essa parte eu nao testei mas espero que funcione.
Boa sorte...
Gean Carlos.
end;


Responder

Gostei + 0

26/05/2003

4_olho

Você pode tentar algo como

Na parte privada do Form, definir
ArrayEdit : Array[0..99] of TEdit;

var
i : Integer;
begin
For i := 1 to 100 do
begin
ArrayEdit[i-1].Text := DescricoesZ.AsString;
Descricoes.Next;
end;
end;

Talvez até colocar os valores das Descricoes numa array tambem e associar diretamante, ao inves de usar o Next - que pode dar pau no finalzinho...


Responder

Gostei + 0

26/05/2003

Ma_cunhado

if ((components[i] is Tedit)) and ((components[i].Name=´Edit´+inttostr(n))) then begin if table1.locate(´indice´,i,[locaseInsensitive]) then (components[i]as Tedit).text:=table1.fieldbyname(´campo´).asString; end; coloquei uma condica if table1.locate assim o edit so recebera o valor se for encotrado no indice evitando que se repita do edit anterior. Tchau...



Responder

Gostei + 0

26/05/2003

Jairroberto

Olá, amigo!

Aqui vai um exemplo:

var
  c: TComponent;
begin
  tblDescricoes.Open;
  while not tblDescricoes.Eof do
  begin
    c := FindComponent(Format(´Edit¬d´, [tblDescricoesZ.AsInteger]));
    if (c <> nil) and (c is TEdit) then
      TEdit(c).Text := tblDescricoesDescricao.AsString;

    tblDescricoes.Next;
  end;
  tblDescricoes.Close;
end;


Um abraço,
Jair


Responder

Gostei + 0

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

Aceitar