Boa tarde ao Máximo para todos!
Estou com dúvidas sobre o jeito em que eu desenvolvi o código para filtrar uma combo box e suas informações usando a SQL e WHERE como filtro.
Eu usei os códigos como o exemplo abaixo, mas quero saber se olhando e vendo em outro ponto de vista, ou seja uma cabeça com diferentes pensamentos, poderia me mostrar uma visão mais clara e objetiva da intenção que eu queria desenvolver ai.
Um pequeno exemplo do que seria este código é que quando o usuário clicar no campo que deseja filtrar e com aquele valor já indicado e logo em seguida clicar no botão filtro, ele faz o filtro da combo box mostrando somente os registro que contém aquelas informações. só que precisei fazer 3 funções para solucionar o problema.
O Problema é:
Quando é Integer o Where precisa estar como '" & variant & "'
Quando é String o Where precisa estar como " & variant & "
E quando é Data o Where precisa estar como LIKE '%" & ValorCampo & "%'
Só que não sei identificar o campo se é string, integer ou date, simplesmente tive que fazer 3 funções caso a primera dar o erro, ir para a próxima até achar seu ponto de encontro.
E ai quais as sugestões que vocês podem me dar?
Estou com dúvidas sobre o jeito em que eu desenvolvi o código para filtrar uma combo box e suas informações usando a SQL e WHERE como filtro.
Eu usei os códigos como o exemplo abaixo, mas quero saber se olhando e vendo em outro ponto de vista, ou seja uma cabeça com diferentes pensamentos, poderia me mostrar uma visão mais clara e objetiva da intenção que eu queria desenvolver ai.
Um pequeno exemplo do que seria este código é que quando o usuário clicar no campo que deseja filtrar e com aquele valor já indicado e logo em seguida clicar no botão filtro, ele faz o filtro da combo box mostrando somente os registro que contém aquelas informações. só que precisei fazer 3 funções para solucionar o problema.
O Problema é:
Quando é Integer o Where precisa estar como '" & variant & "'
Quando é String o Where precisa estar como " & variant & "
E quando é Data o Where precisa estar como LIKE '%" & ValorCampo & "%'
Só que não sei identificar o campo se é string, integer ou date, simplesmente tive que fazer 3 funções caso a primera dar o erro, ir para a próxima até achar seu ponto de encontro.
E ai quais as sugestões que vocês podem me dar?
- Código:
Option Compare Database
Option Explicit
Private ValorCampo As Variant
Private NomeCampo As String
Private Sub cmdFilterSelect_Click()
On Error GoTo cmdFilterBySelection_Click_Error
Call FormFilter
Exit_cmdFilterBySelection_Click:
Exit Sub
cmdFilterBySelection_Click_Error:
Call ErrorSub
Resume Exit_cmdFilterBySelection_Click
End Sub
Private Function FormFilter()
'Caixa de Texto
On Error GoTo Proximo
Dim SQL As String
DoCmd.GoToControl Screen.PreviousControl.Name
NomeCampo = Me.ActiveControl.Name
ValorCampo = Me(NomeCampo).value
Call Combo("SELECT NRegistro FROM regCadastro WHERE " & NomeCampo & " = '" & ValorCampo & "' ORDER BY NRegistro ASC;", "Cn1", Me.NRegistro, "NRegistro")
msgbox "1"
Exit Function
Proximo:
Call FormFilter2
Exit Function
End Function
Private Function FormFilter2()
'Combo Boxs e Numeros
On Error GoTo Proximo2
Dim SQL As String
DoCmd.GoToControl Screen.PreviousControl.Name
Call Combo("SELECT NRegistro FROM regCadastro WHERE " & NomeCampo & " = " & ValorCampo & " ORDER BY NRegistro ASC;", "Cn1", Me.NRegistro, "NRegistro")
msgbox "2"
Exit Function
Proximo2:
Call FormFilter3
Exit Function
End Function
Private Function FormFilter3()
'Datas
Dim SQL As String
DoCmd.GoToControl Screen.PreviousControl.Name
ValorCampo = Format(CDate(Me(NomeCampo).value), "dd/mm/yyyy")
Call Combo("SELECT NRegistro FROM regCadastro WHERE [" & NomeCampo & "] LIKE '%" & ValorCampo & "%' ORDER BY NRegistro ASC;", "Cn1", Me.NRegistro, "NRegistro")
msgbox "3"
End Function
- Código:
Public Function Combo(SQL As String, Conexao As String, Campo As Object, SelectID As String, Optional SelectNome As String)
Dim rsc As New ADODB.Recordset
'Seleciona a conexão e conecta com o banco de dados!
Select Case Conexao
Case "Cn1"
Call Cn1X
rsc.Open SQL, Cn1, adOpenForwardOnly, adLockReadOnly
Case "Cn2"
Call Cn2X
rsc.Open SQL, Cn2, adOpenForwardOnly, adLockReadOnly
Case Else
Dialog.Box "Essa conexão que você usou no Combo não existe Selecione entre as Cn1X, Cn2X..."
End Select
'Limpa a combo box
Campo.RowSource = ""
If SelectNome = "" Or IsNull(SelectNome) Then
Do While Not rsc.EOF
Campo.AddItem rsc(SelectID) & ";"
rsc.MoveNext
Loop
Else
Do While Not rsc.EOF
Campo.AddItem rsc(SelectID) & ";" & rsc(SelectNome) & ";"
rsc.MoveNext
Loop
End If
'Fecha todas as conexões com o banco de dados
rsc.Close
Set rsc = Nothing
If Conexao = Cn1 Then
Exit Function
ElseIf Conexao = Cn2 Then
Cn2.Close
Set Cn2 = Nothing
End If
End Function