none
Criar função no excel para fazer select em um bd access RRS feed

  • Pergunta

  • Olá galera!

    estou com uma dúvida, como faço para criar minha própria function para buscar o valor de um campo em um banco no access?

    esta function quero que funcione da seguinte forma:

    SelectSQL(Tabela;Campo;Criterios)

    Exemplo function inserida em uma célula da planilha:

    =SelectSQL("Funcionarios";"FuncionarioNome";"Where CodigoFuncionario = "&$A$2)

    tentei com o seguinte código mas não obtive resultado plausível.

    Function SelectSQL(Tabela As String, Campo As String, Criterios As String) As Variant
        
        Dim Resultado As Variant
        
        
        Dim sql As String
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim i As Integer
        
        'definindo a conexão com o banco de dados
        Set cn = New ADODB.Connection
        
        cn.ConnectionString = "Provider=Microsoft.jet.oledb.4.0;Data Source = c:/CADFUNCIONARIOS.MDB;Database Password=123456"
        
        cn.Open
        
        'definindo um novo objeto recordset
        Set rs = New ADODB.Recordset
        
        'definindo a instrução sql
        sql = "SELECT " & Tabela & "." & Campo & " From " & Tabela & " where " + Criterios + ";"
        
        rs.Open sql, cn
        
        
        i = 2
        If Not rs.EOF Then
            Do While Not rs.EOF
                Resultado = rs(0)
                rs.MoveNext
            i = i + 1
            Loop
        End If
        
        cn.Close
        
        SelectSQL = Resultado
        
    End Function

    Obrigado pela atenção!

    sexta-feira, 6 de julho de 2012 18:25

Respostas

  • Consegui fazer a conexão e realizar o select

    Function SelectSQL(Tabela As String, Campo As String, Criterios As String) As Variant
        
        Dim Resultado As Variant
        
        
        Dim sql As String
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        'definindo a conexão com o banco de dados
        Set cn = New ADODB.Connection
        
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/CADFUNCIONARIOS.MDB;Jet OLEDB:Database Password=123456;Jet OLEDB:Bypass UserInfo Validation=False"
        
        
        cn.Open
        
        'MsgBox "teste"
        
        'definindo um novo objeto recordset
        Set rs = New ADODB.Recordset
        
        'definindo a instrução sql
        sql = "SELECT " & Tabela & "." & Campo & " From " & Tabela & " where " & Criterios & ";"
        'MsgBox sql
        rs.Open sql, cn
        
        
        i = 2
        If Not rs.EOF Then
            Do While Not rs.EOF
                Resultado = rs(0)
                rs.MoveNext
            Loop
        End If
        
        cn.Close
        
        SelectSQL = Resultado
        
    End Function

    Mas agora preciso fazer uma pesquisa com está função que criei que usa data e não estou conseguindo obter o valor

    preciso que a função busque o horário de entrada do funcionário no banco de dados no dia em que ele apontou no relógio, estou usando a function SelectSQL criada da seguinte forma:

    =SelectSQL("Ponto";"HorarioEntrada";"CodigoDoFuncionario = "&$B$3&" And DataPonto = "&MÊS(A8)&"/"&DIA(A8)&"/"&ANO(A8) )

    recebo o retorno como #VALOR!

    mas se faço:

    =SelectSQL("Funcionarios";"NomeFuncionario";"CodigoDoFuncionario = "&$B$3"

    recebo o nome do funcionario na célula

    • Marcado como Resposta andremedeiross sexta-feira, 6 de julho de 2012 20:08
    sexta-feira, 6 de julho de 2012 19:43
  • resolvido,

    o último problema era do nome da tabela que eu estava moscando, simplesmente o nome da tabela era Pontos com "s" no final

    vlw galera,

    a function acima funciona perfeitamente se quiserem utilizar por mim tudo bem!

    lembrando que se possível eu gostaria de ser lembrado no código, caso seja utilizado!

    vlw

    • Marcado como Resposta andremedeiross sexta-feira, 6 de julho de 2012 20:08
    sexta-feira, 6 de julho de 2012 20:08

Todas as Respostas

  • Consegui fazer a conexão e realizar o select

    Function SelectSQL(Tabela As String, Campo As String, Criterios As String) As Variant
        
        Dim Resultado As Variant
        
        
        Dim sql As String
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        'definindo a conexão com o banco de dados
        Set cn = New ADODB.Connection
        
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/CADFUNCIONARIOS.MDB;Jet OLEDB:Database Password=123456;Jet OLEDB:Bypass UserInfo Validation=False"
        
        
        cn.Open
        
        'MsgBox "teste"
        
        'definindo um novo objeto recordset
        Set rs = New ADODB.Recordset
        
        'definindo a instrução sql
        sql = "SELECT " & Tabela & "." & Campo & " From " & Tabela & " where " & Criterios & ";"
        'MsgBox sql
        rs.Open sql, cn
        
        
        i = 2
        If Not rs.EOF Then
            Do While Not rs.EOF
                Resultado = rs(0)
                rs.MoveNext
            Loop
        End If
        
        cn.Close
        
        SelectSQL = Resultado
        
    End Function

    Mas agora preciso fazer uma pesquisa com está função que criei que usa data e não estou conseguindo obter o valor

    preciso que a função busque o horário de entrada do funcionário no banco de dados no dia em que ele apontou no relógio, estou usando a function SelectSQL criada da seguinte forma:

    =SelectSQL("Ponto";"HorarioEntrada";"CodigoDoFuncionario = "&$B$3&" And DataPonto = "&MÊS(A8)&"/"&DIA(A8)&"/"&ANO(A8) )

    recebo o retorno como #VALOR!

    mas se faço:

    =SelectSQL("Funcionarios";"NomeFuncionario";"CodigoDoFuncionario = "&$B$3"

    recebo o nome do funcionario na célula

    • Marcado como Resposta andremedeiross sexta-feira, 6 de julho de 2012 20:08
    sexta-feira, 6 de julho de 2012 19:43
  • resolvido,

    o último problema era do nome da tabela que eu estava moscando, simplesmente o nome da tabela era Pontos com "s" no final

    vlw galera,

    a function acima funciona perfeitamente se quiserem utilizar por mim tudo bem!

    lembrando que se possível eu gostaria de ser lembrado no código, caso seja utilizado!

    vlw

    • Marcado como Resposta andremedeiross sexta-feira, 6 de julho de 2012 20:08
    sexta-feira, 6 de julho de 2012 20:08