Pergunte aqui

Histórico de revisões [voltar]

clique para ocultar/mostrar a revisão 1
Versão inicial

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