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

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

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,

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! :open_mouth:

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

Fábio