Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Set 19, 2019 4:02 pm Assunto: Problema para inserir dados do componente usando um for? |
|
|
Quero atribuir os valores dos componentes TJvSpinEdit e TCheckBox nas suas propriedades
Antes tinha só TJvSpinEdit e funcionava, agora inclui checkbox e não ta dando certo no checkbox a atribuição.
Veja codigo abaixo
Código: | for I := 0 to Pred(ComponentCount) do
begin
/// Attrib
if ((Components[I] is TJvSpinEdit) or (Components[I] is TCheckBox)) then
begin
if iIdLayout = 0 then
FColunasLayout.layout_idlayout := DM.fGetGenId('GEN_LAYOUT_ID')
else
FColunasLayout.layout_idlayout := iIdLayout;
FColunasLayout.campo_posicao := TJvSpinEdit(Components[I]).Name;
FColunasLayout.posicao := TJvSpinEdit(Components[I]).AsInteger;
FColunasLayout.campo_valida := TCheckBox(Components[I]).Name;
if TCheckBox(Components[I]).Checked then
FColunasLayout.valida := 1
else
FColunasLayout.valida := 0;
/// Grava Insert
if iIdLayout = 0 then
FColunasLayout.pInsert
else
FColunasLayout.pUpdate(FColunasLayout.layout_idlayout,
FColunasLayout.campo_posicao);
end;
end; |
No debbug ao passar aqui
Código: | FColunasLayout.campo_valida := TCheckBox(Components[I]).Name; |
ja percebi que vem o mesmo nome do TJvSpinEdit(Components[I]).Name.
Percebo que o for do component ou vc passa um ou o outro, mais preciso criar um método para validar os 2 componentes.
Como proceder este método? _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Set 19, 2019 4:32 pm Assunto: |
|
|
Antes de atribuir as propriedades teste a classe do componente.
Teste assim:
Código: | for i := 0 to Pred(ComponentCount) do
begin
/// Attrib
if ((Components[i] is TSpinEdit) or (Components[i] is TCheckBox)) then
begin
if iIdLayout = 0 then
FColunasLayout.layout_idlayout := DM.fGetGenId('GEN_LAYOUT_ID')
else
FColunasLayout.layout_idlayout := iIdLayout;
if (Components[i] is TJVSpinEdit) then
begin
FColunasLayout.campo_posicao := TJvSpinEdit(Components[i]).Name;
FColunasLayout.posicao := TJvSpinEdit(Components[i]).AsInteger;
end;
if (Components[i] is TCheckBox) then
begin
FColunasLayout.campo_valida := TCheckBox(Components[i]).Name;
if TCheckBox(Components[i]).Checked then
FColunasLayout.valida := 1
else
FColunasLayout.valida := 0;
end;
/// Grava Insert
if iIdLayout = 0 then
FColunasLayout.pInsert
else
FColunasLayout.pUpdate(FColunasLayout.layout_idlayout, FColunasLayout.campo_posicao);
end;
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Set 19, 2019 4:50 pm Assunto: |
|
|
natanbh1 escreveu: | Antes de atribuir as propriedades teste a classe do componente.
Teste assim:
Código: | for i := 0 to Pred(ComponentCount) do
begin
/// Attrib
if ((Components[i] is TSpinEdit) or (Components[i] is TCheckBox)) then
begin
if iIdLayout = 0 then
FColunasLayout.layout_idlayout := DM.fGetGenId('GEN_LAYOUT_ID')
else
FColunasLayout.layout_idlayout := iIdLayout;
if (Components[i] is TJVSpinEdit) then
begin
FColunasLayout.campo_posicao := TJvSpinEdit(Components[i]).Name;
FColunasLayout.posicao := TJvSpinEdit(Components[i]).AsInteger;
end;
if (Components[i] is TCheckBox) then
begin
FColunasLayout.campo_valida := TCheckBox(Components[i]).Name;
if TCheckBox(Components[i]).Checked then
FColunasLayout.valida := 1
else
FColunasLayout.valida := 0;
end;
/// Grava Insert
if iIdLayout = 0 then
FColunasLayout.pInsert
else
FColunasLayout.pUpdate(FColunasLayout.layout_idlayout, FColunasLayout.campo_posicao);
end;
end; |
|
Olá natanbh1, assim duplicou meu insert no banco.
Pq assim ele passa no primeiro if (Components[i] is TJVSpinEdit) then e grava
depois passa if (Components[i] is TJVSpinEdit) then e grava de novo _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Set 19, 2019 4:56 pm Assunto: |
|
|
Citação: | Olá natanbh1, assim duplicou meu insert no banco.
Pq assim ele passa no primeiro if (Components[i] is TJVSpinEdit) then e grava
depois passa if (Components[i] is TJVSpinEdit) then e grava de novo |
Entendi. Mas então você quer inserir apenas um registro com os dados do JVSpinEdit e do Checkbox?
Se puder, explique melhor o seu cenário. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Set 19, 2019 5:00 pm Assunto: |
|
|
natanbh1 escreveu: | Citação: | Olá natanbh1, assim duplicou meu insert no banco.
Pq assim ele passa no primeiro if (Components[i] is TJVSpinEdit) then e grava
depois passa if (Components[i] is TJVSpinEdit) then e grava de novo |
Entendi. Mas então você quer inserir apenas um registro com os dados do JVSpinEdit e do Checkbox?
Se puder, explique melhor o seu cenário. |
Isso mesmo, ficam todos na mesma linha.
E no banco gravar assim
Código: | CREATE TABLE COLUNAS_LAYOUT (
ID_CAMPO BIGINT NOT NULL,
LAYOUT_IDLAYOUT BIGINT,
CAMPO_POSICAO VARCHAR(50),
POSICAO INTEGER,
CAMPO_VALIDA VARCHAR(50),
VALIDA SMALLINT
); |
Se tiver como. Pois poso dar um checkbox ou não no primeiro elemento e no mesmo posso colocar um valor ou não no spin, assim para os proxximos componentes, gerando uma insert ou update de cada _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Set 19, 2019 5:17 pm Assunto: |
|
|
Você tem apenas 1 objeto do tipo JVEdit e 1 objeto do tipo Checkbox no form?
Se for, o recomendável é percorrer o form e pegando os dados deles e gravar em variáveis e depois você faz um insert apenas usando as variáveis.
Código: | var
i, posicao, valida: Integer;
campo_posicao, campo_valida: string;
begin
posicao := -1;
valida := -1;
campo_posicao := EmptyStr;
campo_valida := EmptyStr;
for i := 0 to Pred(ComponentCount) do
begin
/// Attrib
if ((Components[i] is TJVSpinEdit) or (Components[i] is TCheckBox)) then
begin
if (Components[i] is TJVSpinEdit) then
begin
campo_posicao := TJVSpinEdit(Components[i]).Name;
posicao := TJVSpinEdit(Components[i]).AsInteger;
end;
if (Components[i] is TCheckBox) then
begin
campo_valida := TCheckBox(Components[i]).Name;
if TCheckBox(Components[i]).Checked then
valida := 1
else
valida := 0;
end;
end;
end;
if iIdLayout = 0 then
FColunasLayout.layout_idlayout := DM.fGetGenId('GEN_LAYOUT_ID')
else
FColunasLayout.layout_idlayout := iIdLayout;
if (campo_posicao <> EmptyStr) and (posicao > -1) then
begin
FColunasLayout.campo_posicao := campo_posicao;
FColunasLayout.posicao := posicao;
end;
if (campo_valida <> EmptyStr) and (valida > -1) then
begin
FColunasLayout.campo_valida := campo_valida;
FColunasLayout.valida := valida;
end;
/// Grava Insert
if iIdLayout = 0 then
FColunasLayout.pInsert
else
FColunasLayout.pUpdate(FColunasLayout.layout_idlayout, FColunasLayout.campo_posicao);
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Set 19, 2019 5:28 pm Assunto: |
|
|
Entendi. Assim o código que passei não vai funcionar.
Você precisa de alguma maneira vincular a "dupla de componentes" (Ex: chkcpf, spincpf).
Inicialmente, sugiro usar a propriedade Tag, colocando a mesma tag em cada "dupla de componentes" para vinculá-los. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Set 19, 2019 5:42 pm Assunto: |
|
|
Seria mais ou menos assim a idéia:
Nos componentes chkcpf, spincpf você coloca o código 1 na propriedade Tag destes componentes.
Nos componentes ckhnome, spinnome você coloca o código 2, assim sucessivamente, formando pares.
Criaria um código para percorrer o form e adicionar em um stringlist os dados dos componentes em dupla.
Depois fazer um insert para cada linha do stringlist (contendo os dados da "dupla"). _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Set 20, 2019 8:24 am Assunto: |
|
|
natanbh1 escreveu: | Seria mais ou menos assim a idéia:
Nos componentes chkcpf, spincpf você coloca o código 1 na propriedade Tag destes componentes.
Nos componentes ckhnome, spinnome você coloca o código 2, assim sucessivamente, formando pares.
Criaria um código para percorrer o form e adicionar em um stringlist os dados dos componentes em dupla.
Depois fazer um insert para cada linha do stringlist (contendo os dados da "dupla"). |
Bom dia NatamBH1
Tem ideia como seria este codigo? as tag ja fiz as duplas, porém nao abstrai a ideia.
Penso que talvez seja assim
Código: | for I := 0 to Pred(ComponentCount) do
begin
/// Attrib
if (Components[I] is TJvSpinEdit) then
begin
if iIdLayout = 0 then
FColunasLayout.layout_idlayout := DM.fGetGenId('GEN_LAYOUT_ID')
else
FColunasLayout.layout_idlayout := iIdLayout;
if Components[I].Tag >= 1 then
begin
ManipulaValoresTag(Components[I].Tag);
end;
/// Grava Insert
if iIdLayout = 0 then
FColunasLayout.pInsert
else
FColunasLayout.pUpdate(FColunasLayout.layout_idlayout,
FColunasLayout.campo_posicao);
end;
end; |
Código: | ManipulaValoresTag(Components[I].Tag); |
Código: | procedure TfrmImportExcel.ManipulaValoresTag(const iTag: Integer);
begin
case iTag of
1:
begin
FColunasLayout.campo_posicao := edtcontatocpf.Name;
FColunasLayout.posicao := edtcontatocpf.AsInteger;
FColunasLayout.campo_valida := chkContatoCPF.Name;
if chkContatoCPF.Checked then
FColunasLayout.valida := 1
else
FColunasLayout.valida := 0;
end;
2:
begin
FColunasLayout.campo_posicao := edtcontatonome.Name;
FColunasLayout.posicao := edtcontatonome.AsInteger;
FColunasLayout.campo_valida := chkContatoNome.Name;
if chkContatoNome.Checked then
FColunasLayout.valida := 1
else
FColunasLayout.valida := 0;
end;
3:
begin
FColunasLayout.campo_posicao := edtcontatodatanascimento.Name;
FColunasLayout.posicao := edtcontatodatanascimento.AsInteger;
FColunasLayout.campo_valida := chkContatoDataNascimento.Name;
if chkContatoDataNascimento.Checked then
FColunasLayout.valida := 1
else
FColunasLayout.valida := 0;
end;
end;
end; |
Obrigado _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
|