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

2 participantes

    Função Retorna Recordset

    avatar
    gustavopadauan
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    Função Retorna Recordset Empty Função Retorna Recordset

    Mensagem  gustavopadauan 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
    José Machado
    José Machado
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

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

    Função Retorna Recordset Empty Re: Função Retorna Recordset

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

    José Machado
    José Machado
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

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

    Função Retorna Recordset Empty Re: Função Retorna Recordset

    Mensagem  José Machado 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: 2/12/2022, 00:56