Obrigado Grafeno pela dica, infelizmente não consegui fazer, deu erro aqui, pode ser que eu tenha feito besteira ou meu Libre tá com bug, mas consegui de outra forma que posto aqui e talvez sirva como um modo a mais de resolver o mesmo problema para os futuros leitores deste tópico…
Eu fiz por macro no Base, fiz tudo baseado no formulário e não SQL, inserir campo “grid” ( controle de tabela ) baseado na consulta que tinha criao previamente e usei caixas de texto do tipo “campo calculado” para fazer o cáculo pegando os valores através das propriedades desses objetos (.value )
E ainda modifiquei a macro para me mudar a cor da fonte da caixa de resultado para azul em caso de saldo positivo, preto para nulo e vermelho para saldo negativo…
segue a macro:
Sub atualiza_form_licenca_sw
'---DECLARA VARIÁVEIS---------------------------------------------
Dim Form1, oConsulta, oConsulta2, cmb_codsw, SubForm_1, SubForm_2, cons_subtab,cons_subtab2, oLicencas, oUtilizadas, oCampo_numerico_1, oCampo_numerico_2, oCampo_numerico_3, label_1, label_2 As Object, x, y, r, w, z as integer, sSQL as String
'---SETA VARIÁVEIS A OBJETOS DO FORMULÁRIO------------------------
Set Form1=Forms("frm_licenca_sw")
cmb_codsw=Form1.Controls("txtSoftware")
oCampo_numerico_1 = Form1.Controls("Campo numérico 1")
oCampo_numerico_2 = Form1.Controls("Campo numérico 2")
oCampo_numerico_3 = Form1.Controls("Campo numérico 3")
label_1 = Form1.Controls("Caixa de texto 1")
label_2 = Form1.Controls("Caixa de texto 2")
'---SETA VARIÁVEIS A OBJETOS DOS SUBFORMULÁRIOS NO FORM PRINCIPAL--
Set SubForm_1 = Form1.Controls("Subform")
Set cons_subtab = SubForm_1.form.Controls("Controle_de_tabela_1")
Set oLicencas = cons_subtab.Controls("TextField3")
'----------------------------------------------------------
Set SubForm_2 = Form1.Controls("Subform2")
Set cons_subtab2 = SubForm_2.form.Controls("Controle_de_tabela_2")
Set oUtilizadas = cons_subtab2.Controls("TextField1")
'---SETA VARIÁVEIS A OBJETOS DO BANCO DE DADOS------------------------
oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("cons_subtab_licenca_sw")
oConsulta2 = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("cons_contar_subtab_licenca_sw")
'---EXECUTA INSTRUÇÕES SQL NAS CONSULTAS------------------------
oConsulta.Command = "SELECT DISTINCT `tab_licenca`.`cod_hw`, `tab_licenca`.`software`, `tab_software`.`total_licencas_adquiridas`, `tab_software`.`licencas_restantes` FROM `c06`.`tab_licenca` AS `tab_licenca`, `c06`.`tab_software` AS `tab_software` WHERE `tab_licenca`.`software` = `tab_software`.`nome` AND `tab_licenca`.`software` = '" & cmb_codsw.Value & "' ORDER BY `tab_licenca`.`cod_hw` ASC, `tab_licenca`.`software` ASC"
oConsulta2.Command = "SELECT COUNT(`software`) FROM `cons_subtab_licenca_sw`"
'---INICIO--------------------------------------
Form1.Requery
if oLicencas.Value="Livre" then 'Trata Valor texto em campo numérico
label_1.Visible=True
label_2.Visible=True
oCampo_numerico_1.Visible=False
oCampo_numerico_3.Visible=False
if IsEmpty (oUtilizadas.Value) then 'Trata valores Nulos
oCampo_numerico_2.Value = 0
else
x = oUtilizadas.Value
z = CInt (x)
oCampo_numerico_2.Value = z
endif
sSQL = "UPDATE `c06`.`tab_software` SET `licencas_restantes` = ('Livre') WHERE `nome` = ('" & cmb_codsw.Value & "');"
RunSQL(sSQL)
elseif IsEmpty (oLicencas.Value) then 'Trata valores Nulos
label_1.Visible=False
label_2.Visible=False
oCampo_numerico_1.Visible=True
oCampo_numerico_3.Visible=True
y = 0
oCampo_numerico_1.Value = y
if IsEmpty (oUtilizadas.Value) then 'Trata valores Nulos
oCampo_numerico_2.Value = 0
else
x = oUtilizadas.Value
z = CInt (x)
oCampo_numerico_2.Value = z
endif
r = CInt(y) - CInt(z)
if r > 0 then 'Altera cor da fonte da caixa de texto condicionalmente para alertar sobre valores
oCampo_numerico_3.ForeColor = RGB(0, 0, 192) 'Azul
elseif r = 0 then
oCampo_numerico_3.ForeColor = RGB(0, 0, 0) 'Preto
else
oCampo_numerico_3.ForeColor = RGB(255, 0, 0) 'Vermelho
endif
oCampo_numerico_3.Value = r 'Resultado final da qtd de licenças disponíveis exibida na caixa de texto.
sSQL = "UPDATE `c06`.`tab_software` SET `licencas_restantes` = ('" & oCampo_numerico_3.Value & "') WHERE `nome` = ('" & cmb_codsw.Value & "');"
RunSQL(sSQL)
else 'Converte variáveis para números afins de execução de cálculos
label_1.Visible=False
label_2.Visible=False
oCampo_numerico_1.Visible=True
oCampo_numerico_3.Visible=True
y = oLicencas.Value
w = CInt (y)
oCampo_numerico_1.Value = w
if IsEmpty (oUtilizadas.Value) then 'Trata valores Nulos
oCampo_numerico_2.Value = 0
else
x = oUtilizadas.Value
z = CInt (x)
oCampo_numerico_2.Value = z
endif
r = CInt(w) - CInt(z)
if r > 0 then 'Altera cor da fonte da caixa de texto condicionalmente para alertar sobre valores
oCampo_numerico_3.ForeColor = RGB(0, 0, 192) 'Azul
elseif r = 0 then
oCampo_numerico_3.ForeColor = RGB(0, 0, 0) 'Preto
else
oCampo_numerico_3.ForeColor = RGB(255, 0, 0) 'Vermelho
endif
oCampo_numerico_3.Value = r 'Resultado final da qtd de licenças disponíveis exibida na caixa de texto.
sSQL = "UPDATE `c06`.`tab_software` SET `licencas_restantes` = ('" & oCampo_numerico_3.Value & "') WHERE `nome` = ('" & cmb_codsw.Value & "');"
RunSQL(sSQL)
endif
Form1.Requery
End Sub