MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    Barra de progresso para recordset ADO em formulários continuos

    Compartilhe

    Motar
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 143
    Registrado : 03/08/2010

    Barra de progresso para recordset ADO em formulários continuos

    Mensagem  Motar em Ter 02 Dez 2014, 10:13

    Olá a todos, agradecia vossa ajuda no seguinte:
    Utilizo a função abaixo para mostrar e filtrar dados num formulario continuo desvinculado, mas quando os dados a exibir são superiores a 1000 as vezes pode demorar mais de 10 segundos a mostrar a informação, tem como associar a esta função uma barra de progresso para o utilizador ter informação do tempo que ainda vai demorar a processar a informação?

    Function FuncAdoDadosForm(SelForm As Object, SelView As String)
    FormAtivo = SelForm.Name
    Call ConServer
    If rsfc.State = 1 Then
    rsfc.Close
    End If
    Set rsfc = New ADODB.Recordset
    Dim sql As String
    Dim FormFiltro As String

    If Left(SelForm.SelFormFiltro, 7) = " WHERE " Then
    If SelForm.SelFormOrd = "" Then
    sql = "SELECT * FROM " & SelView & SelForm.SelFormFiltro
    Else
    sql = "SELECT * FROM " & SelView & SelForm.SelFormFiltro & " ORDER BY " & SelForm.SelFormOrd
    End If
    rsfc.Open sql, CON, adOpenKeyset, adLockReadOnly, adCmdText
    Else
    If SelForm.SelFormOrd = "" Then
    sql = "SELECT * FROM " & SelView
    Else
    sql = "SELECT * FROM " & SelView & " ORDER BY " & SelForm.SelFormOrd
    End If
    rsfc.Open sql, CON, adOpenKeyset, adLockReadOnly, adCmdText
    If SelForm.SelFormFiltro <> "" Then
    FormFiltro = Screen.ActiveForm.SelFormFiltro
    rsfc.Filter = FormFiltro
    End If
    End If

    Set SelForm.Recordset = rsfc
    End Function

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: Barra de progresso para recordset ADO em formulários continuos

    Mensagem  criquio em Ter 02 Dez 2014, 10:53

    Tem que ser desvinculado mesmo? Não serve colocando a sql na origem do formulário? Ou talvez usando DAO ao invés do ADO. Em alguns testes trabalhando com Access apenas o DAO me foi bem mais rápido do que o ADO e o ADO mais rápido quando acessando dados do Access à partir de outro aplicativo como o Excel.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.


    Motar
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 143
    Registrado : 03/08/2010

    Re: Barra de progresso para recordset ADO em formulários continuos

    Mensagem  Motar em Ter 02 Dez 2014, 11:08

    Nesta situação tem de ser desvinculado mesmo, como os dados são provenientes do SQL Server fiz o teste e o ADO é mais ápido que o DAO

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: Barra de progresso para recordset ADO em formulários continuos

    Mensagem  criquio em Ter 02 Dez 2014, 11:14

    Bem, para fazer uma barra de progresso você vai precisar do total de registros e calcular a porcentagem já atualizada e com base na porcentagem e no tamanho final que a barra atingirá fazer ela ir aumentando de tamanho de acordo essa porcentagem. Mas isso vai deixar o processo ainda mais lento. Eu colocaria apenas um label escrito "Atualizando. Esse processo poderá demorar vários segundos." Assim, não influenciaria no tempo.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.


    Motar
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 143
    Registrado : 03/08/2010

    Re: Barra de progresso para recordset ADO em formulários continuos

    Mensagem  Motar em Ter 02 Dez 2014, 11:44

    Obrigado pela dica, mas exibir uma mensagem não dá a percepção ao utilizador do tempo que ainda falta, eu gostaria era que fosse algo que não prejudicasse o tempo de execução em mais de 2 segundos, nalguns softwares vesse a barra de progresso no vba não será possivel?

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: Barra de progresso para recordset ADO em formulários continuos

    Mensagem  criquio em Ter 02 Dez 2014, 15:05

    Sim, é possível mas do jeito que mencionei. Vai interferir na performance, talvez mais de 2 segundos, pois ao mesmo tempo que atualiza os dados, estará também atualizando a barra de progresso. É serviço extra para a função.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.


    Motar
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 143
    Registrado : 03/08/2010

    Re: Barra de progresso para recordset ADO em formulários continuos

    Mensagem  Motar em Ter 02 Dez 2014, 15:18

    Mas no meu exemplo como eu poderei saber em que registo vai se não uso o comando .Movenext ?
    Atribuo os registos de uma só vez Set SelForm.Recordset = rsfc

      Data/hora atual: Qui 08 Dez 2016, 00:06