Pergunte aqui
0

BASE - Caixa de Combinação

perguntadas 2015-05-14 15:44:35 +0200

imagem do gravatar de Romar

updated 2018-06-23 22:25:09 +0200

Olá pessoal, novamente preciso de ajuda. Estou tentando utilizar uma caixa de combinação, de forma que quando eu seleciono o valor dessa caixa, o subformulário (subform_grid) buscque as informações referente àquela entrada. Isso é possível ? Parecia facil de fazer quando eu tive a ideia, mas não está sendo. O.o

Minha idéia geral é: ter no formulário os campos de cadastro, e também esse grid, que ao carregar a tela, mostre todos os registros existentes na tabela ligada a ele, e que quando fosse inserido um valor na caixa de combinação, ele carregasse as informações ligadas somente esse valor. Atualmente o grid mostra os lançamentos apenas do item selecionado.

Agradeço a colaboração desde já.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

0

respondidas 2015-05-15 03:34:40 +0200

imagem do gravatar de LuizCarlos18RJ

updated 2015-05-16 03:35:05 +0200

Para conseguir o que quer , crie uma macro baseada nessa:`

Sub filtrar  'nome da macro

Declaração de variáveis

Dim Form1, SubForm_1, oConsulta, cmb_combo, cons_subtab, As Object, sSQL As String 

'Associar controles dos forms ( principal e subform ) as varáveis

' Nome do form principal
Set Form1=Forms("frm_principal")

' Trata o subform como um controle (nome do subform ) 
Set SubForm_1 = Form1.Controls("Subform") 

 ' declara a grid (controle de tabela ) que fica dentro do subform
Set cons_subtab = SubForm_1.form.Controls("Controle_de_tabela_1")

 ' declara o controle combobox do form principal
Set cmb_combo=Form1.Controls("cmb_principal")

 ' declara a consulta que será a origem dos dados do grid ( controle de tabela ) do subform associado ao form principal
oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("cons_subtab_pesquisa")


'filtra a consulta pelo valor do campo do registro selecionado na combobox e mais a frente atualiza o form
sSQL = "SELECT FROM `tab_minha tabela` WHERE `meu_campo` =  (' " & cmb_combo.Value & " ');" 


' executa ainstrução SQL
RunSQL(sSQL) 

 ' após a atualização a combo fica em branco para uma nova operação se desejável
cmb_combo.Value=""

 ' Atualiza o formulário e seus controles
Form1.Requery

Basicamente a sintaxe é essa, adapte ao seu código.

um abraço.

editar assinalar como ofensivo Excluir Link mais

Comentários

Quando eu executo a Macro, recebo o erro de Procedimento Sub ou procedimento de Function não definido, logo no início, ao associar o controle dos forms às variáveis. Sabe o que pode ser ?

imagem do gravatar de RomarRomar ( 2015-05-18 14:10:06 +0200 )editar

Oi Romar, vc poderia postar exatamente a msg de erro pra analisarmos melhor, mas já de antemão siga as seguintes dicas:

1 - Veja a versão do seu Libreoffice, no meu código eu uso recursos da biblioteca Access2base que está incorporado nativamente no Libreoffice a partir da versão 4, veja se seu libreoffice for 3.xx, neste caso vc terá que instalar na mão, procedimentos em www.access2base.com ( em inglês ), ams vc pode usar o google tradutor ou o google chrome que traduz páginas automaticamente

imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-05-20 15:07:02 +0200 )editar

2 - Não copie e cole esse código direto na macro, escrevi e posso ter cometido erros de sintaxe, tire os comentários que começam com o caracter ( ' ) e rode o código puro

3 - Atualize seu libreoffice para a versão mais recente.

imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-05-20 15:09:12 +0200 )editar

Opa, eu tinha essa dúvida se precisava instalar o Access2base, mas como estou usando a versão 4.4.2.2 acredito que deva ser funcional. O erro acontece na linha logo após a declaração de variáveis, no Set Form1=Forms("frm_principal"), eu troquei o nome do form de acordo com o meu, e o erro é a seguinte mensagem: "Erro em tempo de execução do Base. Procedimento de SUB ou de Function não definido." Eu apaguei todos os comentários, e ainda persiste.

imagem do gravatar de RomarRomar ( 2015-05-21 16:44:46 +0200 )editar

Pena que como eu conheci esse fórum a pouco tempo, meu karma é baixo e por isso eu não tenho como postar imagens, mas espero conseguir te passar uma dica pra resolver isso, siga os seguintes passos:

1 - Abra seu formulário no modo Design

2 - Vá no meu Exibir --> Barra de ferramentas --> Design de formulário

3 - Com essa nova barra de ferramentas procure um botão chamado "Navegador de Formulários", dica: passe lentamente o mouse sobre os botões que aparece o nome dele. (continua) 
imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-05-21 19:31:03 +0200 )editar
4 - Clicando nele vai abrir uma caixinha com todos os objetos do formulários e seus respectivos nomes, eles estarão dispostos numa hierarquia tipo árvore normalmente a primeira ocorrência da palavra "Form"
de cima pra baixo é o seu formulário principal (MainForm), mas mesmo que nas propriedades do formulário do modo desig seu nome seja "frm_principal ", se nessa caixinha não tiver  tb o MESMO NOME, as macros podem dar esse tipo de erro
(continua)
imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-05-21 19:39:00 +0200 )editar
5 - Se for esse o caso, de na janelinha não tiver o mesmo nome do seu form no modo design na propriedade "name", vc vai ter que mudar manualmente o nome do form na caixinha, basta clicar com o botão direto do mouse e clicar em "propriedades", aí vai abrir a mesma janela de propriedades de quando vc a acessa no modo design, aí é só mudar para o mesmo nome.

Fazendo tudo isso, tente rodar a macro novamente...( Nossa! Que pulo do gato esse LibreOffice... )

Espero ter ajudado...

imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-05-21 19:42:13 +0200 )editar

Olá novamente, comecei a testar a chamada da SUB entrando em cada processo, e encontrei algo. Durante a macro "Forms", um erro é encontrado, quando continuei executando o processo, apareceu uma mensagem de erro: Em uma tela com título de ABORT, a seguinte mensagem: Error #1501 (No active connection to a database found) occurred in a call to function 'Forms'. Não faço a menor ideia de como isso pode ser resolvido e o Google retorna poucos resultados com este problema. Vlw

imagem do gravatar de RomarRomar ( 2015-06-09 14:16:55 +0200 )editar

Se deu esse erro: "No active connection to a database found", verifica se no seu bd as tabelas tão dentro do próprio arquivo HSQLDB ( local ), ou se seu arquivo ".odb" faz conexão a um serviço de banco de dados ( ex: MySQL ), veja se não tem erro de conexão, caso seja local, antes de executar a macro, clique "na mão" na consulta a qual esse form faz referência, veja se essa consulta abre normalmente e só então depois rode a macro, eu sei que o Libre tem esses bug

imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-06-09 16:22:53 +0200 )editar

portanto confirme primeiro essa informação, vc tb pode tentar:

  • Mesmo tendo a versão 4.2 o Libre verifica nas bibliotecas, pra ver se vc vê lá listada uma chamada access2base

e se possível tb peço ajuda para minha dúvida "Porque o método "Requery" do formulário não funciona mais a contento?"

http://ask.libreoffice.org/pt-br/ques...

Se souber alguém que entenda , me indique por favor...

imagem do gravatar de LuizCarlos18RJLuizCarlos18RJ ( 2015-06-09 16:29:31 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2015-05-14 15:44:35 +0200

Lidas: 570 vezes

Última atualização: May 16 '15