Olá,
Da forma como o seu formulário está arranjado, não é possível fazer com que as caixas de listagem salvem os dados na tabela “Laboratórios” de forma prática através daquele método.
A solução para o caso vai vir através de macro. Abaixo eu estou colocando duas subrotinas adaptadas para o seu BD:
Sub ListaCascata ( oEvento )
' lstEstado -> Evento -> Mudança no status do item
' Atualiza a listbox lstCidade em função da
' escolha feita na listbox lstEstado
olstEstado = oEvento.Source.Model
oForm = olstEstado.Parent
sEscolhaAtual = olstEstado.CurrentValue
sSQL = "SELECT Cidade, IDC FROM ""Cidades do Brasil"" WHERE IDE = '" + sEscolhaAtual + "'"
olstCidade = oForm.GetByName( "lstCidade" )
olstCidade.ListSourceType = com.sun.star.form.ListSourceType.SQL
olstCidade.ListSource = Array( sSQL )
olstCidade.Refresh
End Sub
Sub AlteracaoRegistro( oEvento )
' MainForm -> Evento -> Após alteração do registro
' Atualiza a listbox lstCidade durante a navegação
' pelos registros
oForm = oEvento.Source
olstEstado = oForm.GetByName( "lstEstado" )
sEscolhaAtual = olstEstado.CurrentValue
' Não atualizar lstCidade caso seja um novo registro
If sEscolhaAtual = "" then
Exit Sub
End If
sSQL = "SELECT Cidade, IDC FROM ""Cidades do Brasil"" WHERE IDE = '" + sEscolhaAtual + "'"
olstCidade = oForm.GetByName( "lstCidade" )
olstCidade.ListSourceType = com.sun.star.form.ListSourceType.SQL
olstCidade.ListSource = Array( sSQL )
olstCidade.Refresh
End Sub
A Macro “AlteracaoRegistro” deve ser associada ao evento “Após alteração do registro” do MainForm e a Macro “ListaCascata”, ao evento “Mudança no status do item” da lstEstado.
Para o código funcionar corretamente é preciso que você passe as duas caixas de listagem (lstEstado e lstCidade) dos SubForm1 e SubForm2 para o MainForm. Também não esqueça de apagar a instrução SQL que forma o conteúdo da lista da lstCidades. Se ela continuar, vai bagunçar a operação do formulário.
Aqui está o BD alterado com as macros
e funcionando.
Atte,
Grafeno