Fórum for em componentes diferentes, para gravar em uma tabela. #299203
12/10/2005
0
Mais uma vez estou com problemas
Tenho a seguinte situação.
Preciso fazer um for, em todos os componentes do meu form, os componentes que estão visiveis eu preciso gravar em uma tabela os valores deles.
TDateTimePicker1 EdtValor1 EdtObs1 TDateTimePicker2 EdtValor2 EdtObs2 TDateTimePicker3 EdtValor3 EdtObs3 TDateTimePicker4 EdtValor4 EdtObs4 ... etc
O Problema é que os componetes são de classes diferentes, e preciso inserir um por um na base.
for i:=0 to Self.ComponentCount -1 do begin if Self.Components[i].ClassType = TEdit then begin if (Self.Components[i] as TEdit).Visible then begin Close; SQL.Clear; *SQL PARA INSERIR* ParamByName(´edtvalor´).AsString:= (Self.Components[i] as TEdit).Text; ParamByName(´edtobs´).AsString:= (Self.Components[i] as TEdit).Text; end; end; end;
O Código acima é só um teste, acompanhando com break, da para perceber que o edtvalor, e o edtobs recebem sempre os mesmos valores.
Tirando esse problema não sei se é possível fazer isso com um componente TDateTimePicker junto.
:?
Lynx
Curtir tópico
+ 0Posts
12/10/2005
Rjun
for i:=0 to Self.ComponentCount -1 do begin if (Self.Components[i] as TControl).Visible then begin Close; SQL.Clear; ParamByName(´edtvalor´).AsString:= (Self.Components[i] as TControl).Text; ParamByName(´edtobs´).AsString:= (Self.Components[i] as TControl).Text; end; end;
Gostei + 0
13/10/2005
Lynx
Gostei + 0
13/10/2005
Davicarrano
ou seja, um component do tipo TDateTimePicker não possui essa propriedade Text.... Ele possui uma propriedade Date que não é do tipo string como a propriedade Text, ou seja armazena data mesmo, do tipo TDate...
entao eu sugiro que você faça assim...
for i:=0 to Self.ComponentCount -1 do
begin
if Self.Components[i].ClassType = TEdit then
begin
if TEdit(Self.Components[i]).Visible then
begin
Close;
SQL.Clear;
*SQL PARA INSERIR*
ParamByName(´edtvalor´).AsString:= TEdit(Self.Components[i]).Text;
ParamByName(´edtobs´).AsString:= TEdit(Self.Components[i]).Text;
end;
end;
if Self.Components[i].ClassType = TDateTimePicker then
begin
if TDateTimePicker(Self.Components[i]).Visible then
begin
Close;
SQL.Clear;
*SQL PARA INSERIR*
ParamByName(´edtvalor´).AsString:= Datetostr(TDateTimePicker(Self.Components[i]).Date);
ParamByName(´edtobs´).AsString:= DatetoStr(TDateTimePicker(Self.Components[i]).Date);
end;
end;
end;
se der certo manda a resposta....
espero ter ajudado....
um abraço...
Gostei + 0
13/10/2005
Massuda
... ParamByName(´edtvalor´).AsString:= (Self.Components[i] as TEdit).Text; ParamByName(´edtobs´).AsString:= (Self.Components[i] as TEdit).Text; ...
Gostei + 0
13/10/2005
Lynx
Mas controlando tudo vou precisar digitar o comando SQL várias vezes.
ous seja:
TDateTimePicker1 edtValor1 edtObs1
TDateTimePicke2 edtValor2 edtObs2
etc...
poderia verificar se não está em branco os componentes acima, e colocar o comando sql para inserir.
O Problema disso que preciso repetir o comando sql para cada linha, de componentes visiveis em meu form
Gostei + 0
13/10/2005
Massuda
type TMeuGrupo = record DTPicker: TDateTimePicker; EditValor: TEdit; EditObs: TEdit; end; .... const MeuGrupo: array[1..4] of TMeuGrupo = ( (DTPicker: TDateTimePicker1; EditValor: EdtValor1; EditObs: EdtObs1), ... (DTPicker: TDateTimePicker4; EditValor: EdtValor4; EditObs: EdtObs4) ); ... for I := Low(MeuGrupo) to High(MeuGrupo) do begin if MeuGrupo[I].EditValor.Visible and MeuGrupo[I].EditObs.Visible then begin SuaQuery.Close; SuaQuery.SQL.Clear; SuaQuery.SQL.Add(...) SuaQuery.ParamByName(´edtvalor´).AsString:= MeuGrupo[I].EditValor.Text; SuaQuery.ParamByName(´edtobs´).AsString:= MeuGrupo[I].EditObs.Text; ... end; end;
Gostei + 0
13/10/2005
Lynx
Eu não estava conseguindo fazer o TDateTimePicker, ficar junto com os edit´s na hora de inserir.
Agora que você postou esse exemplo com array, já vou conseguir me virar
Obrigado mesmo :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)