Pergunte aqui
1

Salvar dados de duas caixas de listagem ligadas a formulários diferentes nos campos respectivos de outra tabela ligada a um terceiro formulário

perguntadas 2015-01-07 07:41:31 +0200

imagem do gravatar de A. Cesar

updated 2016-04-17 16:41:54 +0200

imagem do gravatar de Grafeno

Estou criando um bd onde a princípio possuo 1 formulário principal e outros 3 subform, sendo que o formulário principal deve salvar seus dados na tabela "A" que contém todos os campos para isso. O subform salva seus dados na tabela "B" e os outros 2 subform (1 e 2) foram criados para executar a tarefa de ao se escolher um Estado na respectiva caixa de escolha ligada ao subform 1, a outra caixa de escolha que está ligada a um botão de atualização e ambos ao subform 2 selecionar somente as cidades correspondentes ao ESTADO selecionado na caixa ESTADO dica de @Grafeno para melhor entendimento veja aqui.

Abaixo as imagens: Descrição da imagem

Descrição da imagem

Aqui o bd

Estejam a vontade para usar o bd (se é que isso presta pra algo que não seja estudar o assunto) Agradeço a todos que puderem me ajudar, obrigado!

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

2

respondidas 2015-01-13 16:00:39 +0200

imagem do gravatar de Grafeno

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

editar assinalar como ofensivo Excluir Link mais

Comentários

Mais uma vez obrigado @Grafeno.

imagem do gravatar de A. CesarA. Cesar ( 2015-01-13 21:56:15 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2015-01-07 07:41:31 +0200

Lidas: 438 vezes

Última atualização: Jan 13 '15