locked
Como montar uma única select que traga somente algumas informações ou todas, dependendo dos parâmetros informados RRS feed

  • Pergunta

  • Bom dia,

    imaginem a seguinte select:

    Select Nome From Funcionários Where Idade >= ValorIdade

    O parâmetro ValorIdade é informado é selecionado pelo usuário em uma caixa de listagem. Nesta caixa há os seguintes valores: 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, Todos

    Bueno,  eu poderia fazer, via VBA, um código assim:

    If CaixaDeListagem <> "Todos" then
        Select Nome From Funcionários Where Idade >= ValorIdade
    else
        Select Nome From Funcionários
    end if

    Mas eu gostaria de, em vez de fazer uma cláusula If/else/end if, montar apenas uma select, que execute o filtro ou não dependendo do que estiver na caixa de listagem. Algo mais ou menos assim:

    Select Nome From Funcionários, If CaixaDeListagem <> "Todos" then Idade >= ValorIdade

    Estou procurando uma solução neste sentido, pois a select que estou montando possui inúmeras condições, e em cada condição ´deve ser possível filtrar por determinados dados ou exibir tudo. E eu teria que criar várias selects diferentes, uma para cada combinação possível... e se desse para criar apenas uma seria mais prático

    grato
    quarta-feira, 25 de março de 2009 11:46

Respostas

  • Neste seu exemplo, você poderia atribuir o valor 0 ou -1 ao item "Todos".

    Como você tem muitos parâmetros, entendo que vai montar o seu SELECT por VBA. Uma boa prática aqui é concatenar o seu WHERE, critério a critério:

    Dim strSQL As String
    Dim strWhere As String
    
    strSQL = "SELECT * FROM Funcionarios"
    
    If IsNumeric(txtIdade)=True Then
        If strWhere="" Then
            strWhere=" WHERE "
        Else
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "Idade>=" & txtIdade
    End If
    
    If IsNull(txtNome)=False Then
        If strWhere="" Then
            strWhere=" WHERE "
        Else
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "NomeFuncionario LIKE '*" & txtNome & "*'"
    End If
    
    etc.
    
    Me.RecordSource = strSQL & strWhere

    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    • Marcado como Resposta BladeRunner2019 terça-feira, 31 de março de 2009 11:22
    domingo, 29 de março de 2009 00:03
    Moderador

Todas as Respostas

  • Neste seu exemplo, você poderia atribuir o valor 0 ou -1 ao item "Todos".

    Como você tem muitos parâmetros, entendo que vai montar o seu SELECT por VBA. Uma boa prática aqui é concatenar o seu WHERE, critério a critério:

    Dim strSQL As String
    Dim strWhere As String
    
    strSQL = "SELECT * FROM Funcionarios"
    
    If IsNumeric(txtIdade)=True Then
        If strWhere="" Then
            strWhere=" WHERE "
        Else
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "Idade>=" & txtIdade
    End If
    
    If IsNull(txtNome)=False Then
        If strWhere="" Then
            strWhere=" WHERE "
        Else
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "NomeFuncionario LIKE '*" & txtNome & "*'"
    End If
    
    etc.
    
    Me.RecordSource = strSQL & strWhere

    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    • Marcado como Resposta BladeRunner2019 terça-feira, 31 de março de 2009 11:22
    domingo, 29 de março de 2009 00:03
    Moderador
  • Muito bom!!!  obrigado
    terça-feira, 31 de março de 2009 11:22