Pergunte aqui
0

LO Base: Como acessar o conteúdo de um controle em um form?

perguntadas 2016-10-24 18:48:14 +0200

imagem do gravatar de Fábio de Salles

updated 2017-06-24 15:57:34 +0200

imagem do gravatar de Grafeno

Olá a todos! Uso o LO 4.4.7.2, com banco HSQLDB externo, em Ubuntu 12.04.

Eu construi um formulário edita registros de uma tabela. A tabela possui quatro campos: nome, chave, chave delegada e fonte. Portanto, o formulário possui quatro pares de controles label+text field.

Eu quero entrar o valor em apenas um dos campos, ou seja, preencher o controle TEXT FIELD que está associado a uma das colunas (nome, no caso) e ter o mesmo valor replicado nos outros três campos, chave, chave delegada e fonte. Eu mexi muito com MS Access e isso era feito alterando-se o valor do controle associado a cada campo.

Eu estou estudando e lendo e fuçando no LO Base há duas semanas, duas frustrantes semanas, sem progredir. Estou jogando a toalha e pedindo ajuda aqui. Como eu altero o conteúdo de um controle, dentro de um formulário? (Eu seu que preciso usar macros e atrelá-las aos eventos adequados - meu problema não é esse. É como escrever a macro que lê um controle e grava o valor em outro.)

Grato por qualquer ajuda,

Fábio

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

1

respondidas 2016-10-26 15:03:20 +0200

imagem do gravatar de Grafeno

Bom dia,

O código abaixo ilustra uma das formas de se acessar os controles, que é através do evento que dispara a macro. Toda macro atribuida a um evento pode receber um argumento (que no código abaixo é "oEvento") que representa a fonte, quem disparou o evento.

A macro abaixo deve ser atribuída ao evento "Ao perder o foco" da caixa de texto do campo "Nome". A partir disso, acessa-se a própria caixa de texto (txtNome), o formulário que a contem, e os demais controles, aqui chamados de txtChave, txtChaveDelegada, txtFonte. Então, o dado preenchido na caixa nome é replicado nas demais caixas e salvo no banco de dados em todos os campos.

Sub ReplicarEntrada( oEvento ) 
' Caixa de texto 'txtNome' > Eventos > Ao perder o foco

   ' O próprio textfield (disparador do evento)   
   oTxtNome = oEvento.Source.Model

   ' Obter o formulário 
   oForm = oTxtNome.Parent

   ' Obter os controles pelo nome
   oTxtChave = oForm.getByName("txtChave")
   oTxtChaveDel = oForm.getByName("txtChaveDelegada")
   oTxtFonte = oForm.getByName("txtFonte")  

   ' Preencher as caixas de texto
   oTxtChave.Text = oTxtNome.Text
   oTxtChaveDel.Text = oTxtNome.Text
   oTxtFonte.Text = oTxtNome.Text

   ' Mandar os dados das caixas de texto ao
   ' Resultset do formulário
   oTxtChave.Commit
   oTxtChaveDel.Commit
   oTxtFonte.Commit

   ' Salvar os dados na tabela   
   If oForm.isNew Then ' se um novo registro
      oForm.insertRow()
   Else ' se um registro já existente
      oForm.updateRow()
   End If

End Sub

Atte,

editar assinalar como ofensivo Excluir Link mais

Comentários

1

Sensacional, Grafeno, muito obrigado. Mais que resolver meu problema, você me deu uma luz sobre o caminho das pedras.

Até então eu pensava em referenciar os controles como elementos do form, mas pensava em obter o form hard coded no programa. Ao indicar o "oEvento.Source.Model" como ponto de partida, você refez minha paisagem mental! :-O

Muito obrigado! (Nem testei o código ainda, mas só de ver a sua sugestão eu já aprendi um monte!)

Fábio

imagem do gravatar de Fábio de SallesFábio de Salles ( 2016-10-31 12:06:09 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2016-10-24 18:48:14 +0200

Lidas: 59 vezes

Última atualização: Oct 26 '16