Pergunte aqui
1

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

perguntadas 2014-12-17 16:25:55 +0200

imagem do gravatar de A. Cesar

updated 2016-04-17 16:42:25 +0200

imagem do gravatar de Grafeno

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 ...
(mehr)
editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

@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

imagem do gravatar de GrafenoGrafeno ( 2014-12-22 19:08:51 +0200 )editar

@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.

imagem do gravatar de GrafenoGrafeno ( 2014-12-22 19:23:14 +0200 )editar

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.

imagem do gravatar de A. CesarA. Cesar ( 2014-12-23 11:12:27 +0200 )editar

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" }”

imagem do gravatar de A. CesarA. Cesar ( 2014-12-23 16:52:59 +0200 )editar

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....

imagem do gravatar de A. CesarA. Cesar ( 2014-12-23 16:57:56 +0200 )editar

1 Resposta

2

respondidas 2014-12-28 13:23:21 +0200

imagem do gravatar de Grafeno

updated 2014-12-28 13:30:08 +0200

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

editar assinalar como ofensivo Excluir Link mais

Comentários

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

imagem do gravatar de A. CesarA. Cesar ( 2014-12-29 18:21:57 +0200 )editar

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...

imagem do gravatar de A. CesarA. Cesar ( 2015-01-07 06:19:40 +0200 )editar

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.

imagem do gravatar de A. CesarA. Cesar ( 2015-01-07 06:23:53 +0200 )editar

@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.

imagem do gravatar de GrafenoGrafeno ( 2015-01-13 14:24:59 +0200 )editar

Esta conversa continua aqui.

imagem do gravatar de A. CesarA. Cesar ( 2015-02-03 09:31:20 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2014-12-17 16:25:55 +0200

Lidas: 1,443 vezes

Última atualização: Dec 28 '14