Fórum Salvando Valores de componentes criados em tempo de execução #212266

07/02/2004

0

Olá,

Após MUITO aprender aqui no forum, venho lhes pedir ajuda.
O meu problema é o seguinte: No sistema que estou desenvolvendo existe uma tela em que são apresentados os itens de uma determinada tabela (atualmente com 24 registros). Esta tela apresenta vários edits com os valores dos campos desta tabela e são criados em tempo de execução.
Assim, quando é chamado o FormShow a rotina abaixo é disparada para criar esses edits.

procedure TForm1.FormShow(Sender: TObject);
Var
EditDescricao, EditQuantidade : TEdit;
EditValor : TCurrencyEdit;
TopoDescricao, EsquerdaDescricao : Integer;
TopoValor, EsquerdaValor : Integer;
TopoQuantidade, EsquerdaQuantidade : Integer;
Registros, Total : Integer;
begin
TopoDescricao := 30;
EsquerdaDescricao := 24;
TopoValor := 30;
EsquerdaValor := 245;
TopoQuantidade := 30;
EsquerdaQuantidade := 326;
Table1.First;
Registros := Table1.RecordCount;
For Total := 0 To Registros -1 Do
Begin
EditDescricao := TEdit.Create(Form1);
EditDescricao.Parent := ScrollBox1;
EditDescricao.Name := ´EditDescricao´ + IntToStr(Registros);
EditDescricao.Height := 21;
EditDescricao.Width := 220;
EditDescricao.Top := TopoDescricao;
EditDescricao.Left := EsquerdaDescricao;
EditDescricao.Text := Table1.FieldValues[´Descricao´];
TopoDescricao := TopoDescricao + 23;
EditValor := TCurrencyEdit.Create(Form1);
EditValor.Parent := ScrollBox1;
EditValor.Name := ´EditValor´ + IntToStr(Registros);
EditValor.Height := 21;
EditValor.Width := 80;
EditValor.Top := TopoValor;
EditValor.Left := EsquerdaValor;
EditValor.Text := Table1.FieldValues[´Valor´];
TopoValor := TopoValor + 23;
EditQuantidade := TEdit.Create(Form1);
EditQuantidade.Parent := ScrollBox1;
EditQuantidade.Name := ´EditQuantidade´ + IntToStr(Registros);
EditQuantidade.Height := 21;
EditQuantidade.Width := 40;
EditQuantidade.Top := TopoQuantidade;
EditQuantidade.Left := EsquerdaQuantidade;
EditQuantidade.Text := ´0´;
TopoQuantidade := TopoQuantidade + 23;
Registros := Registros - 1;
Table1.Next;
End;
end;

Bom, até este ponto está tudo funcionando que é uma beleza. Se eu adiciono ou removo um registro da tabela na próxima vez que o form for mostrado as modificações estarão lá.

Agora vem o real problema: Como pegar os dados desses edits e jogá-los em uma tabela, sendo que o valor do campo ´valor´ tem que ser a multiplicação do valor (do editvalor ´n´) multiplicado pelo valor do edit quantidade ´n´ (Ex.: EditValor1 * EditQuantidade1)?

Bom, espero que tenha sido claro na explicação do meu problema. Se alguém puder dar uma luz, agradeceria.

Obrigado a todos e se puder ajudar alguém de alguma forma, é só falar.

[] s e boa programação.


Plautz

Plautz

Responder

Posts

07/02/2004

Maxsoftware

Dados.Tb_CadCli.FieldByName(´VALOR´).AsString:= CURRTOSTR(STRTOCURR(EditValor)* STTTOCURR(EditQuantidade1.TEXT));

Veja se vai funcionar...
Ass: MAx...


Responder

Gostei + 0

07/02/2004

Plautz

Obrigado por tentar ajudar Max, mas creio que não fui muito claro na questão.

Nesse caso, os Edits para os valores terão os nomes como abaixo:

EditValor0
EditValor1...
EditValor ´n´ (quantidade de registros, no caso vai até EditValor24)

O mesmo para os Edits de Quantidade.

Só que os nomes (e os valores) para os componentes são dados em runtime:

EditDescricao.Name := ´EditDescricao´ + IntToStr(Registros); // Registros := Table1.RecordCount


E dessa forma, após sua criação é colocado o conteudo nele:

EditDescricao.Text := Table1.FieldValues[´Descricao´];


Assim, após essa ´bagunça´ toda, eu não consegui varrer os componentes e gravar os dados na tabela.

De qualquer maneira, obrigado mais uma vez.

[]s e boa programação.


Responder

Gostei + 0

03/04/2013

Mikelustosa

tente assim:

var
I: Integer;
Recebe_combo: string;
begin

for i := 0 to Pred(ComponentCount) do // usado para varrer os componenentes do tipo Edit


if (Components[i] is TEdit) and (TEdit(Components[i]).Text ) then // se o componente na posição [I] for um Edit e for de vazio


begin
Recebe_combo := (TEdit(Components[i])).Text;


DataModule1.Sua_tabela.Open;
DataModule1.Sua_tabela.insert;
DataModule1.Sua_tabela.FieldByName(Campo_da_sua_tabela).AsInteger := Recebe_combo;

DataModule1.Sua_tabela.Post;



end;

end;
Responder

Gostei + 0

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

Aceitar