Salvando Valores de componentes criados em tempo de execução

Delphi

07/02/2004

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

Curtidas 0

Respostas

Maxsoftware

Maxsoftware

07/02/2004

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

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


GOSTEI 0
Plautz

Plautz

07/02/2004

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.


GOSTEI 0
Mikelustosa

Mikelustosa

07/02/2004

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;
GOSTEI 0
POSTAR