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


3 participantes

    Formulário contínuo desacoplado

    avatar
    LuísAugustoS
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 07/11/2017

    Formulário contínuo desacoplado Empty Formulário contínuo desacoplado

    Mensagem  LuísAugustoS 21/6/2022, 17:13

    Boa tarde, pessoal!
    Me desculpem caso exista algum tópico com a mesma dúvida.

    Estou tentando desacoplar formulários e manter o back end fechado o máximo possível, porém quando fecho a conexão após a consulta, perco o recordset. (Óbvio?)

    Tentei ingenuamente clonar o recordset e fechar o banco na esperança de manter os dados, mas isso não funciona.
    Já tem muito tempo que não trabalho com o Access.

    Qualquer sugestão é bem vinda.

    Augusto

    Código:

    Private Sub Form_Load()

    Dim db As DAO.Database
    Dim rsSQL As DAO.Recordset
    Dim rs As Recordset

    Dim strSql As String
    Dim i As Long
    Dim val As String

        Set db = DBEngine.Workspaces(0).OpenDatabase("\\131.0.0.1\database_be.accdb")

        strSql = "SELECT * " & vbCrLf & _
                     "FROM assemblers " & vbCrLf & _
                     "ORDER BY assemblers.name;"

        Set rsSQL = db.OpenRecordset(strSql, dbOpenSnapshot)
        
        Set rs = rsSQL.Clone 'isso foi uma tentativa frustrada e deve ser ignorada
        
        Set Me.Recordset = rs 'o formulário é preenchido corretamente

        rsSQL.Close
        Set rsSQL = Nothing
        
        db.Close 'nesse momento o formulário perde as informações
        Set db = Nothing

    End Sub

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3217
    Registrado : 13/12/2016

    Formulário contínuo desacoplado Empty Re: Formulário contínuo desacoplado

    Mensagem  Alexandre Fim 21/6/2022, 19:22

    Olá Luis,

    Utilize conexões ADO.

    Copie e cole o código abaixo em um módulo:

    Código:


    Option Explicit
    Option Compare Database
    Global cnn      As New ADODB.Connection
    Global rsSQL    As New ADODB.Recordset

    Public Function Conex()
    On Error GoTo trata_erro

        If cnn.State = 0 Then
            With cnn
                .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\131.0.0.1\database_be.accdb;Persist Security Info=False;"
                .Open
            End With
        End If
       
        Exit Function

    trata_erro:
        MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
        Exit Function

    End Function



    No Form Load, copie e cole o código abaixo:

    Código:


    Private Sub Form_Load()

    Dim strSql      As String
    Dim i          As Long
    Dim val        As String

       
        '-- by Alexandre Fim
        'Set db = DBEngine.Workspaces(0).OpenDatabase("\\131.0.0.1\database_be.accdb")

        '-- Abre a conexão
        Call Conex
       
        strSql = "SELECT * " & vbCrLf & _
                    "FROM assemblers " & vbCrLf & _
                    "ORDER BY assemblers.name;"

        'Set rsSQL = db.OpenRecordset(strSql, dbOpenSnapshot)
       
        '-- Abre o recosrdset usando a conexão aberta
        rsSQL.Open strSql, cnn, adOpenDynamic, adLockPessimistic
       
        'Set rs = rsSQL.Clone 'isso foi uma tentativa frustrada e deve ser ignorada
        'Set Me.Recordset = rs 'o formulário é preenchido corretamente
        Set Me.Recordset = rsSQL

        rsSQL.Close
        Set rsSQL = Nothing
       
        '-- Não é necessário fechar o banco, apenas a conexão
        'db.Close 'nesse momento o formulário perde as informações
        'Set db = Nothing
        cnn.Close
        Set cnn = Nothing


    End Sub


    Marque a referencia do ADO também:

    Formulário contínuo desacoplado Ado_re11


    Acredito que irá funcionar.

    Boa sorte.
    Att,
    FIM





    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    Formulário contínuo desacoplado Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    LuísAugustoS
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 07/11/2017

    Formulário contínuo desacoplado Empty Re: Formulário contínuo desacoplado

    Mensagem  LuísAugustoS 22/6/2022, 13:54

    Muito obrigado, João Paulo!
    Infelizmente não deu muito certo pra mim.

    Eu esperava que após o evento Form_Load o arquivo temporário database_be.laccdb fechasse. Este arquivo só está sendo excluído após fechamento do formulário.

    Tive que alterar o tipo de cursor, pois estava dando erro 7965.

       'rsSQL.Open strSql, cnn, adOpenDynamic, adLockPessimistic
       rsSQL.Open strSql, cnn, adOpenStatic, adLockPessimistic

    Tentei alterar o tipo de bloqueio para adLockReadOnly na esperança que isso desse o resultado que esperava, mas também não tive sucesso.

    Essa é a única maneira de preencher um formulário contínuo?

    Muito obrigado.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3217
    Registrado : 13/12/2016

    Formulário contínuo desacoplado Empty Re: Formulário contínuo desacoplado

    Mensagem  Alexandre Fim 22/6/2022, 14:55

    Luis,
    Minha sugestão é substituir o formulário continuo por listbox, e vai ser mais prático e fácil de trabalhar também.
    Sobre a questão do arquivo .laccdb sempre estará aberto enquanto houver uma conexão aberta, e essa é uma característica do Access, e isso tmb não é um problema.
    Poste aqui uma cópia do seu bd, somente objetos envolvidos na questão para análise e possível solução.

    Att,
    FIM


    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    Formulário contínuo desacoplado Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    LuísAugustoS
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 07/11/2017

    Formulário contínuo desacoplado Empty Re: Formulário contínuo desacoplado

    Mensagem  LuísAugustoS 24/6/2022, 12:22

    Muito obrigado, João Paulo.
    Como é uma situação temporária, não irei investir mais tempo nessa questão.

    Um grande abraço.

    Atenciosamente, Augusto
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3880
    Registrado : 04/04/2010

    Formulário contínuo desacoplado Empty Re: Formulário contínuo desacoplado

    Mensagem  Avelino Sampaio 24/6/2022, 12:43



    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.

    Conteúdo patrocinado


    Formulário contínuo desacoplado Empty Re: Formulário contínuo desacoplado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 26/4/2024, 11:20