I need to run a Sql command, using a criterion inserted in another control.
.
I have created a macro that performs this. However, when I update the form for the command to be passed, the data filled in the other controls on the form are deleted.
.
How can I do this using a macro while keeping the other controls filled in?
.
Sample code
Private Sub CbbUf_ObterComarca(pEvent)
Dim oCbbUf As Object ' Caixa de combinação UF
Dim oCbbComarca As Object ' Caixa de combinação Comarca
Dim sSql As String ' Comando SQL
Dim sTemp As String ' Texto da cbbUF temporário (Para Windows)
Dim sCriterio As String ' Criterio da Declaração WHERE
' Comando a ser passado sem criterio
sSql = "SELECT Comarca FROM tb_Comarcas WHERE UF = "
' Obtem formulário principal para acessar os objetos de desenho
oForm = pEvent.Source.Model.Parent
' Percorre os controles para obter as Caixas de Combinação Uf e Comarca,
' e obtem a seleção na cbbUF para filtrar a consulta na cbbComarca
For Each oCtrl In oForm.ControlModels
If oCtrl.Name = "cbbUF" Then
oCbbUf = oCtrl
sTemp = oCbbUf.Text
sCriterio = Chr$(39) & sTemp & Chr$(39) ' Criterio deve ser passado com apóstrofes (aspas únicas)
ElseIf oCtrl.Name = "cbbComarca" Then
oCbbComarca = oCtrl
End If
Next
' Passa o comando Sql com o criterio para a cbbComarca
oCbbComarca.ListSource = sSql & sCriterio
' Diz ao MainForm que tipo de consulta será passado
' Ajuda em: https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1sdb_1_1CommandType.html
oForm.commandType = 2
' Atualiza o formulário para o comando ser passado com base no SO (Windows = 1; Unix = 4)
Select Case GetGuiType()
Case 1
oForm.reload()
oCbbUf.Text = sTemp
Case 4
oForm.reload()
End Select
End Sub 'BasicProject.Arquivos.CbbUf_ObterComarca
.
Sample File