MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Função Retorna Recordset

    Compartilhe

    gustavopadauan
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1
    Registrado : 22/01/2018

    Função Retorna Recordset

    Mensagem  gustavopadauan em 22/1/2018, 20:39

    Senhores adotamos o VBA em nosso ambiente de produção, mas a documentação a respeito não é escassa porem nada é oficial, e o que é oficial tem poucos exemplos de utilização, tentei de diversas formas mas sem sucesso usar uma função que facilitasse as consultas a banco de dados.

    retornando assim um recordset, para ser utilizado da melhor forma.
    Porem na linha indicada recebo o erro uso null invalido

    Segue o codigo

    ' This function returns a recordset which can hold multiple values.
    Public Function GetEmployees() As ADODB.Recordset
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    Dim cn As ADODB.Connection


    Set cn = New ADODB.Connection

    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=K:\GCON\BASE DE DADOS\MATMED-ADM.accdb"
    cn.Open



    Dim cmd As ADODB.Command
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = cn
    cmd.CommandType = adCmdText
    cmd.CommandText = "SELECT * FROM MATMED;"
    cmd.Execute

    Set GetEmployees = cn.Execute("select * from MATMED;")


    End Function

    Private Sub cmdGetRecordset_Click()
    Dim strFirstName As String
    Dim strLastName As String

    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset

    ' Get the recordset object.
    Set rst = GetEmployees()


    ' Use loop to iterate through the recordset row by row to read its content.
    Do While Not rst.EOF
    bounce strFirstName = rst!COD
    'strLastName = rst.Fields("DESC")

    ' Display in Immediate window.
    Debug.Print strFirstName & " " & strLastName

    rst.MoveNext
    Loop

    rst.Close
    Set rst = Nothing
    End Sub
    avatar
    José Machado
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 93
    Registrado : 13/09/2016

    Re: Função Retorna Recordset

    Mensagem  José Machado em 22/1/2018, 20:58

    Amigo...
    Dê uma olhada nesse post

    [Você precisa estar registrado e conectado para ver este link.]
    avatar
    José Machado
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 93
    Registrado : 13/09/2016

    Re: Função Retorna Recordset

    Mensagem  José Machado em 23/1/2018, 18:46

    Amigo
    veja se esse exemplo te ajuda:
    Você cria um Módulo de Classe com o nome Cls_Conexao e cola esse código 

    'Importe a Referencia Microsoft Activex Data Objets 2.8 Library
    Dim conexao As ADODB.Connection
    Dim CONEXAO_STRING As String
    Public DATA_READER As ADODB.Recordset
        
    Sub Initialize()

        Dim DATA_BASE_PROVIDER As String
        Dim DATA_BASE_LOCAL As String
        Dim DATA_BASE_NOME As String
        Dim DATA_BASE_USUARIO As String
        Dim DATA_BASE_SENHA As String
        
        DATA_BASE_PROVIDER = "Microsoft.ACE.OLEDB.12.0" ' Driver para o banco de dados com extensão .accdb
        DATA_BASE_LOCAL = "" 'Local onde está o banco de dados, ex: C:/    
        DATA_BASE_NOME = "" 'Nome do arquivo do banco de dados, ex: Data_Base.accdb
        DATA_BASE_USUARIO = "" 'Usuário do banco de dados, caso você tenha colocado usuário
        DATA_BASE_SENHA = "" 'Senha para acesso ao banco de dados caso tenha colocado senha
        
        CONEXAO_STRING = "Provider = " & DATA_BASE_PROVIDER & _
        ";Data Source = " & DATA_BASE_LOCAL + DATA_BASE_NOME & _
        ";USER ID = " & DATA_BASE_USUARIO & _
        ";PASSWORD = " & DATA_BASE_SENHA & ";" ' essa é a string da CONEXAO
        
        Set conexao = New ADODB.Connection
            conexao.CursorLocation = adUseClient
        
    End Sub
    'Abre a CONEXAO
    Public Sub CONEXAO_ABRIR()
    On Error GoTo erro
        Initialize
        conexao.Open CONEXAO_STRING
    Exit Sub
    erro:
        MsgBox "Falha ao abrir a CONEXAO" & CONEXAO_STRING
    End Sub
    'Fecha a CONEXAO
    Public Sub CONEXAO_FECHAR()
    On Error GoTo erro
        conexao.Close
        Set conexao = Nothing
    Exit Sub
    erro:
        MsgBox "Falha ao fechar a CONEXAO"
    End Sub
    'Executa a query do tipo INSERT,DELETE, UPDATE
    Public Sub EXECUTAR_NONQUERY(query As String)
    On Error GoTo erro
        CONEXAO_ABRIR
        conexao.Execute (query)
        CONEXAO_FECHAR
    Exit Sub
    erro:
        MsgBox "Falha ao executar a query"
    End Sub
    'Executa a query do tipo READ/SELECT
    Public Sub EXECUTAR_DATAREADER(query As String)
    On Error GoTo erro
        Set DATA_READER = New ADODB.Recordset
            DATA_READER.Open query, conexao, adOpenStatic, adLockReadOnly
    Exit Sub
    erro:
        MsgBox "Falha ao executar o DATA_READER"
    End Sub
    'Fecha o SELECT e a CONEXAO
    Public Sub FECHAR_DATAREADER()
    On Error GoTo erro
        DATA_READER.Close
        Set DATA_READER = Nothing
        CONEXAO_FECHAR
    Exit Sub
    erro:
        MsgBox "Falha ao fechar o DATA_READER"
    End Sub

    Nos formulários e outros módulos de classe ou módulo que usarem a Cls_Conexao

    Exemplo:

    Dim conexao As New Cls_Conexao

    Private Sub Form_Load()
        Preencher_combo_Adodb
    End Sub

    Sub Preencher_combo_Adodb()
        Dim query As String ' variavel tipo String
        
        query = "SELECT * FROM lista"
        
        conexao.CONEXAO_ABRIR 'abre a conexao
        
        conexao.EXECUTAR_DATAREADER (query) 'executa a sql
        
        With Me.combo_adodb

            .ColumnCount = 2 ' 2 colunas
            .ColumnWidths = "3cm;5cm" ' largura das colunas

        Set .Recordset = Nothing 'limpa a combo
        Set .Recordset = conexao.DATA_READER 'preenche a combo com os dados da conexao

        End With
        conexao.FECHAR_DATAREADER ' fecha o data reader e a conexao
    End Sub

    E assim por diante...

    Att
    José Machado

      Data/hora atual: 19/8/2018, 10:08