Notifications
Clear all

Consulta recorrente no PROTEUS ao popular listview

3 Posts
2 Usuários
0 Reactions
1,443 Visualizações
(@heliofaria)
Posts: 50
Trusted Member
Topic starter
 

Olá pessoal, preciso de ajuda novamente:

Vou começar explicando como funciona o processo todo para facilitar o entendimento.
A empresa do meu cliente usa o sistema PROTEUS. No sistema tenho uma tabela que contém a relação de todos os clientes inadimplentes. Daí, para facilitar a manipulação de dados, eu tenho um ACCESS que vai dentro do sistema e busca as informações contidas nessa tabela.Para melhorar a experiência de visualização dos dados, pelo usuário, eu tenho um arquivo em Excel que carrega uma listvew com esses dados do ACCESS. Tudo funciona bem, porém:

...ao carregar a listview usando como base de dados a consulta do ACCESS-PROTEUS, o processo fica extremamente lento! Ja descobri que a lentidão ocorre pois a listview é populada linha-a-linha e a cada vez que roda o código para buscar uma linha na base, a consulta no servidor do PROTEUS é realizada novamente. É como se para toda linha que existe na base do ACCESS, é feita uma consulta no servidor atualizando todo o banco novamente.

Minha duvida é: Seria possível desabilitar essa "consulta automática" do ACCESS toda vez que o Excel fizer a leitura/população da Listview?

Obs: Vou postar o código que uso para criar a conexão, abrir o recordset e popular a listview, pois não adianta postar o arquivo, haja vista que não seria possível criar a conexão do ACCESS com o servidor do cliente.

Public Conexao As New ADODB.Connection
Public Rst As New ADODB.Recordset
Private Sub UserForm2_Initialize()
   
         With L_Relatorio
        .Gridlines = True
        .View = lvwReport
        .FullRowSelect = True
        .ColumnHeaders.Add Text:="CHAVE", Width:=0
        .ColumnHeaders.Add Text:="FILIAL", Width:=40
        .ColumnHeaders.Add Text:="NOTA", Width:=70
        .ColumnHeaders.Add Text:="CLIENTE", Width:=220
        .ColumnHeaders.Add Text:="SALDO PARCELADO", Width:=50, Alignment:=0
        .ColumnHeaders.Add Text:="SALDO EM ABERTO", Width:=80, Alignment:=0
        .ColumnHeaders.Add Text:="ATRASO (DIAS)", Width:=80, Alignment:=0
        .ColumnHeaders.Add Text:="FONE", Width:=70, Alignment:=0
        .ColumnHeaders.Add Text:="EMISSÃO", Width:=50, Alignment:=0

       End With ''

Set Rst = New ADODB.Recordset

Set Conexao = New ADODB.Connection

    With Conexao
       .Provider = "Microsoft.ACE.OLEDB.16.0"
         
       .Properties("User ID") = "Admin"
       .Properties("Jet OLEDB:Database Password") = "12345"
       
       .ConnectionString = "\10.1.1.8Bd BancoBanco Inadimplência.mdb" ' CAMINHO REDE
       .Open
     End With

Rst.Open "SELECT * FROM dbo_ANALIZE_COBRANCA_AQUILA_AGR2 WHERE FILIAL = '0101' ORDER BY DIAS_ATRAZO DESC", Conexao, adOpenKeyset, adLockOptimistic, adCmdText
   
     L_Relatorio.ListItems.Clear
   While Not Rst.EOF
       Set List = L_Relatorio.ListItems.Add(Text:=Rst(0))  'PK
            List.SubItems(1) = Rst(1) 'FILIAL
            List.SubItems(2) = Rst(2) 'NOTA
            List.SubItems(3) = Rst(8) 'CLIENTE
            List.SubItems(4) = Rst(4) 'SALDO PARCELADO
            List.SubItems(5) = Rst(5) 'SALDO EM ABERTO
            List.SubItems(6) = Rst(15) 'ATRASO
            List.SubItems(7) = Rst(9) 'FONE
            List.SubItems(8) = Rst(6) 'EMISSAO
            Rst.MoveNext
     Wend

Set Conexao = Nothing
Set Rst = Nothing

End Sub
 
Postado : 16/11/2016 2:08 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi corretamente mas
uma possibilidade seria criar no Access uma tabela baseada na consulta Proteus; e o select no excel direcionado a essa tabela.
Outra possibilidade seria "colar" os dados da consulta em uma planilha no excel;
algo +/- asim: Plan4.Range("A2").CopyFromRecordset rst e popular o listview a partir dessa sheet.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/11/2016 6:38 am
(@heliofaria)
Posts: 50
Trusted Member
Topic starter
 

Então Reinaldo, fiz exatamente isso que vc falou: Criei uma tabela local a partir da tabela consulta do Proteus e modifiquei o select para buscar a tabela local em vez da tabela consulta. Funcionou perfeitamente e rápido, porém eu teria que criar um gatilho para acionar a replicação dessa tabela pois isso tudo tem que rodar automaticamente. Criei uma macro no Access pra rodar essa rotina de criar uma cópia da tabela consulta numa tabela local, e funcionou, mas ainda continuo com o problema: Como acionar um gatilho para rodar essa macro no Access?

 
Postado : 17/11/2016 6:46 am