Pergunte aqui
1

Libreoffice Base Consultas: Como utilizar critério vindo de campo de formulário?

perguntadas 2015-03-17 18:43:17 +0200

esta mensagem está marcada como wiki comunitário

Esta mensagem é um wiki. Qualquer pessoa com karma >75 é bem-vinda para a melhorar.

Usando o Libreoffice Base, criei um formulário ( que abre com o write dentro do Base ) baseado numa tabela chamanda licenca_software, nesse form eu tenho 3 campos:

ID; ( chave primária ) maquina; ( nome de todos os pcs da minha rede ) software;( programa instalado nessa máquina )

Para preencher esses campos no campo [maquina], eu uso uma combobox cuja lista vem de uma tabela chamada hardware que tem os nomes de máquinas da minha rede que cadastrei.

No campo software, também tem uma combobox cuja lista vem de uma tabela chamada software que tem os programas aos quais tenho licença para instalação.

Também neste form tem um subform vinculado a uma consulta que mostra TODAS as máquinas e seus respectivos softwares instalados.

O mais próximo que cheguei foi conseguir usar "consultas parâmetros" que consiste em usar a clausula :qual o valor do campo? no campo critério de uma consulta em modo design, mas acontece que abre uma caixa de diálogo com a pergunta e um campo de texto de entrada pelo usuário, mas não era isso o que eu queria e sim que o critério viesse de um valor de um objto do formulário ( como uma caixa de texto ou uma caixa de combinação).

Gostaria de no modo design dessa consulta usar como critério o valor que tiver selecionado na combobox do meu formulário, se fosse no MSAccess eu faria assim:

critério: [Formulários]![frm_licenca]![cmb_software]

Mas como fazer a mesma referência no Libreoffice Basic?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

@LuizCarlos18RJ, seria interessante você publicar para nós um BD de exemplo, com a estrutura que você montou, para que seja possível ajudá-lo com mais precisão. Atte, Grafeno.

imagem do gravatar de GrafenoGrafeno ( 2015-04-10 13:49:50 +0200 )editar

1 Resposta

0

respondidas 2015-04-15 15:31:37 +0200

esta mensagem está marcada como wiki comunitário

Esta mensagem é um wiki. Qualquer pessoa com karma >75 é bem-vinda para a melhorar.

Nossa, após muita pesquisa com o google tradutor no Oofórum, finalmente cheguei a solução com o código abaixo:

Sub atualiza_form
Dim Form1,oConsulta, cmb_codhw As Object

Set Form1=Forms("frm_licenca")
cmb_codhw=Form1.Controls("txtMicro")
oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("cons_subtab_licenca")
oConsulta.Command = "SELECT DISTINCT `cod_hw`, `software` FROM `c06`.`tab_licenca` AS `tab_licenca` WHERE `cod_hw` = '" & cmb_codhw.Value & "' ORDER BY `cod_hw` ASC, `software` ASC"
'print cmb_codhw.Value
Form1.Requery
End Sub

1 - Instalei a extensão access2base como recomendado por colegas aqui no fórum, mas agora não sei se misturei códigos VBA com Oobasic, mas enfim esse deu certo.

2 - Quase tudo tem que declarar como objeto: tanto os nomes dos controles do formulários como as variáveis.

3 - Numa instrução sql que vc pode rodar ou pelo método RunSQL ou objeto.command para referenciar um objeto ele tem que tá na seguinte sintase:

WHERE `cod_hw` = '" & cmb_codhw.Value & "'' ( Lê-se o E comercial - & )

Outro exemplo de código que funciona para finalmente esclarecer as dúvidas de como referenciar um controle num form:

( Um form simples cm 2 cx de texto de entrada , uma de resultado e um botão calculo )

Sub Calcular

Dim soma, var1, var2 as integer, form1, txt1, txt2,scrol,resultado as Object

Set form1=Forms("frm_jogadores")
txt1=form1.Controls("Campo numérico 1")
txt2=form1.Controls("Campo numérico 2")
scrol1=form1.Controls("Barra de rolagem 1")
resultado=form1.Controls("result")

var1=txt1.Value

var2=txt2.Value

soma=(var1+var2)*2

resultado.Value= soma
scrol1.Value=50
form1.Refresh
End Sub

A partir desse exemplo ficou mais fácil para fazer referências aos controles dos formas, para o caso de um subform, vide meu histórico de perguntas lá eu e o Graffeno demos um exemplo, bom proveito a todos.

editar assinalar como ofensivo Excluir Link mais

Comentários

Esse código não está funcionando aqui. Já tentei alterar algumas partes do mesmo, mas não deu certo. Quando coloca esta macro em um botão e tento rodá-la, há uma parada no "Set form1=Forms("frmTeste") dizendo-me que "Procedimento Sub ou Function não definidos". Se retiro esta parte, ele para no "txt1=form1.Controls("Campo_numérico_1")! Uso o Base 5.2.1 e já baixei o Access2Base, embora a mesma biblioteca já se encontra-se instalada. O que fazer agora?

imagem do gravatar de LeviLevi ( 2017-02-19 20:57:02 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

2 seguidores

Estatísticas

Perguntadas: 2015-03-17 18:43:17 +0200

Lidas: 1,685 vezes

Última atualização: Apr 20 '15