MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Dúvida sobre outro ponto de vista do uso do SQL

    Compartilhe

    RneoX
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 248
    Registrado : 26/07/2011

    [Resolvido]Dúvida sobre outro ponto de vista do uso do SQL

    Mensagem  RneoX em Qui 10 Out 2013, 19:24

    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?

    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
    Se precisarem saber como chamo a função Combo e como funciona está aqui:

    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


    .................................................................................
    Conhece meus projetos que ajudam os usuários a entender o funcionamento de várias funções encontradas aqui no fórum? também pode usa-lo para seus negócios ou para uso pessoal, não conhece? então visite aqui e veja como está bacana: Projeto Casco do Máximo Access v3.0 (Pré-Release 4.0) 
    Ser livre é ter liberdade para expressar suas idéias,
    Ser diferente é ser especial e o reverso da igualdade,
    Ser criativo é ser poderoso,
    Ter conhecimentos e não dividir-los é ser egoísta e orgulhoso,
    Ensinar é um prazer que todos devem ter por seus alunos, pois é dele que vem nossos troféus.

    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Dúvida sobre outro ponto de vista do uso do SQL

    Mensagem  HARYSOHN em Seg 18 Nov 2013, 12:23

    Identifica o campo...

    IsDate
    IsNumeric >> aqui se for numérico outro if como condição do Valor

    As variáveis Integer são armazenadas como números de 16 bits (2 bytes) com valor no intervalo de -32.768 a 32.767. O caractere de declaração de tipo para Integer é o sinal de porcentagem (%).

    As variáveis Long (inteiro longo) são armazenadas como números de 32 bits (4 bytes), sinalizados, no intervalo de -2.147.483.648 a 2.147.483.647. O caractere de declaração de tipo para Long é o ‘E’ comercial (&).

    As variáveis Byte são armazenadas como números de 8 bits (1 byte), sem sinal, únicos, que variam em valor de 0 a 255.
    O tipo de dados Byte é útil para conter dados binários.

    As variáveis Double (vírgula flutuante de dupla precisão) são armazenadas como números IEEE de vírgula flutuante de 64 bits (8 bytes), com valor no intervalo de -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos e de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. O caractere de declaração de tipo para Double é o sinal #.

    Os códigos para caracteres String variam de 0 a 255. Os primeiros 128 caracteres (de 0 a 127) do conjunto de caracteres correspondem às letras e aos símbolos de um teclado padrão norte-americano e são iguais àqueles definidos pelo conjunto de caracteres ASCII. Os 128 caracteres (de 128 a 255) seguintes representam caracteres especiais, como letras de alfabetos internacionais, acentos, símbolos de moeda e frações. O caractere de declaração de tipo para String é o cifrão ($).


    Cumprimentos.


    Última edição por HARYSOHN em Sab 01 Fev 2014, 10:49, editado 1 vez(es) (Razão : Tópico dado como resolvido por falta de resposta)


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: Dom 11 Dez 2016, 00:18