ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problema para inserir dados do componente usando um for?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Set 19, 2019 4:02 pm    Assunto: Problema para inserir dados do componente usando um for? Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 19, 2019 4:32 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Set 19, 2019 4:50 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 19, 2019 4:56 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Set 19, 2019 5:00 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 19, 2019 5:17 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Set 19, 2019 5:22 pm    Assunto: Responder com Citação

Citação:
Você tem apenas 1 objeto do tipo JVEdit e 1 objeto do tipo Checkbox no form?


Não, tenho varios
Tipo
linha1 chkcpf, spincpf
linha2 ckhnome, spinnome
etc

Preciso preencher estes campos e gravar ou fazer update na tabela.

Obs, não testei o codigo acima, apenas respondi a pergunta.

Alem disso preciso de uma rotina para depois abrir esse form com seus devidos componentes preenchido da leitura do banco.
_________________
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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 19, 2019 5:28 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Set 19, 2019 5:31 pm    Assunto: Responder com Citação

natanbh1 escreveu:
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.


Qual a ideia sugerida? Pode ser uma saida.
_________________
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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 19, 2019 5:42 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Set 20, 2019 8:24 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Set 20, 2019 1:49 pm    Assunto: Responder com Citação

Bom eu não achei outra forma mesmo fiz cfe mostrei acima mesmo amigo e deu certo.

Obrigado por ajudar.
_________________
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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB