"Relacionar" dados entre duas caixas de listagem em banco de dados Libre Office

Olá, estou tentando criar um pequeno banco de dados e para isso estou usando o Libre Office Base. A maior parte das tabelas (acredito que todas as necessárias) já foram criadas e estou agora “montando” o formulário, porém, não consigo (e também não achei em lugar nenhum da net) uma forma de relacionar duas caixas de listagem da seguinte forma: Uma consta uma lista proveniente de uma tabela (Estado) criada da seguinte forma; “Estado” e “IDE” esta última a chave, a outra (Cidade) que são 27 tabelas, cada uma contendo as cidades de um Estado brasileiro criadas da seguinte forma; “Cidade”, “ID(sigla da Cidade)” que é a chave e “IDE”. O que desejo que seja feito, que quando selecionar na caixa (Estado) um determinado Estado na outra caixa (Cidade) sejam carregadas para escolha apenas as cidades referentes aquele Estado.

Preciso informar que é a primeira vez que me aventuro em um banco de dados e também não possuo conhecimento em programação, estou caminhando com tutoriais que encontrei na net, mas empaquei neste ponto.

Desde já agradeço a ajuda.

19/12/2014

Desculpem a minha ignorância, mas tem alguém aqui que possa ao menos me dizer se é possível realizar a tarefa que propuz? Ou se postei na seção errada, sei lá… Um “oi” já ajuda.

Obrigado.

Veja abaixo até onde cheguei…

"SELECT "Cidade AC"."Cidade", "Cidade AL"."Cidade", "Cidade AM"."Cidade", "Cidade AP"."Cidade", "Cidade BA"."Cidade", "Cidade CE"."Cidade", "Cidade DF"."Cidade", "Cidade ES"."Cidade", "Cidade GO"."Cidade", "Cidade MA"."Cidade", "Cidade MG"."Cidade", "Cidade MS"."Cidade", "Cidade MT"."Cidade", "Cidade PA"."Cidade", "Cidade PB"."Cidade", "Cidade PE"."Cidade", "Cidade PI"."Cidade", "Cidade PR"."Cidade", "Cidade RJ"."Cidade", "Cidade RN"."Cidade", "Cidade RO"."Cidade", "Cidade RR"."Cidade", "Cidade RS"."Cidade", "Cidade SC"."Cidade", "Cidade SE"."Cidade", "Cidade SP"."Cidade", "Cidade TO"."Cidade" FROM "Cidade TO", "Estado", "Cidade SP", "Cidade SE", "Cidade SC", "Cidade RS", "Cidade RR", "Cidade RO", "Cidade RN", "Cidade RJ", "Cidade PR", "Cidade PI", "Cidade PE", "Cidade PB", "Cidade PA", "Cidade MT", "Cidade MS", "Cidade MG", "Cidade MA", "Cidade GO", "Cidade ES", "Cidade DF", "Cidade CE", "Cidade BA", "Cidade AP", "Cidade AM", "Cidade AL", "Cidade AC" WHERE "Cidade TO"."IDE" = "Estado"."IDE" AND "Cidade SP"."IDE" = "Estado"."IDE" AND "Cidade SE"."IDE" = "Estado"."IDE" AND "Cidade SC"."IDE" = "Estado"."IDE" AND "Cidade RS"."IDE" = "Estado"."IDE" AND "Cidade RR"."IDE" = "Estado"."IDE" AND "Cidade RO"."IDE" = "Estado"."IDE" AND "Cidade RN"."IDE" = "Estado"."IDE" AND "Cidade RJ"."IDE" = "Estado"."IDE" AND "Cidade PR"."IDE" = "Estado"."IDE" AND "Cidade PI"."IDE" = "Estado"."IDE" AND "Cidade PE"."IDE" = "Estado"."IDE" AND "Cidade PB"."IDE" = "Estado"."IDE" AND "Cidade PA"."IDE" = "Estado"."IDE" AND "Cidade MT"."IDE" = "Estado"."IDE" AND "Cidade MS"."IDE" = "Estado"."IDE" AND "Cidade MG"."IDE" = "Estado"."IDE" AND "Cidade MA"."IDE" = "Estado"."IDE" AND "Cidade GO"."IDE" = "Estado"."IDE" AND "Cidade ES"."IDE" = "Estado"."IDE" AND "Cidade DF"."IDE" = "Estado"."IDE" AND "Cidade CE"."IDE" = "Estado"."IDE" AND "Cidade BA"."IDE" = "Estado"."IDE" AND "Cidade AP"."IDE" = "Estado"."IDE" AND "Cidade AM"."IDE" = "Estado"."IDE" AND "Cidade AL"."IDE" = "Estado"."IDE" AND "Cidade AC"."IDE" = "Estado"."IDE""

Agora se esse emaranhado de letras estiver razoavelmente certo, como eu informo a isso ai que a informação que ele (ela, sei lá) deve buscar para selecionar a tabela de cidades há ser mostrada está em uma caixa de listagem chamada Estado???

@A.Cesar , boa tarde!
Por que você dividiu as cidades em 27 tabelas se existe, pelo que entendi, um capo “IDE” que identifica qual é o seu estado? Uma tabela para os Estados e outra para as Cidades, relacionadas através do campo “IDE”, gerariam consultas e instruções SQL bem mais simples. Abraços

@A.Cesar, o que você propôs é possível, mas é um procedimento um pouco complexo. Parece que não existem tutorais em português. Seria interessante você disponibilizar uma versão mais simples, com menos registros (cidades e estados) nas tabelas, do seu banco de dados, para que possamos ajudá-lo diretamente. Abraços.

Ok, vou preparar uma com uma tabela contendo 3 estados e outra contendo umas 30 cidades. Eu dividi as cidades em várias tabelas pois não consegui com uma única (concentrando as cidades em uma única tabelas e adicionando a chave estrangeira (IDE= Identificação Estado). Já tentei uma tabela para os estados e outra para as cidades; uma tabela para os estados e uma para cada cidade. Vou postar o que pediu obrigado pela ajuda.

Este é o código SQL gerado pelo assistente para a configuração da caixa Estado, note que usei uma função nova “Join” para tentar conectar uma caixa a outra (estado/cidade).

“SELECT “Estado Teste”.*, “Estado Teste”.“Estado” FROM { OJ “Cid BR1” RIGHT OUTER JOIN “Estado Teste” ON “Cid BR1”.“IDE” = “Estado Teste”.“IDE” AND “Cid BR1”.“IDC” = “Estado Teste”.“IDE” AND “Cid BR1”.“Cidade” = “Estado Teste”.“IDE” }”

Este é o código SQL gerado pelo assistente para a configuração da caixa Cidade, note que usei o mesmo “join” para a tentativa de conexão (não deu certo).

“SELECT “Cid BR1”.*, “Cid BR1”.“Cidade” FROM “Cid BR1”, “Estado Teste” WHERE “Cid BR1”.“IDE” = “Estado Teste”.“IDE””
Lembrando que usei apenas uma tabela para as cidades e a chave estrangeira “IDE” não é automática foi preenchida por mim com os devidos códigos dos estados.
Por que não posso enviar imagens?
Tutoriais (mesmo em inglês) manda…

O que você pretende é vincular duas caixas de listagem de maneira que elas se comportaram “em cascata”. O valor escolhido na primeira deverá “filtrar” o conteúdo da lista da segunda.

Através do LibreOffice Base é possível fazê-lo mesmo sem recorrer a macros, mas o procedimento não é tão simples, exigindo uma série de procedimentos.

Vou tentar descrever abaixo estes procedimentos de forma mais resumida possível. Também, ao final, deixarei o arquivo que foi desenvolvido para esta resposta, em cima das informações que você passou.


Tabela

Descrição da imagem

Para lidar com as caixas de listagem em cascata, sem correr o risco de perder as informações armazenadas no banco de dados, é preciso criar uma tabela especial. Ela terá a função de registrar o estado e a cidade escolhidos no formulário. A tabela “Tab-Filtro”, em questão, foi criada com o seguinte:

Campo Tipo/Observação
Id Integer/Chave Primária.
IDE Idêntico ao campo IDE presente na tabela “Estado Teste”
IDC Idêntico ao campo IDC presente na tabela “Cid BR”

A tabela “Tab-Filtro” receberá apenas um único registro (Id=0), que será lido e modificado continuamente pelas caixas de listagem do formulário.

Formulário

Descrição da imagem

Para permitir o vínculo entre as duas caixas de listagem, cada uma delas deve estar em um formulário diferente, em outras palavras, o Formulário Principal deve conter um subformulário. A caixa de listagem “Estado” ficará no MainForm enquanto a “Cidade” estará no SubForm1.

Certifique-se que tanto o MainForm quanto o SubForm1 tenham a fonte de dados (Conteúdo) apontando para tabela “Tab-Filtro”. No SubForm1, o campo vinculado mestre e o campo vinculado escravo deverão ser configurados como: “IDE”.

Além disso, é preciso inserir um botão de pressão no SubForm1 com a propriedade “Ação” definida para “Atualizar formulário”. Ele atualizará o conteúdo da caixa de listagem “Cidade” em função do estado selecionado na caixa de listagem “Estado”.

Caixa de Listagem “Estado” (MainForm)

A SQL para construir seu conteúdo será:

SELECT “Estado”, “IDE” FROM “Estado Teste”

Caixa de Listagem “Cidade” (SubForm1)

A SQL para construir seu conteúdo será:

SELECT “Cidade”, “IDC” FROM “Cid BR1” WHERE “IDE” = ( SELECT “Tab-Filtro”.“IDE” FROM “Tab-Filtro” WHERE “Tab-Filtro”.“Id” = 0 )

A subconsulta ( SELECT “Tab-Filtro”.“IDE” FROM “Tab-Filtro” WHERE “Tab-Filtro”.“Id” = 0 ) é que garantirá que a caixa de listagem “Cidade” exibirá apenas as cidades atribuídas ao estado escolhido na caixa de listagem “Estado”.

Tutoriais (em inglês)

. Exemplo/Tutorial Filtrar/Procurar em Subformulários com listbox

. Cascata de Listbox com macros


Banco de Dados de Exemplo:

AskLibO_CxdList-Cascata.odb

Muito obrigado!!! Devo começar a realizar a confecção do bd assim que passar o final de ano e te retorno.
FELIZ 2015!!!

Olá @Grafeno, estou retornando para informar que suas instruções funcionaram perfeitamente, porém (sempre há um), o bd que estou tentando montar é um pouco maior que duas caixas de listagem. Trata-se de um cadastro de medicamentos que vão se acumulando ao longo do tempo em casa e que o destino correto será o lixo, este é meu estímulo, porém o objetivo é ir aprendendo cada vez mais sobre o assunto. Bem mas vamos lá, como disse as caixas funcionam perfeitamente, mas não salvam os dados no campo…

Continuando…
correspondente de uma outra tabela, se possível me explica como eu posso postar imagens e documentos aqui no forum além de enviar arquivos para que vocês possam entender melhor o que estou propondo agora.
Obrigado e aguardo contato.

@A.Cesar, como você não havia fornecido mais detalhes sobre como utilizaria as caixas de listagem, foquei em mostrar uma forma, sem macro, de vincula-las. Agora, conhecendo o contexto que você pretende usá-las, vejo que a solução não se aplica muito bem. Até é possível usar, com algumas adaptações nos formulários, mas não fica prático. O melhor mesmo, para seu caso, é usar macros. Vou dar uma olhada no bd amanhã e respondo sua nova pergunta.

Esta conversa continua aqui.