Usuário com melhor resposta
Criar função no excel para fazer select em um bd access

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!
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
-
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
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
-
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