MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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

    RneoX
    RneoX
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  RneoX 10/10/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.
    avatar
    Convidado
    Convidado


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

    Mensagem  Convidado 18/11/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 1/2/2014, 10:49, editado 1 vez(es) (Motivo da edição : Tópico dado como resolvido por falta de resposta)

      Data/hora atual: 19/4/2024, 16:36